Merge remote-tracking branch 'upstream/dev' into feat/include-git-hash-everywhere

This commit is contained in:
Jun Siang Cheah 2024-05-26 11:27:02 +01:00
commit aba6308825
133 changed files with 5297 additions and 5813 deletions

View File

@ -10,8 +10,4 @@ OPENAI_API_KEY=''
# DO NOT TRACK # DO NOT TRACK
SCARF_NO_ANALYTICS=true SCARF_NO_ANALYTICS=true
DO_NOT_TRACK=true DO_NOT_TRACK=true
ANONYMIZED_TELEMETRY=false ANONYMIZED_TELEMETRY=false
# Use locally bundled version of the LiteLLM cost map json
# to avoid repetitive startup connections
LITELLM_LOCAL_MODEL_COST_MAP="True"

View File

@ -63,11 +63,6 @@ ENV OPENAI_API_KEY="" \
DO_NOT_TRACK=true \ DO_NOT_TRACK=true \
ANONYMIZED_TELEMETRY=false ANONYMIZED_TELEMETRY=false
# Use locally bundled version of the LiteLLM cost map json
# to avoid repetitive startup connections
ENV LITELLM_LOCAL_MODEL_COST_MAP="True"
#### Other models ######################################################### #### Other models #########################################################
## whisper TTS model settings ## ## whisper TTS model settings ##
ENV WHISPER_MODEL="base" \ ENV WHISPER_MODEL="base" \
@ -87,10 +82,10 @@ WORKDIR /app/backend
ENV HOME /root ENV HOME /root
# Create user and group if not root # Create user and group if not root
RUN if [ $UID -ne 0 ]; then \ RUN if [ $UID -ne 0 ]; then \
if [ $GID -ne 0 ]; then \ if [ $GID -ne 0 ]; then \
addgroup --gid $GID app; \ addgroup --gid $GID app; \
fi; \ fi; \
adduser --uid $UID --gid $GID --home $HOME --disabled-password --no-create-home app; \ adduser --uid $UID --gid $GID --home $HOME --disabled-password --no-create-home app; \
fi fi
RUN mkdir -p $HOME/.cache/chroma RUN mkdir -p $HOME/.cache/chroma

View File

@ -1,379 +0,0 @@
import sys
from contextlib import asynccontextmanager
from fastapi import FastAPI, Depends, HTTPException
from fastapi.routing import APIRoute
from fastapi.middleware.cors import CORSMiddleware
import logging
from fastapi import FastAPI, Request, Depends, status, Response
from fastapi.responses import JSONResponse
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
from starlette.responses import StreamingResponse
import json
import time
import requests
from pydantic import BaseModel, ConfigDict
from typing import Optional, List
from utils.utils import get_verified_user, get_current_user, get_admin_user
from config import SRC_LOG_LEVELS, ENV
from constants import MESSAGES
import os
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["LITELLM"])
from config import (
ENABLE_LITELLM,
ENABLE_MODEL_FILTER,
MODEL_FILTER_LIST,
DATA_DIR,
LITELLM_PROXY_PORT,
LITELLM_PROXY_HOST,
)
import warnings
warnings.simplefilter("ignore")
from litellm.utils import get_llm_provider
import asyncio
import subprocess
import yaml
@asynccontextmanager
async def lifespan(app: FastAPI):
log.info("startup_event")
# TODO: Check config.yaml file and create one
asyncio.create_task(start_litellm_background())
yield
app = FastAPI(lifespan=lifespan)
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
LITELLM_CONFIG_DIR = f"{DATA_DIR}/litellm/config.yaml"
with open(LITELLM_CONFIG_DIR, "r") as file:
litellm_config = yaml.safe_load(file)
app.state.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER.value
app.state.MODEL_FILTER_LIST = MODEL_FILTER_LIST.value
app.state.ENABLE = ENABLE_LITELLM
app.state.CONFIG = litellm_config
# Global variable to store the subprocess reference
background_process = None
CONFLICT_ENV_VARS = [
# Uvicorn uses PORT, so LiteLLM might use it as well
"PORT",
# LiteLLM uses DATABASE_URL for Prisma connections
"DATABASE_URL",
]
async def run_background_process(command):
global background_process
log.info("run_background_process")
try:
# Log the command to be executed
log.info(f"Executing command: {command}")
# Filter environment variables known to conflict with litellm
env = {k: v for k, v in os.environ.items() if k not in CONFLICT_ENV_VARS}
# Execute the command and create a subprocess
process = await asyncio.create_subprocess_exec(
*command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env
)
background_process = process
log.info("Subprocess started successfully.")
# Capture STDERR for debugging purposes
stderr_output = await process.stderr.read()
stderr_text = stderr_output.decode().strip()
if stderr_text:
log.info(f"Subprocess STDERR: {stderr_text}")
# log.info output line by line
async for line in process.stdout:
log.info(line.decode().strip())
# Wait for the process to finish
returncode = await process.wait()
log.info(f"Subprocess exited with return code {returncode}")
except Exception as e:
log.error(f"Failed to start subprocess: {e}")
raise # Optionally re-raise the exception if you want it to propagate
async def start_litellm_background():
log.info("start_litellm_background")
# Command to run in the background
command = [
"litellm",
"--port",
str(LITELLM_PROXY_PORT),
"--host",
LITELLM_PROXY_HOST,
"--telemetry",
"False",
"--config",
LITELLM_CONFIG_DIR,
]
await run_background_process(command)
async def shutdown_litellm_background():
log.info("shutdown_litellm_background")
global background_process
if background_process:
background_process.terminate()
await background_process.wait() # Ensure the process has terminated
log.info("Subprocess terminated")
background_process = None
@app.get("/")
async def get_status():
return {"status": True}
async def restart_litellm():
"""
Endpoint to restart the litellm background service.
"""
log.info("Requested restart of litellm service.")
try:
# Shut down the existing process if it is running
await shutdown_litellm_background()
log.info("litellm service shutdown complete.")
# Restart the background service
asyncio.create_task(start_litellm_background())
log.info("litellm service restart complete.")
return {
"status": "success",
"message": "litellm service restarted successfully.",
}
except Exception as e:
log.info(f"Error restarting litellm service: {e}")
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e)
)
@app.get("/restart")
async def restart_litellm_handler(user=Depends(get_admin_user)):
return await restart_litellm()
@app.get("/config")
async def get_config(user=Depends(get_admin_user)):
return app.state.CONFIG
class LiteLLMConfigForm(BaseModel):
general_settings: Optional[dict] = None
litellm_settings: Optional[dict] = None
model_list: Optional[List[dict]] = None
router_settings: Optional[dict] = None
model_config = ConfigDict(protected_namespaces=())
@app.post("/config/update")
async def update_config(form_data: LiteLLMConfigForm, user=Depends(get_admin_user)):
app.state.CONFIG = form_data.model_dump(exclude_none=True)
with open(LITELLM_CONFIG_DIR, "w") as file:
yaml.dump(app.state.CONFIG, file)
await restart_litellm()
return app.state.CONFIG
@app.get("/models")
@app.get("/v1/models")
async def get_models(user=Depends(get_current_user)):
if app.state.ENABLE:
while not background_process:
await asyncio.sleep(0.1)
url = f"http://localhost:{LITELLM_PROXY_PORT}/v1"
r = None
try:
r = requests.request(method="GET", url=f"{url}/models")
r.raise_for_status()
data = r.json()
if app.state.ENABLE_MODEL_FILTER:
if user and user.role == "user":
data["data"] = list(
filter(
lambda model: model["id"] in app.state.MODEL_FILTER_LIST,
data["data"],
)
)
return data
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']}"
except:
error_detail = f"External: {e}"
return {
"data": [
{
"id": model["model_name"],
"object": "model",
"created": int(time.time()),
"owned_by": "openai",
}
for model in app.state.CONFIG["model_list"]
],
"object": "list",
}
else:
return {
"data": [],
"object": "list",
}
@app.get("/model/info")
async def get_model_list(user=Depends(get_admin_user)):
return {"data": app.state.CONFIG["model_list"]}
class AddLiteLLMModelForm(BaseModel):
model_name: str
litellm_params: dict
model_config = ConfigDict(protected_namespaces=())
@app.post("/model/new")
async def add_model_to_config(
form_data: AddLiteLLMModelForm, user=Depends(get_admin_user)
):
try:
get_llm_provider(model=form_data.model_name)
app.state.CONFIG["model_list"].append(form_data.model_dump())
with open(LITELLM_CONFIG_DIR, "w") as file:
yaml.dump(app.state.CONFIG, file)
await restart_litellm()
return {"message": MESSAGES.MODEL_ADDED(form_data.model_name)}
except Exception as e:
print(e)
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e)
)
class DeleteLiteLLMModelForm(BaseModel):
id: str
@app.post("/model/delete")
async def delete_model_from_config(
form_data: DeleteLiteLLMModelForm, user=Depends(get_admin_user)
):
app.state.CONFIG["model_list"] = [
model
for model in app.state.CONFIG["model_list"]
if model["model_name"] != form_data.id
]
with open(LITELLM_CONFIG_DIR, "w") as file:
yaml.dump(app.state.CONFIG, file)
await restart_litellm()
return {"message": MESSAGES.MODEL_DELETED(form_data.id)}
@app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE"])
async def proxy(path: str, request: Request, user=Depends(get_verified_user)):
body = await request.body()
url = f"http://localhost:{LITELLM_PROXY_PORT}"
target_url = f"{url}/{path}"
headers = {}
# headers["Authorization"] = f"Bearer {key}"
headers["Content-Type"] = "application/json"
r = None
try:
r = requests.request(
method=request.method,
url=target_url,
data=body,
headers=headers,
stream=True,
)
r.raise_for_status()
# Check if response is SSE
if "text/event-stream" in r.headers.get("Content-Type", ""):
return StreamingResponse(
r.iter_content(chunk_size=8192),
status_code=r.status_code,
headers=dict(r.headers),
)
else:
response_data = r.json()
return response_data
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'] if 'message' in res['error'] else res['error']}"
except:
error_detail = f"External: {e}"
raise HTTPException(
status_code=r.status_code if r else 500, detail=error_detail
)

View File

@ -29,8 +29,8 @@ import time
from urllib.parse import urlparse from urllib.parse import urlparse
from typing import Optional, List, Union from typing import Optional, List, Union
from apps.webui.models.models import Models
from apps.web.models.users import Users from apps.webui.models.users import Users
from constants import ERROR_MESSAGES from constants import ERROR_MESSAGES
from utils.utils import ( from utils.utils import (
decode_token, decode_token,
@ -39,6 +39,8 @@ from utils.utils import (
get_admin_user, get_admin_user,
) )
from utils.models import get_model_id_from_custom_model_id
from config import ( from config import (
SRC_LOG_LEVELS, SRC_LOG_LEVELS,
@ -68,7 +70,6 @@ app.state.config = AppConfig()
app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
app.state.config.ENABLE_OLLAMA_API = ENABLE_OLLAMA_API app.state.config.ENABLE_OLLAMA_API = ENABLE_OLLAMA_API
app.state.config.OLLAMA_BASE_URLS = OLLAMA_BASE_URLS app.state.config.OLLAMA_BASE_URLS = OLLAMA_BASE_URLS
app.state.MODELS = {} app.state.MODELS = {}
@ -305,6 +306,9 @@ async def pull_model(
r = None r = None
# Admin should be able to pull models from any source
payload = {**form_data.model_dump(exclude_none=True), "insecure": True}
def get_request(): def get_request():
nonlocal url nonlocal url
nonlocal r nonlocal r
@ -332,7 +336,7 @@ async def pull_model(
r = requests.request( r = requests.request(
method="POST", method="POST",
url=f"{url}/api/pull", url=f"{url}/api/pull",
data=form_data.model_dump_json(exclude_none=True).encode(), data=json.dumps(payload),
stream=True, stream=True,
) )
@ -875,14 +879,93 @@ async def generate_chat_completion(
user=Depends(get_verified_user), user=Depends(get_verified_user),
): ):
log.debug(
"form_data.model_dump_json(exclude_none=True).encode(): {0} ".format(
form_data.model_dump_json(exclude_none=True).encode()
)
)
payload = {
**form_data.model_dump(exclude_none=True),
}
model_id = form_data.model
model_info = Models.get_model_by_id(model_id)
if model_info:
print(model_info)
if model_info.base_model_id:
payload["model"] = model_info.base_model_id
model_info.params = model_info.params.model_dump()
if model_info.params:
payload["options"] = {}
payload["options"]["mirostat"] = model_info.params.get("mirostat", None)
payload["options"]["mirostat_eta"] = model_info.params.get(
"mirostat_eta", None
)
payload["options"]["mirostat_tau"] = model_info.params.get(
"mirostat_tau", None
)
payload["options"]["num_ctx"] = model_info.params.get("num_ctx", None)
payload["options"]["repeat_last_n"] = model_info.params.get(
"repeat_last_n", None
)
payload["options"]["repeat_penalty"] = model_info.params.get(
"frequency_penalty", None
)
payload["options"]["temperature"] = model_info.params.get(
"temperature", None
)
payload["options"]["seed"] = model_info.params.get("seed", None)
payload["options"]["stop"] = (
[
bytes(stop, "utf-8").decode("unicode_escape")
for stop in model_info.params["stop"]
]
if model_info.params.get("stop", None)
else None
)
payload["options"]["tfs_z"] = model_info.params.get("tfs_z", None)
payload["options"]["num_predict"] = model_info.params.get(
"max_tokens", None
)
payload["options"]["top_k"] = model_info.params.get("top_k", None)
payload["options"]["top_p"] = model_info.params.get("top_p", None)
if model_info.params.get("system", None):
# Check if the payload already has a system message
# If not, add a system message to the payload
if payload.get("messages"):
for message in payload["messages"]:
if message.get("role") == "system":
message["content"] = (
model_info.params.get("system", None) + message["content"]
)
break
else:
payload["messages"].insert(
0,
{
"role": "system",
"content": model_info.params.get("system", None),
},
)
if url_idx == None: if url_idx == None:
model = form_data.model if ":" not in payload["model"]:
payload["model"] = f"{payload['model']}:latest"
if ":" not in model: if payload["model"] in app.state.MODELS:
model = f"{model}:latest" url_idx = random.choice(app.state.MODELS[payload["model"]]["urls"])
if model in app.state.MODELS:
url_idx = random.choice(app.state.MODELS[model]["urls"])
else: else:
raise HTTPException( raise HTTPException(
status_code=400, status_code=400,
@ -892,16 +975,12 @@ async def generate_chat_completion(
url = app.state.config.OLLAMA_BASE_URLS[url_idx] url = app.state.config.OLLAMA_BASE_URLS[url_idx]
log.info(f"url: {url}") log.info(f"url: {url}")
print(payload)
r = None r = None
log.debug(
"form_data.model_dump_json(exclude_none=True).encode(): {0} ".format(
form_data.model_dump_json(exclude_none=True).encode()
)
)
def get_request(): def get_request():
nonlocal form_data nonlocal payload
nonlocal r nonlocal r
request_id = str(uuid.uuid4()) request_id = str(uuid.uuid4())
@ -910,7 +989,7 @@ async def generate_chat_completion(
def stream_content(): def stream_content():
try: try:
if form_data.stream: if payload.get("stream", None):
yield json.dumps({"id": request_id, "done": False}) + "\n" yield json.dumps({"id": request_id, "done": False}) + "\n"
for chunk in r.iter_content(chunk_size=8192): for chunk in r.iter_content(chunk_size=8192):
@ -928,7 +1007,7 @@ async def generate_chat_completion(
r = requests.request( r = requests.request(
method="POST", method="POST",
url=f"{url}/api/chat", url=f"{url}/api/chat",
data=form_data.model_dump_json(exclude_none=True).encode(), data=json.dumps(payload),
stream=True, stream=True,
) )
@ -984,14 +1063,62 @@ async def generate_openai_chat_completion(
user=Depends(get_verified_user), user=Depends(get_verified_user),
): ):
payload = {
**form_data.model_dump(exclude_none=True),
}
model_id = form_data.model
model_info = Models.get_model_by_id(model_id)
if model_info:
print(model_info)
if model_info.base_model_id:
payload["model"] = model_info.base_model_id
model_info.params = model_info.params.model_dump()
if model_info.params:
payload["temperature"] = model_info.params.get("temperature", None)
payload["top_p"] = model_info.params.get("top_p", None)
payload["max_tokens"] = model_info.params.get("max_tokens", None)
payload["frequency_penalty"] = model_info.params.get(
"frequency_penalty", None
)
payload["seed"] = model_info.params.get("seed", None)
payload["stop"] = (
[
bytes(stop, "utf-8").decode("unicode_escape")
for stop in model_info.params["stop"]
]
if model_info.params.get("stop", None)
else None
)
if model_info.params.get("system", None):
# Check if the payload already has a system message
# If not, add a system message to the payload
if payload.get("messages"):
for message in payload["messages"]:
if message.get("role") == "system":
message["content"] = (
model_info.params.get("system", None) + message["content"]
)
break
else:
payload["messages"].insert(
0,
{
"role": "system",
"content": model_info.params.get("system", None),
},
)
if url_idx == None: if url_idx == None:
model = form_data.model if ":" not in payload["model"]:
payload["model"] = f"{payload['model']}:latest"
if ":" not in model: if payload["model"] in app.state.MODELS:
model = f"{model}:latest" url_idx = random.choice(app.state.MODELS[payload["model"]]["urls"])
if model in app.state.MODELS:
url_idx = random.choice(app.state.MODELS[model]["urls"])
else: else:
raise HTTPException( raise HTTPException(
status_code=400, status_code=400,
@ -1004,7 +1131,7 @@ async def generate_openai_chat_completion(
r = None r = None
def get_request(): def get_request():
nonlocal form_data nonlocal payload
nonlocal r nonlocal r
request_id = str(uuid.uuid4()) request_id = str(uuid.uuid4())
@ -1013,7 +1140,7 @@ async def generate_openai_chat_completion(
def stream_content(): def stream_content():
try: try:
if form_data.stream: if payload.get("stream"):
yield json.dumps( yield json.dumps(
{"request_id": request_id, "done": False} {"request_id": request_id, "done": False}
) + "\n" ) + "\n"
@ -1033,7 +1160,7 @@ async def generate_openai_chat_completion(
r = requests.request( r = requests.request(
method="POST", method="POST",
url=f"{url}/v1/chat/completions", url=f"{url}/v1/chat/completions",
data=form_data.model_dump_json(exclude_none=True).encode(), data=json.dumps(payload),
stream=True, stream=True,
) )

View File

@ -10,8 +10,8 @@ import logging
from pydantic import BaseModel from pydantic import BaseModel
from apps.webui.models.models import Models
from apps.web.models.users import Users from apps.webui.models.users import Users
from constants import ERROR_MESSAGES from constants import ERROR_MESSAGES
from utils.utils import ( from utils.utils import (
decode_token, decode_token,
@ -53,7 +53,6 @@ app.state.config = AppConfig()
app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
app.state.config.ENABLE_OPENAI_API = ENABLE_OPENAI_API app.state.config.ENABLE_OPENAI_API = ENABLE_OPENAI_API
app.state.config.OPENAI_API_BASE_URLS = OPENAI_API_BASE_URLS app.state.config.OPENAI_API_BASE_URLS = OPENAI_API_BASE_URLS
app.state.config.OPENAI_API_KEYS = OPENAI_API_KEYS app.state.config.OPENAI_API_KEYS = OPENAI_API_KEYS
@ -206,7 +205,13 @@ def merge_models_lists(model_lists):
if models is not None and "error" not in models: if models is not None and "error" not in models:
merged_list.extend( merged_list.extend(
[ [
{**model, "urlIdx": idx} {
**model,
"name": model.get("name", model["id"]),
"owned_by": "openai",
"openai": model,
"urlIdx": idx,
}
for model in models for model in models
if "api.openai.com" if "api.openai.com"
not in app.state.config.OPENAI_API_BASE_URLS[idx] not in app.state.config.OPENAI_API_BASE_URLS[idx]
@ -252,7 +257,7 @@ async def get_all_models():
log.info(f"models: {models}") log.info(f"models: {models}")
app.state.MODELS = {model["id"]: model for model in models["data"]} app.state.MODELS = {model["id"]: model for model in models["data"]}
return models return models
@app.get("/models") @app.get("/models")
@ -310,39 +315,93 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)):
body = await request.body() body = await request.body()
# TODO: Remove below after gpt-4-vision fix from Open AI # TODO: Remove below after gpt-4-vision fix from Open AI
# Try to decode the body of the request from bytes to a UTF-8 string (Require add max_token to fix gpt-4-vision) # Try to decode the body of the request from bytes to a UTF-8 string (Require add max_token to fix gpt-4-vision)
payload = None
try: try:
body = body.decode("utf-8") if "chat/completions" in path:
body = json.loads(body) body = body.decode("utf-8")
body = json.loads(body)
model = app.state.MODELS[body.get("model")] payload = {**body}
idx = model["urlIdx"] model_id = body.get("model")
model_info = Models.get_model_by_id(model_id)
if "pipeline" in model and model.get("pipeline"): if model_info:
body["user"] = {"name": user.name, "id": user.id} print(model_info)
body["title"] = ( if model_info.base_model_id:
True if body["stream"] == False and body["max_tokens"] == 50 else False payload["model"] = model_info.base_model_id
)
# Check if the model is "gpt-4-vision-preview" and set "max_tokens" to 4000 model_info.params = model_info.params.model_dump()
# This is a workaround until OpenAI fixes the issue with this model
if body.get("model") == "gpt-4-vision-preview":
if "max_tokens" not in body:
body["max_tokens"] = 4000
log.debug("Modified body_dict:", body)
# Fix for ChatGPT calls failing because the num_ctx key is in body if model_info.params:
if "num_ctx" in body: payload["temperature"] = model_info.params.get("temperature", None)
# If 'num_ctx' is in the dictionary, delete it payload["top_p"] = model_info.params.get("top_p", None)
# Leaving it there generates an error with the payload["max_tokens"] = model_info.params.get("max_tokens", None)
# OpenAI API (Feb 2024) payload["frequency_penalty"] = model_info.params.get(
del body["num_ctx"] "frequency_penalty", None
)
payload["seed"] = model_info.params.get("seed", None)
payload["stop"] = (
[
bytes(stop, "utf-8").decode("unicode_escape")
for stop in model_info.params["stop"]
]
if model_info.params.get("stop", None)
else None
)
if model_info.params.get("system", None):
# Check if the payload already has a system message
# If not, add a system message to the payload
if payload.get("messages"):
for message in payload["messages"]:
if message.get("role") == "system":
message["content"] = (
model_info.params.get("system", None)
+ message["content"]
)
break
else:
payload["messages"].insert(
0,
{
"role": "system",
"content": model_info.params.get("system", None),
},
)
else:
pass
print(app.state.MODELS)
model = app.state.MODELS[payload.get("model")]
idx = model["urlIdx"]
if "pipeline" in model and model.get("pipeline"):
payload["user"] = {"name": user.name, "id": user.id}
payload["title"] = (
True
if payload["stream"] == False and payload["max_tokens"] == 50
else False
)
# Check if the model is "gpt-4-vision-preview" and set "max_tokens" to 4000
# This is a workaround until OpenAI fixes the issue with this model
if payload.get("model") == "gpt-4-vision-preview":
if "max_tokens" not in payload:
payload["max_tokens"] = 4000
log.debug("Modified payload:", payload)
# Convert the modified body back to JSON
payload = json.dumps(payload)
# Convert the modified body back to JSON
body = json.dumps(body)
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
log.error("Error loading request body into a dictionary:", e) log.error("Error loading request body into a dictionary:", e)
print(payload)
url = app.state.config.OPENAI_API_BASE_URLS[idx] url = app.state.config.OPENAI_API_BASE_URLS[idx]
key = app.state.config.OPENAI_API_KEYS[idx] key = app.state.config.OPENAI_API_KEYS[idx]
@ -361,7 +420,7 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)):
r = requests.request( r = requests.request(
method=request.method, method=request.method,
url=target_url, url=target_url,
data=body, data=payload if payload else body,
headers=headers, headers=headers,
stream=True, stream=True,
) )

View File

@ -46,7 +46,7 @@ import json
import sentence_transformers import sentence_transformers
from apps.web.models.documents import ( from apps.webui.models.documents import (
Documents, Documents,
DocumentForm, DocumentForm,
DocumentResponse, DocumentResponse,

View File

@ -1,136 +0,0 @@
from pydantic import BaseModel
from peewee import *
from playhouse.shortcuts import model_to_dict
from typing import List, Union, Optional
import time
from utils.utils import decode_token
from utils.misc import get_gravatar_url
from apps.web.internal.db import DB
import json
####################
# Modelfile DB Schema
####################
class Modelfile(Model):
tag_name = CharField(unique=True)
user_id = CharField()
modelfile = TextField()
timestamp = BigIntegerField()
class Meta:
database = DB
class ModelfileModel(BaseModel):
tag_name: str
user_id: str
modelfile: str
timestamp: int # timestamp in epoch
####################
# Forms
####################
class ModelfileForm(BaseModel):
modelfile: dict
class ModelfileTagNameForm(BaseModel):
tag_name: str
class ModelfileUpdateForm(ModelfileForm, ModelfileTagNameForm):
pass
class ModelfileResponse(BaseModel):
tag_name: str
user_id: str
modelfile: dict
timestamp: int # timestamp in epoch
class ModelfilesTable:
def __init__(self, db):
self.db = db
self.db.create_tables([Modelfile])
def insert_new_modelfile(
self, user_id: str, form_data: ModelfileForm
) -> Optional[ModelfileModel]:
if "tagName" in form_data.modelfile:
modelfile = ModelfileModel(
**{
"user_id": user_id,
"tag_name": form_data.modelfile["tagName"],
"modelfile": json.dumps(form_data.modelfile),
"timestamp": int(time.time()),
}
)
try:
result = Modelfile.create(**modelfile.model_dump())
if result:
return modelfile
else:
return None
except:
return None
else:
return None
def get_modelfile_by_tag_name(self, tag_name: str) -> Optional[ModelfileModel]:
try:
modelfile = Modelfile.get(Modelfile.tag_name == tag_name)
return ModelfileModel(**model_to_dict(modelfile))
except:
return None
def get_modelfiles(self, skip: int = 0, limit: int = 50) -> List[ModelfileResponse]:
return [
ModelfileResponse(
**{
**model_to_dict(modelfile),
"modelfile": json.loads(modelfile.modelfile),
}
)
for modelfile in Modelfile.select()
# .limit(limit).offset(skip)
]
def update_modelfile_by_tag_name(
self, tag_name: str, modelfile: dict
) -> Optional[ModelfileModel]:
try:
query = Modelfile.update(
modelfile=json.dumps(modelfile),
timestamp=int(time.time()),
).where(Modelfile.tag_name == tag_name)
query.execute()
modelfile = Modelfile.get(Modelfile.tag_name == tag_name)
return ModelfileModel(**model_to_dict(modelfile))
except:
return None
def delete_modelfile_by_tag_name(self, tag_name: str) -> bool:
try:
query = Modelfile.delete().where((Modelfile.tag_name == tag_name))
query.execute() # Remove the rows, return number of rows removed.
return True
except:
return False
Modelfiles = ModelfilesTable(DB)

View File

@ -1,124 +0,0 @@
from fastapi import Depends, FastAPI, HTTPException, status
from datetime import datetime, timedelta
from typing import List, Union, Optional
from fastapi import APIRouter
from pydantic import BaseModel
import json
from apps.web.models.modelfiles import (
Modelfiles,
ModelfileForm,
ModelfileTagNameForm,
ModelfileUpdateForm,
ModelfileResponse,
)
from utils.utils import get_current_user, get_admin_user
from constants import ERROR_MESSAGES
router = APIRouter()
############################
# GetModelfiles
############################
@router.get("/", response_model=List[ModelfileResponse])
async def get_modelfiles(
skip: int = 0, limit: int = 50, user=Depends(get_current_user)
):
return Modelfiles.get_modelfiles(skip, limit)
############################
# CreateNewModelfile
############################
@router.post("/create", response_model=Optional[ModelfileResponse])
async def create_new_modelfile(form_data: ModelfileForm, user=Depends(get_admin_user)):
modelfile = Modelfiles.insert_new_modelfile(user.id, form_data)
if modelfile:
return ModelfileResponse(
**{
**modelfile.model_dump(),
"modelfile": json.loads(modelfile.modelfile),
}
)
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.DEFAULT(),
)
############################
# GetModelfileByTagName
############################
@router.post("/", response_model=Optional[ModelfileResponse])
async def get_modelfile_by_tag_name(
form_data: ModelfileTagNameForm, user=Depends(get_current_user)
):
modelfile = Modelfiles.get_modelfile_by_tag_name(form_data.tag_name)
if modelfile:
return ModelfileResponse(
**{
**modelfile.model_dump(),
"modelfile": json.loads(modelfile.modelfile),
}
)
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.NOT_FOUND,
)
############################
# UpdateModelfileByTagName
############################
@router.post("/update", response_model=Optional[ModelfileResponse])
async def update_modelfile_by_tag_name(
form_data: ModelfileUpdateForm, user=Depends(get_admin_user)
):
modelfile = Modelfiles.get_modelfile_by_tag_name(form_data.tag_name)
if modelfile:
updated_modelfile = {
**json.loads(modelfile.modelfile),
**form_data.modelfile,
}
modelfile = Modelfiles.update_modelfile_by_tag_name(
form_data.tag_name, updated_modelfile
)
return ModelfileResponse(
**{
**modelfile.model_dump(),
"modelfile": json.loads(modelfile.modelfile),
}
)
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
)
############################
# DeleteModelfileByTagName
############################
@router.delete("/delete", response_model=bool)
async def delete_modelfile_by_tag_name(
form_data: ModelfileTagNameForm, user=Depends(get_admin_user)
):
result = Modelfiles.delete_modelfile_by_tag_name(form_data.tag_name)
return result

View File

@ -1,3 +1,5 @@
import json
from peewee import * from peewee import *
from peewee_migrate import Router from peewee_migrate import Router
from playhouse.db_url import connect from playhouse.db_url import connect
@ -8,6 +10,16 @@ import logging
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["DB"]) log.setLevel(SRC_LOG_LEVELS["DB"])
class JSONField(TextField):
def db_value(self, value):
return json.dumps(value)
def python_value(self, value):
if value is not None:
return json.loads(value)
# Check if the file exists # Check if the file exists
if os.path.exists(f"{DATA_DIR}/ollama.db"): if os.path.exists(f"{DATA_DIR}/ollama.db"):
# Rename the file # Rename the file
@ -19,7 +31,9 @@ else:
DB = connect(DATABASE_URL) DB = connect(DATABASE_URL)
log.info(f"Connected to a {DB.__class__.__name__} database.") log.info(f"Connected to a {DB.__class__.__name__} database.")
router = Router( router = Router(
DB, migrate_dir=BACKEND_DIR / "apps" / "web" / "internal" / "migrations", logger=log DB,
migrate_dir=BACKEND_DIR / "apps" / "webui" / "internal" / "migrations",
logger=log,
) )
router.run() router.run()
DB.connect(reuse_if_open=True) DB.connect(reuse_if_open=True)

View File

@ -0,0 +1,61 @@
"""Peewee migrations -- 009_add_models.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from contextlib import suppress
import peewee as pw
from peewee_migrate import Migrator
with suppress(ImportError):
import playhouse.postgres_ext as pw_pext
def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
"""Write your migrations here."""
@migrator.create_model
class Model(pw.Model):
id = pw.TextField(unique=True)
user_id = pw.TextField()
base_model_id = pw.TextField(null=True)
name = pw.TextField()
meta = pw.TextField()
params = pw.TextField()
created_at = pw.BigIntegerField(null=False)
updated_at = pw.BigIntegerField(null=False)
class Meta:
table_name = "model"
def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
"""Write your rollback migrations here."""
migrator.remove_model("model")

View File

@ -0,0 +1,130 @@
"""Peewee migrations -- 009_add_models.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from contextlib import suppress
import peewee as pw
from peewee_migrate import Migrator
import json
from utils.misc import parse_ollama_modelfile
with suppress(ImportError):
import playhouse.postgres_ext as pw_pext
def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
"""Write your migrations here."""
# Fetch data from 'modelfile' table and insert into 'model' table
migrate_modelfile_to_model(migrator, database)
# Drop the 'modelfile' table
migrator.remove_model("modelfile")
def migrate_modelfile_to_model(migrator: Migrator, database: pw.Database):
ModelFile = migrator.orm["modelfile"]
Model = migrator.orm["model"]
modelfiles = ModelFile.select()
for modelfile in modelfiles:
# Extract and transform data in Python
modelfile.modelfile = json.loads(modelfile.modelfile)
meta = json.dumps(
{
"description": modelfile.modelfile.get("desc"),
"profile_image_url": modelfile.modelfile.get("imageUrl"),
"ollama": {"modelfile": modelfile.modelfile.get("content")},
"suggestion_prompts": modelfile.modelfile.get("suggestionPrompts"),
"categories": modelfile.modelfile.get("categories"),
"user": {**modelfile.modelfile.get("user", {}), "community": True},
}
)
info = parse_ollama_modelfile(modelfile.modelfile.get("content"))
# Insert the processed data into the 'model' table
Model.create(
id=f"ollama-{modelfile.tag_name}",
user_id=modelfile.user_id,
base_model_id=info.get("base_model_id"),
name=modelfile.modelfile.get("title"),
meta=meta,
params=json.dumps(info.get("params", {})),
created_at=modelfile.timestamp,
updated_at=modelfile.timestamp,
)
def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
"""Write your rollback migrations here."""
recreate_modelfile_table(migrator, database)
move_data_back_to_modelfile(migrator, database)
migrator.remove_model("model")
def recreate_modelfile_table(migrator: Migrator, database: pw.Database):
query = """
CREATE TABLE IF NOT EXISTS modelfile (
user_id TEXT,
tag_name TEXT,
modelfile JSON,
timestamp BIGINT
)
"""
migrator.sql(query)
def move_data_back_to_modelfile(migrator: Migrator, database: pw.Database):
Model = migrator.orm["model"]
Modelfile = migrator.orm["modelfile"]
models = Model.select()
for model in models:
# Extract and transform data in Python
meta = json.loads(model.meta)
modelfile_data = {
"title": model.name,
"desc": meta.get("description"),
"imageUrl": meta.get("profile_image_url"),
"content": meta.get("ollama", {}).get("modelfile"),
"suggestionPrompts": meta.get("suggestion_prompts"),
"categories": meta.get("categories"),
"user": {k: v for k, v in meta.get("user", {}).items() if k != "community"},
}
# Insert the processed data back into the 'modelfile' table
Modelfile.create(
user_id=model.user_id,
tag_name=model.id,
modelfile=modelfile_data,
timestamp=model.created_at,
)

View File

@ -14,7 +14,7 @@ You will need to create a migration file to ensure that existing databases are u
2. Make your changes to the models. 2. Make your changes to the models.
3. From the `backend` directory, run the following command: 3. From the `backend` directory, run the following command:
```bash ```bash
pw_migrate create --auto --auto-source apps.web.models --database sqlite:///${SQLITE_DB} --directory apps/web/internal/migrations ${MIGRATION_NAME} pw_migrate create --auto --auto-source apps.webui.models --database sqlite:///${SQLITE_DB} --directory apps/web/internal/migrations ${MIGRATION_NAME}
``` ```
- `$SQLITE_DB` should be the path to the database file. - `$SQLITE_DB` should be the path to the database file.
- `$MIGRATION_NAME` should be a descriptive name for the migration. - `$MIGRATION_NAME` should be a descriptive name for the migration.

View File

@ -1,12 +1,12 @@
from fastapi import FastAPI, Depends from fastapi import FastAPI, Depends
from fastapi.routing import APIRoute from fastapi.routing import APIRoute
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from apps.web.routers import ( from apps.webui.routers import (
auths, auths,
users, users,
chats, chats,
documents, documents,
modelfiles, models,
prompts, prompts,
configs, configs,
memories, memories,
@ -40,6 +40,9 @@ app.state.config.DEFAULT_PROMPT_SUGGESTIONS = DEFAULT_PROMPT_SUGGESTIONS
app.state.config.DEFAULT_USER_ROLE = DEFAULT_USER_ROLE app.state.config.DEFAULT_USER_ROLE = DEFAULT_USER_ROLE
app.state.config.USER_PERMISSIONS = USER_PERMISSIONS app.state.config.USER_PERMISSIONS = USER_PERMISSIONS
app.state.config.WEBHOOK_URL = WEBHOOK_URL app.state.config.WEBHOOK_URL = WEBHOOK_URL
app.state.MODELS = {}
app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER
@ -56,11 +59,10 @@ app.include_router(users.router, prefix="/users", tags=["users"])
app.include_router(chats.router, prefix="/chats", tags=["chats"]) app.include_router(chats.router, prefix="/chats", tags=["chats"])
app.include_router(documents.router, prefix="/documents", tags=["documents"]) app.include_router(documents.router, prefix="/documents", tags=["documents"])
app.include_router(modelfiles.router, prefix="/modelfiles", tags=["modelfiles"]) app.include_router(models.router, prefix="/models", tags=["models"])
app.include_router(prompts.router, prefix="/prompts", tags=["prompts"]) app.include_router(prompts.router, prefix="/prompts", tags=["prompts"])
app.include_router(memories.router, prefix="/memories", tags=["memories"]) app.include_router(memories.router, prefix="/memories", tags=["memories"])
app.include_router(configs.router, prefix="/configs", tags=["configs"]) app.include_router(configs.router, prefix="/configs", tags=["configs"])
app.include_router(utils.router, prefix="/utils", tags=["utils"]) app.include_router(utils.router, prefix="/utils", tags=["utils"])

View File

@ -5,10 +5,10 @@ import uuid
import logging import logging
from peewee import * from peewee import *
from apps.web.models.users import UserModel, Users from apps.webui.models.users import UserModel, Users
from utils.utils import verify_password from utils.utils import verify_password
from apps.web.internal.db import DB from apps.webui.internal.db import DB
from config import SRC_LOG_LEVELS from config import SRC_LOG_LEVELS

View File

@ -7,7 +7,7 @@ import json
import uuid import uuid
import time import time
from apps.web.internal.db import DB from apps.webui.internal.db import DB
#################### ####################
# Chat DB Schema # Chat DB Schema
@ -191,6 +191,20 @@ class ChatTable:
except: except:
return None return None
def archive_all_chats_by_user_id(self, user_id: str) -> bool:
try:
chats = self.get_chats_by_user_id(user_id)
for chat in chats:
query = Chat.update(
archived=True,
).where(Chat.id == chat.id)
query.execute()
return True
except:
return False
def get_archived_chat_list_by_user_id( def get_archived_chat_list_by_user_id(
self, user_id: str, skip: int = 0, limit: int = 50 self, user_id: str, skip: int = 0, limit: int = 50
) -> List[ChatModel]: ) -> List[ChatModel]:
@ -205,17 +219,31 @@ class ChatTable:
] ]
def get_chat_list_by_user_id( def get_chat_list_by_user_id(
self, user_id: str, skip: int = 0, limit: int = 50 self,
user_id: str,
include_archived: bool = False,
skip: int = 0,
limit: int = 50,
) -> List[ChatModel]: ) -> List[ChatModel]:
return [ if include_archived:
ChatModel(**model_to_dict(chat)) return [
for chat in Chat.select() ChatModel(**model_to_dict(chat))
.where(Chat.archived == False) for chat in Chat.select()
.where(Chat.user_id == user_id) .where(Chat.user_id == user_id)
.order_by(Chat.updated_at.desc()) .order_by(Chat.updated_at.desc())
# .limit(limit) # .limit(limit)
# .offset(skip) # .offset(skip)
] ]
else:
return [
ChatModel(**model_to_dict(chat))
for chat in Chat.select()
.where(Chat.archived == False)
.where(Chat.user_id == user_id)
.order_by(Chat.updated_at.desc())
# .limit(limit)
# .offset(skip)
]
def get_chat_list_by_chat_ids( def get_chat_list_by_chat_ids(
self, chat_ids: List[str], skip: int = 0, limit: int = 50 self, chat_ids: List[str], skip: int = 0, limit: int = 50

View File

@ -8,7 +8,7 @@ import logging
from utils.utils import decode_token from utils.utils import decode_token
from utils.misc import get_gravatar_url from utils.misc import get_gravatar_url
from apps.web.internal.db import DB from apps.webui.internal.db import DB
import json import json

View File

@ -3,8 +3,8 @@ from peewee import *
from playhouse.shortcuts import model_to_dict from playhouse.shortcuts import model_to_dict
from typing import List, Union, Optional from typing import List, Union, Optional
from apps.web.internal.db import DB from apps.webui.internal.db import DB
from apps.web.models.chats import Chats from apps.webui.models.chats import Chats
import time import time
import uuid import uuid

View File

@ -0,0 +1,179 @@
import json
import logging
from typing import Optional
import peewee as pw
from peewee import *
from playhouse.shortcuts import model_to_dict
from pydantic import BaseModel, ConfigDict
from apps.webui.internal.db import DB, JSONField
from typing import List, Union, Optional
from config import SRC_LOG_LEVELS
import time
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["MODELS"])
####################
# Models DB Schema
####################
# ModelParams is a model for the data stored in the params field of the Model table
class ModelParams(BaseModel):
model_config = ConfigDict(extra="allow")
pass
# ModelMeta is a model for the data stored in the meta field of the Model table
class ModelMeta(BaseModel):
profile_image_url: Optional[str] = "/favicon.png"
description: Optional[str] = None
"""
User-facing description of the model.
"""
capabilities: Optional[dict] = None
model_config = ConfigDict(extra="allow")
pass
class Model(pw.Model):
id = pw.TextField(unique=True)
"""
The model's id as used in the API. If set to an existing model, it will override the model.
"""
user_id = pw.TextField()
base_model_id = pw.TextField(null=True)
"""
An optional pointer to the actual model that should be used when proxying requests.
"""
name = pw.TextField()
"""
The human-readable display name of the model.
"""
params = JSONField()
"""
Holds a JSON encoded blob of parameters, see `ModelParams`.
"""
meta = JSONField()
"""
Holds a JSON encoded blob of metadata, see `ModelMeta`.
"""
updated_at = BigIntegerField()
created_at = BigIntegerField()
class Meta:
database = DB
class ModelModel(BaseModel):
id: str
user_id: str
base_model_id: Optional[str] = None
name: str
params: ModelParams
meta: ModelMeta
updated_at: int # timestamp in epoch
created_at: int # timestamp in epoch
####################
# Forms
####################
class ModelResponse(BaseModel):
id: str
name: str
meta: ModelMeta
updated_at: int # timestamp in epoch
created_at: int # timestamp in epoch
class ModelForm(BaseModel):
id: str
base_model_id: Optional[str] = None
name: str
meta: ModelMeta
params: ModelParams
class ModelsTable:
def __init__(
self,
db: pw.SqliteDatabase | pw.PostgresqlDatabase,
):
self.db = db
self.db.create_tables([Model])
def insert_new_model(
self, form_data: ModelForm, user_id: str
) -> Optional[ModelModel]:
model = ModelModel(
**{
**form_data.model_dump(),
"user_id": user_id,
"created_at": int(time.time()),
"updated_at": int(time.time()),
}
)
try:
result = Model.create(**model.model_dump())
if result:
return model
else:
return None
except Exception as e:
print(e)
return None
def get_all_models(self) -> List[ModelModel]:
return [ModelModel(**model_to_dict(model)) for model in Model.select()]
def get_model_by_id(self, id: str) -> Optional[ModelModel]:
try:
model = Model.get(Model.id == id)
return ModelModel(**model_to_dict(model))
except:
return None
def update_model_by_id(self, id: str, model: ModelForm) -> Optional[ModelModel]:
try:
# update only the fields that are present in the model
query = Model.update(**model.model_dump()).where(Model.id == id)
query.execute()
model = Model.get(Model.id == id)
return ModelModel(**model_to_dict(model))
except Exception as e:
print(e)
return None
def delete_model_by_id(self, id: str) -> bool:
try:
query = Model.delete().where(Model.id == id)
query.execute()
return True
except:
return False
Models = ModelsTable(DB)

View File

@ -7,7 +7,7 @@ import time
from utils.utils import decode_token from utils.utils import decode_token
from utils.misc import get_gravatar_url from utils.misc import get_gravatar_url
from apps.web.internal.db import DB from apps.webui.internal.db import DB
import json import json

View File

@ -8,7 +8,7 @@ import uuid
import time import time
import logging import logging
from apps.web.internal.db import DB from apps.webui.internal.db import DB
from config import SRC_LOG_LEVELS from config import SRC_LOG_LEVELS

View File

@ -5,8 +5,8 @@ from typing import List, Union, Optional
import time import time
from utils.misc import get_gravatar_url from utils.misc import get_gravatar_url
from apps.web.internal.db import DB from apps.webui.internal.db import DB
from apps.web.models.chats import Chats from apps.webui.models.chats import Chats
#################### ####################
# User DB Schema # User DB Schema

View File

@ -10,7 +10,7 @@ import uuid
import csv import csv
from apps.web.models.auths import ( from apps.webui.models.auths import (
SigninForm, SigninForm,
SignupForm, SignupForm,
AddUserForm, AddUserForm,
@ -21,7 +21,7 @@ from apps.web.models.auths import (
Auths, Auths,
ApiKey, ApiKey,
) )
from apps.web.models.users import Users from apps.webui.models.users import Users
from utils.utils import ( from utils.utils import (
get_password_hash, get_password_hash,

View File

@ -7,8 +7,8 @@ from pydantic import BaseModel
import json import json
import logging import logging
from apps.web.models.users import Users from apps.webui.models.users import Users
from apps.web.models.chats import ( from apps.webui.models.chats import (
ChatModel, ChatModel,
ChatResponse, ChatResponse,
ChatTitleForm, ChatTitleForm,
@ -18,7 +18,7 @@ from apps.web.models.chats import (
) )
from apps.web.models.tags import ( from apps.webui.models.tags import (
TagModel, TagModel,
ChatIdTagModel, ChatIdTagModel,
ChatIdTagForm, ChatIdTagForm,
@ -78,43 +78,25 @@ async def delete_all_user_chats(request: Request, user=Depends(get_current_user)
async def get_user_chat_list_by_user_id( async def get_user_chat_list_by_user_id(
user_id: str, user=Depends(get_admin_user), skip: int = 0, limit: int = 50 user_id: str, user=Depends(get_admin_user), skip: int = 0, limit: int = 50
): ):
return Chats.get_chat_list_by_user_id(user_id, skip, limit) return Chats.get_chat_list_by_user_id(
user_id, include_archived=True, skip=skip, limit=limit
)
############################ ############################
# GetArchivedChats # CreateNewChat
############################ ############################
@router.get("/archived", response_model=List[ChatTitleIdResponse]) @router.post("/new", response_model=Optional[ChatResponse])
async def get_archived_session_user_chat_list( async def create_new_chat(form_data: ChatForm, user=Depends(get_current_user)):
user=Depends(get_current_user), skip: int = 0, limit: int = 50 try:
): chat = Chats.insert_new_chat(user.id, form_data)
return Chats.get_archived_chat_list_by_user_id(user.id, skip, limit)
############################
# GetSharedChatById
############################
@router.get("/share/{share_id}", response_model=Optional[ChatResponse])
async def get_shared_chat_by_id(share_id: str, user=Depends(get_current_user)):
if user.role == "pending":
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
)
if user.role == "user":
chat = Chats.get_chat_by_share_id(share_id)
elif user.role == "admin":
chat = Chats.get_chat_by_id(share_id)
if chat:
return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)}) return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
else: except Exception as e:
log.exception(e)
raise HTTPException( raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT()
) )
@ -150,19 +132,49 @@ async def get_all_user_chats_in_db(user=Depends(get_admin_user)):
############################ ############################
# CreateNewChat # GetArchivedChats
############################ ############################
@router.post("/new", response_model=Optional[ChatResponse]) @router.get("/archived", response_model=List[ChatTitleIdResponse])
async def create_new_chat(form_data: ChatForm, user=Depends(get_current_user)): async def get_archived_session_user_chat_list(
try: user=Depends(get_current_user), skip: int = 0, limit: int = 50
chat = Chats.insert_new_chat(user.id, form_data) ):
return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)}) return Chats.get_archived_chat_list_by_user_id(user.id, skip, limit)
except Exception as e:
log.exception(e)
############################
# ArchiveAllChats
############################
@router.post("/archive/all", response_model=List[ChatTitleIdResponse])
async def archive_all_chats(user=Depends(get_current_user)):
return Chats.archive_all_chats_by_user_id(user.id)
############################
# GetSharedChatById
############################
@router.get("/share/{share_id}", response_model=Optional[ChatResponse])
async def get_shared_chat_by_id(share_id: str, user=Depends(get_current_user)):
if user.role == "pending":
raise HTTPException( raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT() status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
)
if user.role == "user":
chat = Chats.get_chat_by_share_id(share_id)
elif user.role == "admin":
chat = Chats.get_chat_by_id(share_id)
if chat:
return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
) )

View File

@ -8,7 +8,7 @@ from pydantic import BaseModel
import time import time
import uuid import uuid
from apps.web.models.users import Users from apps.webui.models.users import Users
from utils.utils import ( from utils.utils import (
get_password_hash, get_password_hash,

View File

@ -6,7 +6,7 @@ from fastapi import APIRouter
from pydantic import BaseModel from pydantic import BaseModel
import json import json
from apps.web.models.documents import ( from apps.webui.models.documents import (
Documents, Documents,
DocumentForm, DocumentForm,
DocumentUpdateForm, DocumentUpdateForm,

View File

@ -7,7 +7,7 @@ from fastapi import APIRouter
from pydantic import BaseModel from pydantic import BaseModel
import logging import logging
from apps.web.models.memories import Memories, MemoryModel from apps.webui.models.memories import Memories, MemoryModel
from utils.utils import get_verified_user from utils.utils import get_verified_user
from constants import ERROR_MESSAGES from constants import ERROR_MESSAGES

View File

@ -0,0 +1,108 @@
from fastapi import Depends, FastAPI, HTTPException, status, Request
from datetime import datetime, timedelta
from typing import List, Union, Optional
from fastapi import APIRouter
from pydantic import BaseModel
import json
from apps.webui.models.models import Models, ModelModel, ModelForm, ModelResponse
from utils.utils import get_verified_user, get_admin_user
from constants import ERROR_MESSAGES
router = APIRouter()
###########################
# getModels
###########################
@router.get("/", response_model=List[ModelResponse])
async def get_models(user=Depends(get_verified_user)):
return Models.get_all_models()
############################
# AddNewModel
############################
@router.post("/add", response_model=Optional[ModelModel])
async def add_new_model(
request: Request, form_data: ModelForm, user=Depends(get_admin_user)
):
if form_data.id in request.app.state.MODELS:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.MODEL_ID_TAKEN,
)
else:
model = Models.insert_new_model(form_data, user.id)
if model:
return model
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.DEFAULT(),
)
############################
# GetModelById
############################
@router.get("/", response_model=Optional[ModelModel])
async def get_model_by_id(id: str, user=Depends(get_verified_user)):
model = Models.get_model_by_id(id)
if model:
return model
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.NOT_FOUND,
)
############################
# UpdateModelById
############################
@router.post("/update", response_model=Optional[ModelModel])
async def update_model_by_id(
request: Request, id: str, form_data: ModelForm, user=Depends(get_admin_user)
):
model = Models.get_model_by_id(id)
if model:
model = Models.update_model_by_id(id, form_data)
return model
else:
if form_data.id in request.app.state.MODELS:
model = Models.insert_new_model(form_data, user.id)
print(model)
if model:
return model
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.DEFAULT(),
)
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.DEFAULT(),
)
############################
# DeleteModelById
############################
@router.delete("/delete", response_model=bool)
async def delete_model_by_id(id: str, user=Depends(get_admin_user)):
result = Models.delete_model_by_id(id)
return result

View File

@ -6,7 +6,7 @@ from fastapi import APIRouter
from pydantic import BaseModel from pydantic import BaseModel
import json import json
from apps.web.models.prompts import Prompts, PromptForm, PromptModel from apps.webui.models.prompts import Prompts, PromptForm, PromptModel
from utils.utils import get_current_user, get_admin_user from utils.utils import get_current_user, get_admin_user
from constants import ERROR_MESSAGES from constants import ERROR_MESSAGES

View File

@ -9,9 +9,9 @@ import time
import uuid import uuid
import logging import logging
from apps.web.models.users import UserModel, UserUpdateForm, UserRoleUpdateForm, Users from apps.webui.models.users import UserModel, UserUpdateForm, UserRoleUpdateForm, Users
from apps.web.models.auths import Auths from apps.webui.models.auths import Auths
from apps.web.models.chats import Chats from apps.webui.models.chats import Chats
from utils.utils import get_verified_user, get_password_hash, get_admin_user from utils.utils import get_verified_user, get_password_hash, get_admin_user
from constants import ERROR_MESSAGES from constants import ERROR_MESSAGES

View File

@ -8,7 +8,7 @@ from pydantic import BaseModel
from fpdf import FPDF from fpdf import FPDF
import markdown import markdown
from apps.web.internal.db import DB from apps.webui.internal.db import DB
from utils.utils import get_admin_user from utils.utils import get_admin_user
from utils.misc import calculate_sha256, get_gravatar_url from utils.misc import calculate_sha256, get_gravatar_url

View File

@ -27,6 +27,8 @@ from constants import ERROR_MESSAGES
BACKEND_DIR = Path(__file__).parent # the path containing this file BACKEND_DIR = Path(__file__).parent # the path containing this file
BASE_DIR = BACKEND_DIR.parent # the path containing the backend/ BASE_DIR = BACKEND_DIR.parent # the path containing the backend/
print(BASE_DIR)
try: try:
from dotenv import load_dotenv, find_dotenv from dotenv import load_dotenv, find_dotenv
@ -56,7 +58,6 @@ log_sources = [
"CONFIG", "CONFIG",
"DB", "DB",
"IMAGES", "IMAGES",
"LITELLM",
"MAIN", "MAIN",
"MODELS", "MODELS",
"OLLAMA", "OLLAMA",
@ -122,7 +123,10 @@ def parse_section(section):
try: try:
changelog_content = (BASE_DIR / "CHANGELOG.md").read_text() changelog_path = BASE_DIR / "CHANGELOG.md"
with open(str(changelog_path.absolute()), "r", encoding="utf8") as file:
changelog_content = file.read()
except: except:
changelog_content = (pkgutil.get_data("open_webui", "CHANGELOG.md") or b"").decode() changelog_content = (pkgutil.get_data("open_webui", "CHANGELOG.md") or b"").decode()
@ -374,10 +378,10 @@ def create_config_file(file_path):
LITELLM_CONFIG_PATH = f"{DATA_DIR}/litellm/config.yaml" LITELLM_CONFIG_PATH = f"{DATA_DIR}/litellm/config.yaml"
if not os.path.exists(LITELLM_CONFIG_PATH): # if not os.path.exists(LITELLM_CONFIG_PATH):
log.info("Config file doesn't exist. Creating...") # log.info("Config file doesn't exist. Creating...")
create_config_file(LITELLM_CONFIG_PATH) # create_config_file(LITELLM_CONFIG_PATH)
log.info("Config file created successfully.") # log.info("Config file created successfully.")
#################################### ####################################
@ -826,18 +830,6 @@ AUDIO_OPENAI_API_VOICE = PersistentConfig(
os.getenv("AUDIO_OPENAI_API_VOICE", "alloy"), os.getenv("AUDIO_OPENAI_API_VOICE", "alloy"),
) )
####################################
# LiteLLM
####################################
ENABLE_LITELLM = os.environ.get("ENABLE_LITELLM", "True").lower() == "true"
LITELLM_PROXY_PORT = int(os.getenv("LITELLM_PROXY_PORT", "14365"))
if LITELLM_PROXY_PORT < 0 or LITELLM_PROXY_PORT > 65535:
raise ValueError("Invalid port number for LITELLM_PROXY_PORT")
LITELLM_PROXY_HOST = os.getenv("LITELLM_PROXY_HOST", "127.0.0.1")
#################################### ####################################
# Database # Database

View File

@ -32,6 +32,8 @@ class ERROR_MESSAGES(str, Enum):
COMMAND_TAKEN = "Uh-oh! This command is already registered. Please choose another command string." COMMAND_TAKEN = "Uh-oh! This command is already registered. Please choose another command string."
FILE_EXISTS = "Uh-oh! This file is already registered. Please choose another file." FILE_EXISTS = "Uh-oh! This file is already registered. Please choose another file."
MODEL_ID_TAKEN = "Uh-oh! This model id is already registered. Please choose another model id string."
NAME_TAG_TAKEN = "Uh-oh! This name tag is already registered. Please choose another name tag string." NAME_TAG_TAKEN = "Uh-oh! This name tag is already registered. Please choose another name tag string."
INVALID_TOKEN = ( INVALID_TOKEN = (
"Your session has expired or the token is invalid. Please sign in again." "Your session has expired or the token is invalid. Please sign in again."

View File

@ -19,27 +19,20 @@ from starlette.exceptions import HTTPException as StarletteHTTPException
from starlette.middleware.base import BaseHTTPMiddleware from starlette.middleware.base import BaseHTTPMiddleware
from starlette.responses import StreamingResponse, Response from starlette.responses import StreamingResponse, Response
from apps.ollama.main import app as ollama_app from apps.ollama.main import app as ollama_app, get_all_models as get_ollama_models
from apps.openai.main import app as openai_app from apps.openai.main import app as openai_app, get_all_models as get_openai_models
from apps.litellm.main import (
app as litellm_app,
start_litellm_background,
shutdown_litellm_background,
)
from apps.audio.main import app as audio_app from apps.audio.main import app as audio_app
from apps.images.main import app as images_app from apps.images.main import app as images_app
from apps.rag.main import app as rag_app from apps.rag.main import app as rag_app
from apps.web.main import app as webui_app from apps.webui.main import app as webui_app
import asyncio import asyncio
from pydantic import BaseModel from pydantic import BaseModel
from typing import List from typing import List, Optional
from apps.webui.models.models import Models, ModelModel
from utils.utils import get_admin_user from utils.utils import get_admin_user, get_verified_user
from apps.rag.utils import rag_messages from apps.rag.utils import rag_messages
from config import ( from config import (
@ -53,7 +46,8 @@ from config import (
FRONTEND_BUILD_DIR, FRONTEND_BUILD_DIR,
CACHE_DIR, CACHE_DIR,
STATIC_DIR, STATIC_DIR,
ENABLE_LITELLM, ENABLE_OPENAI_API,
ENABLE_OLLAMA_API,
ENABLE_MODEL_FILTER, ENABLE_MODEL_FILTER,
MODEL_FILTER_LIST, MODEL_FILTER_LIST,
GLOBAL_LOG_LEVEL, GLOBAL_LOG_LEVEL,
@ -100,11 +94,7 @@ https://github.com/open-webui/open-webui
@asynccontextmanager @asynccontextmanager
async def lifespan(app: FastAPI): async def lifespan(app: FastAPI):
if ENABLE_LITELLM:
asyncio.create_task(start_litellm_background())
yield yield
if ENABLE_LITELLM:
await shutdown_litellm_background()
app = FastAPI( app = FastAPI(
@ -112,11 +102,19 @@ app = FastAPI(
) )
app.state.config = AppConfig() app.state.config = AppConfig()
app.state.config.ENABLE_OPENAI_API = ENABLE_OPENAI_API
app.state.config.ENABLE_OLLAMA_API = ENABLE_OLLAMA_API
app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
app.state.config.WEBHOOK_URL = WEBHOOK_URL app.state.config.WEBHOOK_URL = WEBHOOK_URL
app.state.MODELS = {}
origins = ["*"] origins = ["*"]
@ -233,6 +231,11 @@ app.add_middleware(
@app.middleware("http") @app.middleware("http")
async def check_url(request: Request, call_next): async def check_url(request: Request, call_next):
if len(app.state.MODELS) == 0:
await get_all_models()
else:
pass
start_time = int(time.time()) start_time = int(time.time())
response = await call_next(request) response = await call_next(request)
process_time = int(time.time()) - start_time process_time = int(time.time()) - start_time
@ -249,9 +252,8 @@ async def update_embedding_function(request: Request, call_next):
return response return response
app.mount("/litellm/api", litellm_app)
app.mount("/ollama", ollama_app) app.mount("/ollama", ollama_app)
app.mount("/openai/api", openai_app) app.mount("/openai", openai_app)
app.mount("/images/api/v1", images_app) app.mount("/images/api/v1", images_app)
app.mount("/audio/api/v1", audio_app) app.mount("/audio/api/v1", audio_app)
@ -262,6 +264,87 @@ app.mount("/api/v1", webui_app)
webui_app.state.EMBEDDING_FUNCTION = rag_app.state.EMBEDDING_FUNCTION webui_app.state.EMBEDDING_FUNCTION = rag_app.state.EMBEDDING_FUNCTION
async def get_all_models():
openai_models = []
ollama_models = []
if app.state.config.ENABLE_OPENAI_API:
openai_models = await get_openai_models()
openai_models = openai_models["data"]
if app.state.config.ENABLE_OLLAMA_API:
ollama_models = await get_ollama_models()
ollama_models = [
{
"id": model["model"],
"name": model["name"],
"object": "model",
"created": int(time.time()),
"owned_by": "ollama",
"ollama": model,
}
for model in ollama_models["models"]
]
models = openai_models + ollama_models
custom_models = Models.get_all_models()
for custom_model in custom_models:
if custom_model.base_model_id == None:
for model in models:
if (
custom_model.id == model["id"]
or custom_model.id == model["id"].split(":")[0]
):
model["name"] = custom_model.name
model["info"] = custom_model.model_dump()
else:
owned_by = "openai"
for model in models:
if (
custom_model.base_model_id == model["id"]
or custom_model.base_model_id == model["id"].split(":")[0]
):
owned_by = model["owned_by"]
break
models.append(
{
"id": custom_model.id,
"name": custom_model.name,
"object": "model",
"created": custom_model.created_at,
"owned_by": owned_by,
"info": custom_model.model_dump(),
"preset": True,
}
)
app.state.MODELS = {model["id"]: model for model in models}
webui_app.state.MODELS = app.state.MODELS
return models
@app.get("/api/models")
async def get_models(user=Depends(get_verified_user)):
models = await get_all_models()
if app.state.config.ENABLE_MODEL_FILTER:
if user.role == "user":
models = list(
filter(
lambda model: model["id"] in app.state.config.MODEL_FILTER_LIST,
models,
)
)
return {"data": models}
return {"data": models}
@app.get("/api/config") @app.get("/api/config")
async def get_app_config(): async def get_app_config():
# Checking and Handling the Absence of 'ui' in CONFIG_DATA # Checking and Handling the Absence of 'ui' in CONFIG_DATA
@ -276,12 +359,13 @@ async def get_app_config():
"name": WEBUI_NAME, "name": WEBUI_NAME,
"version": VERSION, "version": VERSION,
"auth": WEBUI_AUTH, "auth": WEBUI_AUTH,
"auth_trusted_header": bool(webui_app.state.AUTH_TRUSTED_EMAIL_HEADER),
"enable_signup": webui_app.state.config.ENABLE_SIGNUP,
"enable_image_generation": images_app.state.config.ENABLED,
"enable_admin_export": ENABLE_ADMIN_EXPORT,
"default_locale": default_locale, "default_locale": default_locale,
"images": images_app.state.config.ENABLED,
"default_models": webui_app.state.config.DEFAULT_MODELS, "default_models": webui_app.state.config.DEFAULT_MODELS,
"default_prompt_suggestions": webui_app.state.config.DEFAULT_PROMPT_SUGGESTIONS, "default_prompt_suggestions": webui_app.state.config.DEFAULT_PROMPT_SUGGESTIONS,
"trusted_header_auth": bool(webui_app.state.AUTH_TRUSTED_EMAIL_HEADER),
"admin_export_enabled": ENABLE_ADMIN_EXPORT,
} }
@ -305,15 +389,6 @@ async def update_model_filter_config(
app.state.config.ENABLE_MODEL_FILTER = form_data.enabled app.state.config.ENABLE_MODEL_FILTER = form_data.enabled
app.state.config.MODEL_FILTER_LIST = form_data.models app.state.config.MODEL_FILTER_LIST = form_data.models
ollama_app.state.config.ENABLE_MODEL_FILTER = app.state.config.ENABLE_MODEL_FILTER
ollama_app.state.config.MODEL_FILTER_LIST = app.state.config.MODEL_FILTER_LIST
openai_app.state.config.ENABLE_MODEL_FILTER = app.state.config.ENABLE_MODEL_FILTER
openai_app.state.config.MODEL_FILTER_LIST = app.state.config.MODEL_FILTER_LIST
litellm_app.state.ENABLE_MODEL_FILTER = app.state.config.ENABLE_MODEL_FILTER
litellm_app.state.MODEL_FILTER_LIST = app.state.config.MODEL_FILTER_LIST
return { return {
"enabled": app.state.config.ENABLE_MODEL_FILTER, "enabled": app.state.config.ENABLE_MODEL_FILTER,
"models": app.state.config.MODEL_FILTER_LIST, "models": app.state.config.MODEL_FILTER_LIST,
@ -334,7 +409,6 @@ class UrlForm(BaseModel):
@app.post("/api/webhook") @app.post("/api/webhook")
async def update_webhook_url(form_data: UrlForm, user=Depends(get_admin_user)): async def update_webhook_url(form_data: UrlForm, user=Depends(get_admin_user)):
app.state.config.WEBHOOK_URL = form_data.url app.state.config.WEBHOOK_URL = form_data.url
webui_app.state.WEBHOOK_URL = app.state.config.WEBHOOK_URL webui_app.state.WEBHOOK_URL = app.state.config.WEBHOOK_URL
return { return {

View File

@ -18,8 +18,6 @@ psycopg2-binary==2.9.9
PyMySQL==1.1.1 PyMySQL==1.1.1
bcrypt==4.1.3 bcrypt==4.1.3
litellm[proxy]==1.37.20
boto3==1.34.110 boto3==1.34.110
argon2-cffi==23.1.0 argon2-cffi==23.1.0

View File

@ -1,43 +0,0 @@
litellm_settings:
drop_params: true
model_list:
- model_name: 'HuggingFace: Mistral: Mistral 7B Instruct v0.1'
litellm_params:
model: huggingface/mistralai/Mistral-7B-Instruct-v0.1
api_key: os.environ/HF_TOKEN
max_tokens: 1024
- model_name: 'HuggingFace: Mistral: Mistral 7B Instruct v0.2'
litellm_params:
model: huggingface/mistralai/Mistral-7B-Instruct-v0.2
api_key: os.environ/HF_TOKEN
max_tokens: 1024
- model_name: 'HuggingFace: Meta: Llama 3 8B Instruct'
litellm_params:
model: huggingface/meta-llama/Meta-Llama-3-8B-Instruct
api_key: os.environ/HF_TOKEN
max_tokens: 2047
- model_name: 'HuggingFace: Mistral: Mixtral 8x7B Instruct v0.1'
litellm_params:
model: huggingface/mistralai/Mixtral-8x7B-Instruct-v0.1
api_key: os.environ/HF_TOKEN
max_tokens: 8192
- model_name: 'HuggingFace: Microsoft: Phi-3 Mini-4K-Instruct'
litellm_params:
model: huggingface/microsoft/Phi-3-mini-4k-instruct
api_key: os.environ/HF_TOKEN
max_tokens: 1024
- model_name: 'HuggingFace: Google: Gemma 7B 1.1'
litellm_params:
model: huggingface/google/gemma-1.1-7b-it
api_key: os.environ/HF_TOKEN
max_tokens: 1024
- model_name: 'HuggingFace: Yi-1.5 34B Chat'
litellm_params:
model: huggingface/01-ai/Yi-1.5-34B-Chat
api_key: os.environ/HF_TOKEN
max_tokens: 1024
- model_name: 'HuggingFace: Nous Research: Nous Hermes 2 Mixtral 8x7B DPO'
litellm_params:
model: huggingface/NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO
api_key: os.environ/HF_TOKEN
max_tokens: 2048

View File

@ -34,11 +34,6 @@ fi
# Check if SPACE_ID is set, if so, configure for space # Check if SPACE_ID is set, if so, configure for space
if [ -n "$SPACE_ID" ]; then if [ -n "$SPACE_ID" ]; then
echo "Configuring for HuggingFace Space deployment" echo "Configuring for HuggingFace Space deployment"
# Copy litellm_config.yaml with specified ownership
echo "Copying litellm_config.yaml to the desired location with specified ownership..."
cp -f ./space/litellm_config.yaml ./data/litellm/config.yaml
if [ -n "$ADMIN_USER_EMAIL" ] && [ -n "$ADMIN_USER_PASSWORD" ]; then if [ -n "$ADMIN_USER_EMAIL" ] && [ -n "$ADMIN_USER_PASSWORD" ]; then
echo "Admin user configured, creating" echo "Admin user configured, creating"
WEBUI_SECRET_KEY="$WEBUI_SECRET_KEY" uvicorn main:app --host "$HOST" --port "$PORT" --forwarded-allow-ips '*' & WEBUI_SECRET_KEY="$WEBUI_SECRET_KEY" uvicorn main:app --host "$HOST" --port "$PORT" --forwarded-allow-ips '*' &

View File

@ -1,5 +1,6 @@
from pathlib import Path from pathlib import Path
import hashlib import hashlib
import json
import re import re
from datetime import timedelta from datetime import timedelta
from typing import Optional from typing import Optional
@ -110,3 +111,76 @@ def parse_duration(duration: str) -> Optional[timedelta]:
total_duration += timedelta(weeks=number) total_duration += timedelta(weeks=number)
return total_duration return total_duration
def parse_ollama_modelfile(model_text):
parameters_meta = {
"mirostat": int,
"mirostat_eta": float,
"mirostat_tau": float,
"num_ctx": int,
"repeat_last_n": int,
"repeat_penalty": float,
"temperature": float,
"seed": int,
"stop": str,
"tfs_z": float,
"num_predict": int,
"top_k": int,
"top_p": float,
}
data = {"base_model_id": None, "params": {}}
# Parse base model
base_model_match = re.search(
r"^FROM\s+(\w+)", model_text, re.MULTILINE | re.IGNORECASE
)
if base_model_match:
data["base_model_id"] = base_model_match.group(1)
# Parse template
template_match = re.search(
r'TEMPLATE\s+"""(.+?)"""', model_text, re.DOTALL | re.IGNORECASE
)
if template_match:
data["params"] = {"template": template_match.group(1).strip()}
# Parse stops
stops = re.findall(r'PARAMETER stop "(.*?)"', model_text, re.IGNORECASE)
if stops:
data["params"]["stop"] = stops
# Parse other parameters from the provided list
for param, param_type in parameters_meta.items():
param_match = re.search(rf"PARAMETER {param} (.+)", model_text, re.IGNORECASE)
if param_match:
value = param_match.group(1)
if param_type == int:
value = int(value)
elif param_type == float:
value = float(value)
data["params"][param] = value
# Parse adapter
adapter_match = re.search(r"ADAPTER (.+)", model_text, re.IGNORECASE)
if adapter_match:
data["params"]["adapter"] = adapter_match.group(1)
# Parse system description
system_desc_match = re.search(
r'SYSTEM\s+"""(.+?)"""', model_text, re.DOTALL | re.IGNORECASE
)
if system_desc_match:
data["params"]["system"] = system_desc_match.group(1).strip()
# Parse messages
messages = []
message_matches = re.findall(r"MESSAGE (\w+) (.+)", model_text, re.IGNORECASE)
for role, content in message_matches:
messages.append({"role": role, "content": content})
if messages:
data["params"]["messages"] = messages
return data

10
backend/utils/models.py Normal file
View File

@ -0,0 +1,10 @@
from apps.webui.models.models import Models, ModelModel, ModelForm, ModelResponse
def get_model_id_from_custom_model_id(id: str):
model = Models.get_model_by_id(id)
if model:
return model.id
else:
return id

View File

@ -1,7 +1,7 @@
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from fastapi import HTTPException, status, Depends from fastapi import HTTPException, status, Depends
from apps.web.models.users import Users from apps.webui.models.users import Users
from pydantic import BaseModel from pydantic import BaseModel
from typing import Union, Optional from typing import Union, Optional

View File

@ -273,7 +273,6 @@ langsmith==0.1.57
# via langchain-community # via langchain-community
# via langchain-core # via langchain-core
litellm==1.37.20 litellm==1.37.20
# via litellm
# via open-webui # via open-webui
lxml==5.2.2 lxml==5.2.2
# via unstructured # via unstructured
@ -396,7 +395,6 @@ pandas==2.2.2
# via open-webui # via open-webui
passlib==1.7.4 passlib==1.7.4
# via open-webui # via open-webui
# via passlib
pathspec==0.12.1 pathspec==0.12.1
# via black # via black
peewee==3.17.5 peewee==3.17.5
@ -454,7 +452,6 @@ pygments==2.18.0
pyjwt==2.8.0 pyjwt==2.8.0
# via litellm # via litellm
# via open-webui # via open-webui
# via pyjwt
pymysql==1.1.0 pymysql==1.1.0
# via open-webui # via open-webui
pypandoc==1.13 pypandoc==1.13
@ -559,6 +556,9 @@ scipy==1.13.0
# via sentence-transformers # via sentence-transformers
sentence-transformers==2.7.0 sentence-transformers==2.7.0
# via open-webui # via open-webui
setuptools==69.5.1
# via ctranslate2
# via opentelemetry-instrumentation
shapely==2.0.4 shapely==2.0.4
# via rapidocr-onnxruntime # via rapidocr-onnxruntime
shellingham==1.5.4 shellingham==1.5.4
@ -659,7 +659,6 @@ uvicorn==0.22.0
# via fastapi # via fastapi
# via litellm # via litellm
# via open-webui # via open-webui
# via uvicorn
uvloop==0.19.0 uvloop==0.19.0
# via uvicorn # via uvicorn
validators==0.28.1 validators==0.28.1
@ -687,6 +686,3 @@ youtube-transcript-api==0.6.2
# via open-webui # via open-webui
zipp==3.18.1 zipp==3.18.1
# via importlib-metadata # via importlib-metadata
setuptools==69.5.1
# via ctranslate2
# via opentelemetry-instrumentation

View File

@ -273,7 +273,6 @@ langsmith==0.1.57
# via langchain-community # via langchain-community
# via langchain-core # via langchain-core
litellm==1.37.20 litellm==1.37.20
# via litellm
# via open-webui # via open-webui
lxml==5.2.2 lxml==5.2.2
# via unstructured # via unstructured
@ -396,7 +395,6 @@ pandas==2.2.2
# via open-webui # via open-webui
passlib==1.7.4 passlib==1.7.4
# via open-webui # via open-webui
# via passlib
pathspec==0.12.1 pathspec==0.12.1
# via black # via black
peewee==3.17.5 peewee==3.17.5
@ -454,7 +452,6 @@ pygments==2.18.0
pyjwt==2.8.0 pyjwt==2.8.0
# via litellm # via litellm
# via open-webui # via open-webui
# via pyjwt
pymysql==1.1.0 pymysql==1.1.0
# via open-webui # via open-webui
pypandoc==1.13 pypandoc==1.13
@ -559,6 +556,9 @@ scipy==1.13.0
# via sentence-transformers # via sentence-transformers
sentence-transformers==2.7.0 sentence-transformers==2.7.0
# via open-webui # via open-webui
setuptools==69.5.1
# via ctranslate2
# via opentelemetry-instrumentation
shapely==2.0.4 shapely==2.0.4
# via rapidocr-onnxruntime # via rapidocr-onnxruntime
shellingham==1.5.4 shellingham==1.5.4
@ -659,7 +659,6 @@ uvicorn==0.22.0
# via fastapi # via fastapi
# via litellm # via litellm
# via open-webui # via open-webui
# via uvicorn
uvloop==0.19.0 uvloop==0.19.0
# via uvicorn # via uvicorn
validators==0.28.1 validators==0.28.1
@ -687,6 +686,3 @@ youtube-transcript-api==0.6.2
# via open-webui # via open-webui
zipp==3.18.1 zipp==3.18.1
# via importlib-metadata # via importlib-metadata
setuptools==69.5.1
# via ctranslate2
# via opentelemetry-instrumentation

View File

@ -654,3 +654,35 @@ export const deleteAllChats = async (token: string) => {
return res; return res;
}; };
export const archiveAllChats = async (token: string) => {
let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/chats/archive/all`, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
...(token && { authorization: `Bearer ${token}` })
}
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.then((json) => {
return json;
})
.catch((err) => {
error = err.detail;
console.log(err);
return null;
});
if (error) {
throw error;
}
return res;
};

View File

@ -1,5 +1,54 @@
import { WEBUI_BASE_URL } from '$lib/constants'; import { WEBUI_BASE_URL } from '$lib/constants';
export const getModels = async (token: string = '') => {
let error = null;
const res = await fetch(`${WEBUI_BASE_URL}/api/models`, {
method: 'GET',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
...(token && { authorization: `Bearer ${token}` })
}
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
console.log(err);
error = err;
return null;
});
if (error) {
throw error;
}
let models = res?.data ?? [];
models = models
.filter((models) => models)
.sort((a, b) => {
// Compare case-insensitively
const lowerA = a.name.toLowerCase();
const lowerB = b.name.toLowerCase();
if (lowerA < lowerB) return -1;
if (lowerA > lowerB) return 1;
// If same case-insensitively, sort by original strings,
// lowercase will come before uppercase due to ASCII values
if (a < b) return -1;
if (a > b) return 1;
return 0; // They are equal
});
console.log(models);
return models;
};
export const getBackendConfig = async () => { export const getBackendConfig = async () => {
let error = null; let error = null;
@ -196,3 +245,77 @@ export const updateWebhookUrl = async (token: string, url: string) => {
return res.url; return res.url;
}; };
export const getModelConfig = async (token: string): Promise<GlobalModelConfig> => {
let error = null;
const res = await fetch(`${WEBUI_BASE_URL}/api/config/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) => {
console.log(err);
error = err;
return null;
});
if (error) {
throw error;
}
return res.models;
};
export interface ModelConfig {
id: string;
name: string;
meta: ModelMeta;
base_model_id?: string;
params: ModelParams;
}
export interface ModelMeta {
description?: string;
capabilities?: object;
}
export interface ModelParams {}
export type GlobalModelConfig = ModelConfig[];
export const updateModelConfig = async (token: string, config: GlobalModelConfig) => {
let error = null;
const res = await fetch(`${WEBUI_BASE_URL}/api/config/models`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
},
body: JSON.stringify({
models: config
})
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
console.log(err);
error = err;
return null;
});
if (error) {
throw error;
}
return res;
};

View File

@ -1,150 +0,0 @@
import { LITELLM_API_BASE_URL } from '$lib/constants';
export const getLiteLLMModels = async (token: string = '') => {
let error = null;
const res = await fetch(`${LITELLM_API_BASE_URL}/v1/models`, {
method: 'GET',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
...(token && { authorization: `Bearer ${token}` })
}
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
console.log(err);
error = `LiteLLM: ${err?.error?.message ?? 'Network Problem'}`;
return [];
});
if (error) {
throw error;
}
const models = Array.isArray(res) ? res : res?.data ?? null;
return models
? models
.map((model) => ({
id: model.id,
name: model.name ?? model.id,
external: true,
source: 'LiteLLM'
}))
.sort((a, b) => {
return a.name.localeCompare(b.name);
})
: models;
};
export const getLiteLLMModelInfo = async (token: string = '') => {
let error = null;
const res = await fetch(`${LITELLM_API_BASE_URL}/model/info`, {
method: 'GET',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
...(token && { authorization: `Bearer ${token}` })
}
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
console.log(err);
error = `LiteLLM: ${err?.error?.message ?? 'Network Problem'}`;
return [];
});
if (error) {
throw error;
}
const models = Array.isArray(res) ? res : res?.data ?? null;
return models;
};
type AddLiteLLMModelForm = {
name: string;
model: string;
api_base: string;
api_key: string;
rpm: string;
max_tokens: string;
};
export const addLiteLLMModel = async (token: string = '', payload: AddLiteLLMModelForm) => {
let error = null;
const res = await fetch(`${LITELLM_API_BASE_URL}/model/new`, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
...(token && { authorization: `Bearer ${token}` })
},
body: JSON.stringify({
model_name: payload.name,
litellm_params: {
model: payload.model,
...(payload.api_base === '' ? {} : { api_base: payload.api_base }),
...(payload.api_key === '' ? {} : { api_key: payload.api_key }),
...(isNaN(parseInt(payload.rpm)) ? {} : { rpm: parseInt(payload.rpm) }),
...(payload.max_tokens === '' ? {} : { max_tokens: payload.max_tokens })
}
})
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
console.log(err);
error = `LiteLLM: ${err?.error?.message ?? 'Network Problem'}`;
return [];
});
if (error) {
throw error;
}
return res;
};
export const deleteLiteLLMModel = async (token: string = '', id: string) => {
let error = null;
const res = await fetch(`${LITELLM_API_BASE_URL}/model/delete`, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
...(token && { authorization: `Bearer ${token}` })
},
body: JSON.stringify({
id: id
})
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
console.log(err);
error = `LiteLLM: ${err?.error?.message ?? 'Network Problem'}`;
return [];
});
if (error) {
throw error;
}
return res;
};

View File

@ -1,18 +1,16 @@
import { WEBUI_API_BASE_URL } from '$lib/constants'; import { WEBUI_API_BASE_URL } from '$lib/constants';
export const createNewModelfile = async (token: string, modelfile: object) => { export const addNewModel = async (token: string, model: object) => {
let error = null; let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/modelfiles/create`, { const res = await fetch(`${WEBUI_API_BASE_URL}/models/add`, {
method: 'POST', method: 'POST',
headers: { headers: {
Accept: 'application/json', Accept: 'application/json',
'Content-Type': 'application/json', 'Content-Type': 'application/json',
authorization: `Bearer ${token}` authorization: `Bearer ${token}`
}, },
body: JSON.stringify({ body: JSON.stringify(model)
modelfile: modelfile
})
}) })
.then(async (res) => { .then(async (res) => {
if (!res.ok) throw await res.json(); if (!res.ok) throw await res.json();
@ -31,10 +29,10 @@ export const createNewModelfile = async (token: string, modelfile: object) => {
return res; return res;
}; };
export const getModelfiles = async (token: string = '') => { export const getModelInfos = async (token: string = '') => {
let error = null; let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/modelfiles/`, { const res = await fetch(`${WEBUI_API_BASE_URL}/models`, {
method: 'GET', method: 'GET',
headers: { headers: {
Accept: 'application/json', Accept: 'application/json',
@ -59,62 +57,22 @@ export const getModelfiles = async (token: string = '') => {
throw error; throw error;
} }
return res.map((modelfile) => modelfile.modelfile); return res;
}; };
export const getModelfileByTagName = async (token: string, tagName: string) => { export const getModelById = async (token: string, id: string) => {
let error = null; let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/modelfiles/`, { const searchParams = new URLSearchParams();
method: 'POST', searchParams.append('id', id);
const res = await fetch(`${WEBUI_API_BASE_URL}/models?${searchParams.toString()}`, {
method: 'GET',
headers: { headers: {
Accept: 'application/json', Accept: 'application/json',
'Content-Type': 'application/json', 'Content-Type': 'application/json',
authorization: `Bearer ${token}` authorization: `Bearer ${token}`
}, }
body: JSON.stringify({
tag_name: tagName
})
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.then((json) => {
return json;
})
.catch((err) => {
error = err;
console.log(err);
return null;
});
if (error) {
throw error;
}
return res.modelfile;
};
export const updateModelfileByTagName = async (
token: string,
tagName: string,
modelfile: object
) => {
let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/modelfiles/update`, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
authorization: `Bearer ${token}`
},
body: JSON.stringify({
tag_name: tagName,
modelfile: modelfile
})
}) })
.then(async (res) => { .then(async (res) => {
if (!res.ok) throw await res.json(); if (!res.ok) throw await res.json();
@ -137,19 +95,55 @@ export const updateModelfileByTagName = async (
return res; return res;
}; };
export const deleteModelfileByTagName = async (token: string, tagName: string) => { export const updateModelById = async (token: string, id: string, model: object) => {
let error = null; let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/modelfiles/delete`, { const searchParams = new URLSearchParams();
searchParams.append('id', id);
const res = await fetch(`${WEBUI_API_BASE_URL}/models/update?${searchParams.toString()}`, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
authorization: `Bearer ${token}`
},
body: JSON.stringify(model)
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.then((json) => {
return json;
})
.catch((err) => {
error = err;
console.log(err);
return null;
});
if (error) {
throw error;
}
return res;
};
export const deleteModelById = async (token: string, id: string) => {
let error = null;
const searchParams = new URLSearchParams();
searchParams.append('id', id);
const res = await fetch(`${WEBUI_API_BASE_URL}/models/delete?${searchParams.toString()}`, {
method: 'DELETE', method: 'DELETE',
headers: { headers: {
Accept: 'application/json', Accept: 'application/json',
'Content-Type': 'application/json', 'Content-Type': 'application/json',
authorization: `Bearer ${token}` authorization: `Bearer ${token}`
}, }
body: JSON.stringify({
tag_name: tagName
})
}) })
.then(async (res) => { .then(async (res) => {
if (!res.ok) throw await res.json(); if (!res.ok) throw await res.json();

View File

@ -164,7 +164,7 @@ export const getOllamaVersion = async (token: string = '') => {
throw error; throw error;
} }
return res?.version ?? ''; return res?.version ?? false;
}; };
export const getOllamaModels = async (token: string = '') => { export const getOllamaModels = async (token: string = '') => {

View File

@ -230,7 +230,12 @@ export const getOpenAIModels = async (token: string = '') => {
return models return models
? models ? models
.map((model) => ({ id: model.id, name: model.name ?? model.id, external: true })) .map((model) => ({
id: model.id,
name: model.name ?? model.id,
external: true,
custom_info: model.custom_info
}))
.sort((a, b) => { .sort((a, b) => {
return a.name.localeCompare(b.name); return a.name.localeCompare(b.name);
}) })

View File

@ -1,13 +1,24 @@
<script lang="ts"> <script lang="ts">
import fileSaver from 'file-saver';
const { saveAs } = fileSaver;
import { downloadDatabase } from '$lib/apis/utils'; import { downloadDatabase } from '$lib/apis/utils';
import { onMount, getContext } from 'svelte'; import { onMount, getContext } from 'svelte';
import { config } from '$lib/stores'; import { config, user } from '$lib/stores';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import { getAllUserChats } from '$lib/apis/chats';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
export let saveHandler: Function; export let saveHandler: Function;
const exportAllUserChats = async () => {
let blob = new Blob([JSON.stringify(await getAllUserChats(localStorage.token))], {
type: 'application/json'
});
saveAs(blob, `all-chats-export-${Date.now()}.json`);
};
onMount(async () => { onMount(async () => {
// permissions = await getUserPermissions(localStorage.token); // permissions = await getUserPermissions(localStorage.token);
}); });
@ -23,10 +34,10 @@
<div> <div>
<div class=" mb-2 text-sm font-medium">{$i18n.t('Database')}</div> <div class=" mb-2 text-sm font-medium">{$i18n.t('Database')}</div>
<div class=" flex w-full justify-between"> {#if $config?.enable_admin_export ?? true}
<!-- <div class=" self-center text-xs font-medium">{$i18n.t('Allow Chat Deletion')}</div> --> <div class=" flex w-full justify-between">
<!-- <div class=" self-center text-xs font-medium">{$i18n.t('Allow Chat Deletion')}</div> -->
{#if $config?.admin_export_enabled ?? true}
<button <button
class=" flex rounded-md py-1.5 px-3 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition" class=" flex rounded-md py-1.5 px-3 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
type="button" type="button"
@ -55,8 +66,36 @@
</div> </div>
<div class=" self-center text-sm font-medium">{$i18n.t('Download Database')}</div> <div class=" self-center text-sm font-medium">{$i18n.t('Download Database')}</div>
</button> </button>
{/if} </div>
</div>
<hr class=" dark:border-gray-700 my-1" />
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
on:click={() => {
exportAllUserChats();
}}
>
<div class=" self-center mr-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path d="M2 3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3Z" />
<path
fill-rule="evenodd"
d="M13 6H3v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6ZM8.75 7.75a.75.75 0 0 0-1.5 0v2.69L6.03 9.22a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l2.5-2.5a.75.75 0 1 0-1.06-1.06l-1.22 1.22V7.75Z"
clip-rule="evenodd"
/>
</svg>
</div>
<div class=" self-center text-sm font-medium">
{$i18n.t('Export All Chats (All Users)')}
</div>
</button>
{/if}
</div> </div>
</div> </div>

View File

@ -10,7 +10,7 @@
chatId, chatId,
chats, chats,
config, config,
modelfiles, type Model,
models, models,
settings, settings,
showSidebar, showSidebar,
@ -35,12 +35,7 @@
import MessageInput from '$lib/components/chat/MessageInput.svelte'; import MessageInput from '$lib/components/chat/MessageInput.svelte';
import Messages from '$lib/components/chat/Messages.svelte'; import Messages from '$lib/components/chat/Messages.svelte';
import Navbar from '$lib/components/layout/Navbar.svelte'; import Navbar from '$lib/components/layout/Navbar.svelte';
import { import { OLLAMA_API_BASE_URL, OPENAI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants';
LITELLM_API_BASE_URL,
OLLAMA_API_BASE_URL,
OPENAI_API_BASE_URL,
WEBUI_BASE_URL
} from '$lib/constants';
import { createOpenAITextStream } from '$lib/apis/streaming'; import { createOpenAITextStream } from '$lib/apis/streaming';
import { queryMemory } from '$lib/apis/memories'; import { queryMemory } from '$lib/apis/memories';
import type { Writable } from 'svelte/store'; import type { Writable } from 'svelte/store';
@ -60,25 +55,7 @@
let showModelSelector = true; let showModelSelector = true;
let selectedModels = ['']; let selectedModels = [''];
let atSelectedModel = ''; let atSelectedModel: Model | undefined;
let selectedModelfile = null;
$: selectedModelfile =
selectedModels.length === 1 &&
$modelfiles.filter((modelfile) => modelfile.tagName === selectedModels[0]).length > 0
? $modelfiles.filter((modelfile) => modelfile.tagName === selectedModels[0])[0]
: null;
let selectedModelfiles = {};
$: selectedModelfiles = selectedModels.reduce((a, tagName, i, arr) => {
const modelfile =
$modelfiles.filter((modelfile) => modelfile.tagName === tagName)?.at(0) ?? undefined;
return {
...a,
...(modelfile && { [tagName]: modelfile })
};
}, {});
let chat = null; let chat = null;
let tags = []; let tags = [];
@ -164,6 +141,7 @@
if ($page.url.searchParams.get('q')) { if ($page.url.searchParams.get('q')) {
prompt = $page.url.searchParams.get('q') ?? ''; prompt = $page.url.searchParams.get('q') ?? '';
if (prompt) { if (prompt) {
await tick(); await tick();
submitPrompt(prompt); submitPrompt(prompt);
@ -211,7 +189,7 @@
await settings.set({ await settings.set({
..._settings, ..._settings,
system: chatContent.system ?? _settings.system, system: chatContent.system ?? _settings.system,
options: chatContent.options ?? _settings.options params: chatContent.options ?? _settings.params
}); });
autoScroll = true; autoScroll = true;
await tick(); await tick();
@ -300,7 +278,7 @@
models: selectedModels, models: selectedModels,
system: $settings.system ?? undefined, system: $settings.system ?? undefined,
options: { options: {
...($settings.options ?? {}) ...($settings.params ?? {})
}, },
messages: messages, messages: messages,
history: history, history: history,
@ -317,6 +295,7 @@
// Reset chat input textarea // Reset chat input textarea
prompt = ''; prompt = '';
document.getElementById('chat-textarea').style.height = '';
files = []; files = [];
// Send prompt // Send prompt
@ -328,75 +307,92 @@
const _chatId = JSON.parse(JSON.stringify($chatId)); const _chatId = JSON.parse(JSON.stringify($chatId));
await Promise.all( await Promise.all(
(modelId ? [modelId] : atSelectedModel !== '' ? [atSelectedModel.id] : selectedModels).map( (modelId
async (modelId) => { ? [modelId]
console.log('modelId', modelId); : atSelectedModel !== undefined
const model = $models.filter((m) => m.id === modelId).at(0); ? [atSelectedModel.id]
: selectedModels
).map(async (modelId) => {
console.log('modelId', modelId);
const model = $models.filter((m) => m.id === modelId).at(0);
if (model) { if (model) {
// Create response message // If there are image files, check if model is vision capable
let responseMessageId = uuidv4(); const hasImages = messages.some((message) =>
let responseMessage = { message.files?.some((file) => file.type === 'image')
parentId: parentId, );
id: responseMessageId,
childrenIds: [],
role: 'assistant',
content: '',
model: model.id,
userContext: null,
timestamp: Math.floor(Date.now() / 1000) // Unix epoch
};
// Add message to history and Set currentId to messageId if (hasImages && !(model.info?.meta?.capabilities?.vision ?? true)) {
history.messages[responseMessageId] = responseMessage; toast.error(
history.currentId = responseMessageId; $i18n.t('Model {{modelName}} is not vision capable', {
modelName: model.name ?? model.id
})
);
}
// Append messageId to childrenIds of parent message // Create response message
if (parentId !== null) { let responseMessageId = uuidv4();
history.messages[parentId].childrenIds = [ let responseMessage = {
...history.messages[parentId].childrenIds, parentId: parentId,
responseMessageId id: responseMessageId,
]; childrenIds: [],
} role: 'assistant',
content: '',
model: model.id,
modelName: model.name ?? model.id,
userContext: null,
timestamp: Math.floor(Date.now() / 1000) // Unix epoch
};
await tick(); // Add message to history and Set currentId to messageId
history.messages[responseMessageId] = responseMessage;
history.currentId = responseMessageId;
let userContext = null; // Append messageId to childrenIds of parent message
if ($settings?.memory ?? false) { if (parentId !== null) {
if (userContext === null) { history.messages[parentId].childrenIds = [
const res = await queryMemory(localStorage.token, prompt).catch((error) => { ...history.messages[parentId].childrenIds,
toast.error(error); responseMessageId
return null; ];
}); }
if (res) { await tick();
if (res.documents[0].length > 0) {
userContext = res.documents.reduce((acc, doc, index) => {
const createdAtTimestamp = res.metadatas[index][0].created_at;
const createdAtDate = new Date(createdAtTimestamp * 1000)
.toISOString()
.split('T')[0];
acc.push(`${index + 1}. [${createdAtDate}]. ${doc[0]}`);
return acc;
}, []);
}
console.log(userContext); let userContext = null;
if ($settings?.memory ?? false) {
if (userContext === null) {
const res = await queryMemory(localStorage.token, prompt).catch((error) => {
toast.error(error);
return null;
});
if (res) {
if (res.documents[0].length > 0) {
userContext = res.documents.reduce((acc, doc, index) => {
const createdAtTimestamp = res.metadatas[index][0].created_at;
const createdAtDate = new Date(createdAtTimestamp * 1000)
.toISOString()
.split('T')[0];
acc.push(`${index + 1}. [${createdAtDate}]. ${doc[0]}`);
return acc;
}, []);
} }
console.log(userContext);
} }
} }
responseMessage.userContext = userContext;
if (model?.external) {
await sendPromptOpenAI(model, prompt, responseMessageId, _chatId);
} else if (model) {
await sendPromptOllama(model, prompt, responseMessageId, _chatId);
}
} else {
toast.error($i18n.t(`Model {{modelId}} not found`, { modelId }));
} }
responseMessage.userContext = userContext;
if (model?.owned_by === 'openai') {
await sendPromptOpenAI(model, prompt, responseMessageId, _chatId);
} else if (model) {
await sendPromptOllama(model, prompt, responseMessageId, _chatId);
}
} else {
toast.error($i18n.t(`Model {{modelId}} not found`, { modelId }));
} }
) })
); );
await chats.set(await getChatList(localStorage.token)); await chats.set(await getChatList(localStorage.token));
@ -430,7 +426,7 @@
// Prepare the base message object // Prepare the base message object
const baseMessage = { const baseMessage = {
role: message.role, role: message.role,
content: arr.length - 2 !== idx ? message.content : message?.raContent ?? message.content content: message.content
}; };
// Extract and format image URLs if any exist // Extract and format image URLs if any exist
@ -442,7 +438,6 @@
if (imageUrls && imageUrls.length > 0 && message.role === 'user') { if (imageUrls && imageUrls.length > 0 && message.role === 'user') {
baseMessage.images = imageUrls; baseMessage.images = imageUrls;
} }
return baseMessage; return baseMessage;
}); });
@ -473,13 +468,15 @@
model: model, model: model,
messages: messagesBody, messages: messagesBody,
options: { options: {
...($settings.options ?? {}), ...($settings.params ?? {}),
stop: stop:
$settings?.options?.stop ?? undefined $settings?.params?.stop ?? undefined
? $settings.options.stop.map((str) => ? $settings.params.stop.map((str) =>
decodeURIComponent(JSON.parse('"' + str.replace(/\"/g, '\\"') + '"')) decodeURIComponent(JSON.parse('"' + str.replace(/\"/g, '\\"') + '"'))
) )
: undefined : undefined,
num_predict: $settings?.params?.max_tokens ?? undefined,
repeat_penalty: $settings?.params?.frequency_penalty ?? undefined
}, },
format: $settings.requestFormat ?? undefined, format: $settings.requestFormat ?? undefined,
keep_alive: $settings.keepAlive ?? undefined, keep_alive: $settings.keepAlive ?? undefined,
@ -605,7 +602,8 @@
if ($settings.saveChatHistory ?? true) { if ($settings.saveChatHistory ?? true) {
chat = await updateChatById(localStorage.token, _chatId, { chat = await updateChatById(localStorage.token, _chatId, {
messages: messages, messages: messages,
history: history history: history,
models: selectedModels
}); });
await chats.set(await getChatList(localStorage.token)); await chats.set(await getChatList(localStorage.token));
} }
@ -716,24 +714,21 @@
: message?.raContent ?? message.content : message?.raContent ?? message.content
}) })
})), })),
seed: $settings?.options?.seed ?? undefined, seed: $settings?.params?.seed ?? undefined,
stop: stop:
$settings?.options?.stop ?? undefined $settings?.params?.stop ?? undefined
? $settings.options.stop.map((str) => ? $settings.params.stop.map((str) =>
decodeURIComponent(JSON.parse('"' + str.replace(/\"/g, '\\"') + '"')) decodeURIComponent(JSON.parse('"' + str.replace(/\"/g, '\\"') + '"'))
) )
: undefined, : undefined,
temperature: $settings?.options?.temperature ?? undefined, temperature: $settings?.params?.temperature ?? undefined,
top_p: $settings?.options?.top_p ?? undefined, top_p: $settings?.params?.top_p ?? undefined,
num_ctx: $settings?.options?.num_ctx ?? undefined, frequency_penalty: $settings?.params?.frequency_penalty ?? undefined,
frequency_penalty: $settings?.options?.repeat_penalty ?? undefined, max_tokens: $settings?.params?.max_tokens ?? undefined,
max_tokens: $settings?.options?.num_predict ?? undefined,
docs: docs.length > 0 ? docs : undefined, docs: docs.length > 0 ? docs : undefined,
citations: docs.length > 0 citations: docs.length > 0
}, },
model?.source?.toLowerCase() === 'litellm' `${OPENAI_API_BASE_URL}`
? `${LITELLM_API_BASE_URL}/v1`
: `${OPENAI_API_BASE_URL}`
); );
// Wait until history/message have been updated // Wait until history/message have been updated
@ -797,6 +792,7 @@
if ($chatId == _chatId) { if ($chatId == _chatId) {
if ($settings.saveChatHistory ?? true) { if ($settings.saveChatHistory ?? true) {
chat = await updateChatById(localStorage.token, _chatId, { chat = await updateChatById(localStorage.token, _chatId, {
models: selectedModels,
messages: messages, messages: messages,
history: history history: history
}); });
@ -935,10 +931,8 @@
) + ' {{prompt}}', ) + ' {{prompt}}',
titleModelId, titleModelId,
userPrompt, userPrompt,
titleModel?.external ?? false titleModel?.owned_by === 'openai' ?? false
? titleModel?.source?.toLowerCase() === 'litellm' ? `${OPENAI_API_BASE_URL}`
? `${LITELLM_API_BASE_URL}/v1`
: `${OPENAI_API_BASE_URL}`
: `${OLLAMA_API_BASE_URL}/v1` : `${OLLAMA_API_BASE_URL}/v1`
); );
@ -1025,16 +1019,12 @@
<Messages <Messages
chatId={$chatId} chatId={$chatId}
{selectedModels} {selectedModels}
{selectedModelfiles}
{processing} {processing}
bind:history bind:history
bind:messages bind:messages
bind:autoScroll bind:autoScroll
bind:prompt bind:prompt
bottomPadding={files.length > 0} bottomPadding={files.length > 0}
suggestionPrompts={chatIdProp
? []
: selectedModelfile?.suggestionPrompts ?? $config.default_prompt_suggestions}
{sendPrompt} {sendPrompt}
{continueGeneration} {continueGeneration}
{regenerateResponse} {regenerateResponse}
@ -1048,7 +1038,8 @@
bind:files bind:files
bind:prompt bind:prompt
bind:autoScroll bind:autoScroll
bind:selectedModel={atSelectedModel} bind:atSelectedModel
{selectedModels}
{messages} {messages}
{submitPrompt} {submitPrompt}
{stopResponse} {stopResponse}

View File

@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import { onMount, tick, getContext } from 'svelte'; import { onMount, tick, getContext } from 'svelte';
import { mobile, modelfiles, settings, showSidebar } from '$lib/stores'; import { type Model, mobile, settings, showSidebar, models } from '$lib/stores';
import { blobToFile, calculateSHA256, findWordIndices } from '$lib/utils'; import { blobToFile, calculateSHA256, findWordIndices } from '$lib/utils';
import { import {
@ -27,7 +27,9 @@
export let stopResponse: Function; export let stopResponse: Function;
export let autoScroll = true; export let autoScroll = true;
export let selectedModel = '';
export let atSelectedModel: Model | undefined;
export let selectedModels: [''];
let chatTextAreaElement: HTMLTextAreaElement; let chatTextAreaElement: HTMLTextAreaElement;
let filesInputElement; let filesInputElement;
@ -52,6 +54,11 @@
let speechRecognition; let speechRecognition;
let visionCapableModels = [];
$: visionCapableModels = [...(atSelectedModel ? [atSelectedModel] : selectedModels)].filter(
(model) => $models.find((m) => m.id === model)?.info?.meta?.capabilities?.vision ?? true
);
$: if (prompt) { $: if (prompt) {
if (chatTextAreaElement) { if (chatTextAreaElement) {
chatTextAreaElement.style.height = ''; chatTextAreaElement.style.height = '';
@ -358,6 +365,10 @@
inputFiles.forEach((file) => { inputFiles.forEach((file) => {
console.log(file, file.name.split('.').at(-1)); console.log(file, file.name.split('.').at(-1));
if (['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(file['type'])) { if (['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(file['type'])) {
if (visionCapableModels.length === 0) {
toast.error($i18n.t('Selected model(s) do not support image inputs'));
return;
}
let reader = new FileReader(); let reader = new FileReader();
reader.onload = (event) => { reader.onload = (event) => {
files = [ files = [
@ -429,8 +440,8 @@
<div class="fixed bottom-0 {$showSidebar ? 'left-0 md:left-[260px]' : 'left-0'} right-0"> <div class="fixed bottom-0 {$showSidebar ? 'left-0 md:left-[260px]' : 'left-0'} right-0">
<div class="w-full"> <div class="w-full">
<div class="px-2.5 md:px-16 -mb-0.5 mx-auto inset-x-0 bg-transparent flex justify-center"> <div class=" -mb-0.5 mx-auto inset-x-0 bg-transparent flex justify-center">
<div class="flex flex-col max-w-5xl w-full"> <div class="flex flex-col max-w-6xl px-2.5 md:px-6 w-full">
<div class="relative"> <div class="relative">
{#if autoScroll === false && messages.length > 0} {#if autoScroll === false && messages.length > 0}
<div class=" absolute -top-12 left-0 right-0 flex justify-center z-30"> <div class=" absolute -top-12 left-0 right-0 flex justify-center z-30">
@ -494,12 +505,12 @@
bind:chatInputPlaceholder bind:chatInputPlaceholder
{messages} {messages}
on:select={(e) => { on:select={(e) => {
selectedModel = e.detail; atSelectedModel = e.detail;
chatTextAreaElement?.focus(); chatTextAreaElement?.focus();
}} }}
/> />
{#if selectedModel !== ''} {#if atSelectedModel !== undefined}
<div <div
class="px-3 py-2.5 text-left w-full flex justify-between items-center absolute bottom-0 left-0 right-0 bg-gradient-to-t from-50% from-white dark:from-gray-900" class="px-3 py-2.5 text-left w-full flex justify-between items-center absolute bottom-0 left-0 right-0 bg-gradient-to-t from-50% from-white dark:from-gray-900"
> >
@ -508,21 +519,21 @@
crossorigin="anonymous" crossorigin="anonymous"
alt="model profile" alt="model profile"
class="size-5 max-w-[28px] object-cover rounded-full" class="size-5 max-w-[28px] object-cover rounded-full"
src={$modelfiles.find((modelfile) => modelfile.tagName === selectedModel.id) src={$models.find((model) => model.id === atSelectedModel.id)?.info?.meta
?.imageUrl ?? ?.profile_image_url ??
($i18n.language === 'dg-DG' ($i18n.language === 'dg-DG'
? `/doge.png` ? `/doge.png`
: `${WEBUI_BASE_URL}/static/favicon.png`)} : `${WEBUI_BASE_URL}/static/favicon.png`)}
/> />
<div> <div>
Talking to <span class=" font-medium">{selectedModel.name} </span> Talking to <span class=" font-medium">{atSelectedModel.name}</span>
</div> </div>
</div> </div>
<div> <div>
<button <button
class="flex items-center" class="flex items-center"
on:click={() => { on:click={() => {
selectedModel = ''; atSelectedModel = undefined;
}} }}
> >
<XMark /> <XMark />
@ -535,7 +546,7 @@
</div> </div>
<div class="bg-white dark:bg-gray-900"> <div class="bg-white dark:bg-gray-900">
<div class="max-w-6xl px-2.5 md:px-16 mx-auto inset-x-0"> <div class="max-w-6xl px-2.5 md:px-6 mx-auto inset-x-0">
<div class=" pb-2"> <div class=" pb-2">
<input <input
bind:this={filesInputElement} bind:this={filesInputElement}
@ -550,6 +561,12 @@
if ( if (
['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(file['type']) ['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(file['type'])
) { ) {
if (visionCapableModels.length === 0) {
toast.error($i18n.t('Selected model(s) do not support image inputs'));
inputFiles = null;
filesInputElement.value = '';
return;
}
let reader = new FileReader(); let reader = new FileReader();
reader.onload = (event) => { reader.onload = (event) => {
files = [ files = [
@ -589,6 +606,7 @@
dir={$settings?.chatDirection ?? 'LTR'} dir={$settings?.chatDirection ?? 'LTR'}
class=" flex flex-col relative w-full rounded-3xl px-1.5 bg-gray-50 dark:bg-gray-850 dark:text-gray-100" class=" flex flex-col relative w-full rounded-3xl px-1.5 bg-gray-50 dark:bg-gray-850 dark:text-gray-100"
on:submit|preventDefault={() => { on:submit|preventDefault={() => {
// check if selectedModels support image input
submitPrompt(prompt, user); submitPrompt(prompt, user);
}} }}
> >
@ -597,7 +615,36 @@
{#each files as file, fileIdx} {#each files as file, fileIdx}
<div class=" relative group"> <div class=" relative group">
{#if file.type === 'image'} {#if file.type === 'image'}
<img src={file.url} alt="input" class=" h-16 w-16 rounded-xl object-cover" /> <div class="relative">
<img
src={file.url}
alt="input"
class=" h-16 w-16 rounded-xl object-cover"
/>
{#if atSelectedModel ? visionCapableModels.length === 0 : selectedModels.length !== visionCapableModels.length}
<Tooltip
className=" absolute top-1 left-1"
content={$i18n.t('{{ models }}', {
models: [...(atSelectedModel ? [atSelectedModel] : selectedModels)]
.filter((id) => !visionCapableModels.includes(id))
.join(', ')
})}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="currentColor"
class="size-4 fill-yellow-300"
>
<path
fill-rule="evenodd"
d="M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003ZM12 8.25a.75.75 0 0 1 .75.75v3.75a.75.75 0 0 1-1.5 0V9a.75.75 0 0 1 .75-.75Zm0 8.25a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z"
clip-rule="evenodd"
/>
</svg>
</Tooltip>
{/if}
</div>
{:else if file.type === 'doc'} {:else if file.type === 'doc'}
<div <div
class="h-16 w-[15rem] flex items-center space-x-3 px-2.5 dark:bg-gray-600 rounded-xl border border-gray-200 dark:border-none" class="h-16 w-[15rem] flex items-center space-x-3 px-2.5 dark:bg-gray-600 rounded-xl border border-gray-200 dark:border-none"
@ -883,7 +930,7 @@
if (e.key === 'Escape') { if (e.key === 'Escape') {
console.log('Escape'); console.log('Escape');
selectedModel = ''; atSelectedModel = undefined;
} }
}} }}
rows="1" rows="1"

View File

@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { chats, config, modelfiles, settings, user as _user, mobile } from '$lib/stores'; import { chats, config, settings, user as _user, mobile } from '$lib/stores';
import { tick, getContext } from 'svelte'; import { tick, getContext } from 'svelte';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
@ -26,7 +26,6 @@
export let user = $_user; export let user = $_user;
export let prompt; export let prompt;
export let suggestionPrompts = [];
export let processing = ''; export let processing = '';
export let bottomPadding = false; export let bottomPadding = false;
export let autoScroll; export let autoScroll;
@ -34,7 +33,6 @@
export let messages = []; export let messages = [];
export let selectedModels; export let selectedModels;
export let selectedModelfiles = [];
$: if (autoScroll && bottomPadding) { $: if (autoScroll && bottomPadding) {
(async () => { (async () => {
@ -247,9 +245,7 @@
<div class="h-full flex mb-16"> <div class="h-full flex mb-16">
{#if messages.length == 0} {#if messages.length == 0}
<Placeholder <Placeholder
models={selectedModels} modelIds={selectedModels}
modelfiles={selectedModelfiles}
{suggestionPrompts}
submitPrompt={async (p) => { submitPrompt={async (p) => {
let text = p; let text = p;
@ -316,7 +312,6 @@
{#key message.id} {#key message.id}
<ResponseMessage <ResponseMessage
{message} {message}
modelfiles={selectedModelfiles}
siblings={history.messages[message.parentId]?.childrenIds ?? []} siblings={history.messages[message.parentId]?.childrenIds ?? []}
isLastMessage={messageIdx + 1 === messages.length} isLastMessage={messageIdx + 1 === messages.length}
{readOnly} {readOnly}
@ -348,7 +343,6 @@
{chatId} {chatId}
parentMessage={history.messages[message.parentId]} parentMessage={history.messages[message.parentId]}
{messageIdx} {messageIdx}
{selectedModelfiles}
{updateChatMessages} {updateChatMessages}
{confirmEditResponseMessage} {confirmEditResponseMessage}
{rateMessage} {rateMessage}

View File

@ -4,7 +4,7 @@
import hljs from 'highlight.js'; import hljs from 'highlight.js';
import 'highlight.js/styles/github-dark.min.css'; import 'highlight.js/styles/github-dark.min.css';
import { loadPyodide } from 'pyodide'; import { loadPyodide } from 'pyodide';
import { tick } from 'svelte'; import { onMount, tick } from 'svelte';
import PyodideWorker from '$lib/workers/pyodide.worker?worker'; import PyodideWorker from '$lib/workers/pyodide.worker?worker';
export let id = ''; export let id = '';
@ -12,6 +12,7 @@
export let lang = ''; export let lang = '';
export let code = ''; export let code = '';
let highlightedCode = null;
let executing = false; let executing = false;
let stdout = null; let stdout = null;
@ -202,60 +203,60 @@ __builtins__.input = input`);
}; };
}; };
$: highlightedCode = code ? hljs.highlightAuto(code, hljs.getLanguage(lang)?.aliases).value : ''; $: if (code) {
highlightedCode = hljs.highlightAuto(code, hljs.getLanguage(lang)?.aliases).value || code;
}
</script> </script>
{#if code} <div class="mb-4" dir="ltr">
<div class="mb-4" dir="ltr"> <div
<div class="flex justify-between bg-[#202123] text-white text-xs px-4 pt-1 pb-0.5 rounded-t-lg overflow-x-auto"
class="flex justify-between bg-[#202123] text-white text-xs px-4 pt-1 pb-0.5 rounded-t-lg overflow-x-auto" >
> <div class="p-1">{@html lang}</div>
<div class="p-1">{@html lang}</div>
<div class="flex items-center"> <div class="flex items-center">
{#if lang === 'python' || (lang === '' && checkPythonCode(code))} {#if lang === 'python' || (lang === '' && checkPythonCode(code))}
{#if executing} {#if executing}
<div class="copy-code-button bg-none border-none p-1 cursor-not-allowed">Running</div> <div class="copy-code-button bg-none border-none p-1 cursor-not-allowed">Running</div>
{:else} {:else}
<button <button
class="copy-code-button bg-none border-none p-1" class="copy-code-button bg-none border-none p-1"
on:click={() => { on:click={() => {
executePython(code); executePython(code);
}}>Run</button }}>Run</button
> >
{/if}
{/if} {/if}
<button class="copy-code-button bg-none border-none p-1" on:click={copyCode} {/if}
>{copied ? 'Copied' : 'Copy Code'}</button <button class="copy-code-button bg-none border-none p-1" on:click={copyCode}
> >{copied ? 'Copied' : 'Copy Code'}</button
</div> >
</div> </div>
<pre
class=" hljs p-4 px-5 overflow-x-auto"
style="border-top-left-radius: 0px; border-top-right-radius: 0px; {(executing ||
stdout ||
stderr ||
result) &&
'border-bottom-left-radius: 0px; border-bottom-right-radius: 0px;'}"><code
class="language-{lang} rounded-t-none whitespace-pre">{@html highlightedCode || code}</code
></pre>
<div
id="plt-canvas-{id}"
class="bg-[#202123] text-white max-w-full overflow-x-auto scrollbar-hidden"
/>
{#if executing}
<div class="bg-[#202123] text-white px-4 py-4 rounded-b-lg">
<div class=" text-gray-500 text-xs mb-1">STDOUT/STDERR</div>
<div class="text-sm">Running...</div>
</div>
{:else if stdout || stderr || result}
<div class="bg-[#202123] text-white px-4 py-4 rounded-b-lg">
<div class=" text-gray-500 text-xs mb-1">STDOUT/STDERR</div>
<div class="text-sm">{stdout || stderr || result}</div>
</div>
{/if}
</div> </div>
{/if}
<pre
class=" hljs p-4 px-5 overflow-x-auto"
style="border-top-left-radius: 0px; border-top-right-radius: 0px; {(executing ||
stdout ||
stderr ||
result) &&
'border-bottom-left-radius: 0px; border-bottom-right-radius: 0px;'}"><code
class="language-{lang} rounded-t-none whitespace-pre">{@html highlightedCode || code}</code
></pre>
<div
id="plt-canvas-{id}"
class="bg-[#202123] text-white max-w-full overflow-x-auto scrollbar-hidden"
/>
{#if executing}
<div class="bg-[#202123] text-white px-4 py-4 rounded-b-lg">
<div class=" text-gray-500 text-xs mb-1">STDOUT/STDERR</div>
<div class="text-sm">Running...</div>
</div>
{:else if stdout || stderr || result}
<div class="bg-[#202123] text-white px-4 py-4 rounded-b-lg">
<div class=" text-gray-500 text-xs mb-1">STDOUT/STDERR</div>
<div class="text-sm">{stdout || stderr || result}</div>
</div>
{/if}
</div>

View File

@ -13,8 +13,6 @@
export let parentMessage; export let parentMessage;
export let selectedModelfiles;
export let updateChatMessages: Function; export let updateChatMessages: Function;
export let confirmEditResponseMessage: Function; export let confirmEditResponseMessage: Function;
export let rateMessage: Function; export let rateMessage: Function;
@ -130,7 +128,6 @@
> >
<ResponseMessage <ResponseMessage
message={groupedMessages[model].messages[groupedMessagesIdx[model]]} message={groupedMessages[model].messages[groupedMessagesIdx[model]]}
modelfiles={selectedModelfiles}
siblings={groupedMessages[model].messages.map((m) => m.id)} siblings={groupedMessages[model].messages.map((m) => m.id)}
isLastMessage={true} isLastMessage={true}
{updateChatMessages} {updateChatMessages}

View File

@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import { WEBUI_BASE_URL } from '$lib/constants'; import { WEBUI_BASE_URL } from '$lib/constants';
import { user } from '$lib/stores'; import { config, user, models as _models } from '$lib/stores';
import { onMount, getContext } from 'svelte'; import { onMount, getContext } from 'svelte';
import { blur, fade } from 'svelte/transition'; import { blur, fade } from 'svelte/transition';
@ -9,23 +9,20 @@
const i18n = getContext('i18n'); const i18n = getContext('i18n');
export let modelIds = [];
export let models = []; export let models = [];
export let modelfiles = [];
export let submitPrompt; export let submitPrompt;
export let suggestionPrompts;
let mounted = false; let mounted = false;
let modelfile = null;
let selectedModelIdx = 0; let selectedModelIdx = 0;
$: modelfile = $: if (modelIds.length > 0) {
models[selectedModelIdx] in modelfiles ? modelfiles[models[selectedModelIdx]] : null;
$: if (models.length > 0) {
selectedModelIdx = models.length - 1; selectedModelIdx = models.length - 1;
} }
$: models = modelIds.map((id) => $_models.find((m) => m.id === id));
onMount(() => { onMount(() => {
mounted = true; mounted = true;
}); });
@ -41,25 +38,14 @@
selectedModelIdx = modelIdx; selectedModelIdx = modelIdx;
}} }}
> >
{#if model in modelfiles} <img
<img crossorigin="anonymous"
crossorigin="anonymous" src={model?.info?.meta?.profile_image_url ??
src={modelfiles[model]?.imageUrl ?? `${WEBUI_BASE_URL}/static/favicon.png`} ($i18n.language === 'dg-DG' ? `/doge.png` : `${WEBUI_BASE_URL}/static/favicon.png`)}
alt="modelfile" class=" size-[2.7rem] rounded-full border-[1px] border-gray-200 dark:border-none"
class=" size-[2.7rem] rounded-full border-[1px] border-gray-200 dark:border-none" alt="logo"
draggable="false" draggable="false"
/> />
{:else}
<img
crossorigin="anonymous"
src={$i18n.language === 'dg-DG'
? `/doge.png`
: `${WEBUI_BASE_URL}/static/favicon.png`}
class=" size-[2.7rem] rounded-full border-[1px] border-gray-200 dark:border-none"
alt="logo"
draggable="false"
/>
{/if}
</button> </button>
{/each} {/each}
</div> </div>
@ -70,23 +56,32 @@
> >
<div> <div>
<div class=" capitalize line-clamp-1" in:fade={{ duration: 200 }}> <div class=" capitalize line-clamp-1" in:fade={{ duration: 200 }}>
{#if modelfile} {#if models[selectedModelIdx]?.info}
{modelfile.title} {models[selectedModelIdx]?.info?.name}
{:else} {:else}
{$i18n.t('Hello, {{name}}', { name: $user.name })} {$i18n.t('Hello, {{name}}', { name: $user.name })}
{/if} {/if}
</div> </div>
<div in:fade={{ duration: 200, delay: 200 }}> <div in:fade={{ duration: 200, delay: 200 }}>
{#if modelfile} {#if models[selectedModelIdx]?.info}
<div class="mt-0.5 text-base font-normal text-gray-500 dark:text-gray-400"> <div class="mt-0.5 text-base font-normal text-gray-500 dark:text-gray-400 line-clamp-3">
{modelfile.desc} {models[selectedModelIdx]?.info?.meta?.description}
</div> </div>
{#if modelfile.user} {#if models[selectedModelIdx]?.info?.meta?.user}
<div class="mt-0.5 text-sm font-normal text-gray-400 dark:text-gray-500"> <div class="mt-0.5 text-sm font-normal text-gray-400 dark:text-gray-500">
By <a href="https://openwebui.com/m/{modelfile.user.username}" By
>{modelfile.user.name ? modelfile.user.name : `@${modelfile.user.username}`}</a {#if models[selectedModelIdx]?.info?.meta?.user.community}
> <a
href="https://openwebui.com/m/{models[selectedModelIdx]?.info?.meta?.user
.username}"
>{models[selectedModelIdx]?.info?.meta?.user.name
? models[selectedModelIdx]?.info?.meta?.user.name
: `@${models[selectedModelIdx]?.info?.meta?.user.username}`}</a
>
{:else}
{models[selectedModelIdx]?.info?.meta?.user.name}
{/if}
</div> </div>
{/if} {/if}
{:else} {:else}
@ -99,7 +94,11 @@
</div> </div>
<div class=" w-full" in:fade={{ duration: 200, delay: 300 }}> <div class=" w-full" in:fade={{ duration: 200, delay: 300 }}>
<Suggestions {suggestionPrompts} {submitPrompt} /> <Suggestions
suggestionPrompts={models[selectedModelIdx]?.info?.meta?.suggestion_prompts ??
$config.default_prompt_suggestions}
{submitPrompt}
/>
</div> </div>
</div> </div>
{/key} {/key}

View File

@ -14,7 +14,7 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
import { config, settings } from '$lib/stores'; import { config, models, settings } from '$lib/stores';
import { synthesizeOpenAISpeech } from '$lib/apis/audio'; import { synthesizeOpenAISpeech } from '$lib/apis/audio';
import { imageGenerations } from '$lib/apis/images'; import { imageGenerations } from '$lib/apis/images';
import { import {
@ -34,7 +34,6 @@
import RateComment from './RateComment.svelte'; import RateComment from './RateComment.svelte';
import CitationsModal from '$lib/components/chat/Messages/CitationsModal.svelte'; import CitationsModal from '$lib/components/chat/Messages/CitationsModal.svelte';
export let modelfiles = [];
export let message; export let message;
export let siblings; export let siblings;
@ -52,6 +51,9 @@
export let continueGeneration: Function; export let continueGeneration: Function;
export let regenerateResponse: Function; export let regenerateResponse: Function;
let model = null;
$: model = $models.find((m) => m.id === message.model);
let edit = false; let edit = false;
let editedContent = ''; let editedContent = '';
let editTextAreaElement: HTMLTextAreaElement; let editTextAreaElement: HTMLTextAreaElement;
@ -78,6 +80,13 @@
return `<code>${code.replaceAll('&amp;', '&')}</code>`; return `<code>${code.replaceAll('&amp;', '&')}</code>`;
}; };
// Open all links in a new tab/window (from https://github.com/markedjs/marked/issues/655#issuecomment-383226346)
const origLinkRenderer = renderer.link;
renderer.link = (href, title, text) => {
const html = origLinkRenderer.call(renderer, href, title, text);
return html.replace(/^<a /, '<a target="_blank" rel="nofollow" ');
};
const { extensions, ...defaults } = marked.getDefaults() as marked.MarkedOptions & { const { extensions, ...defaults } = marked.getDefaults() as marked.MarkedOptions & {
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
extensions: any; extensions: any;
@ -338,17 +347,13 @@
dir={$settings.chatDirection} dir={$settings.chatDirection}
> >
<ProfileImage <ProfileImage
src={modelfiles[message.model]?.imageUrl ?? src={model?.info?.meta?.profile_image_url ??
($i18n.language === 'dg-DG' ? `/doge.png` : `${WEBUI_BASE_URL}/static/favicon.png`)} ($i18n.language === 'dg-DG' ? `/doge.png` : `${WEBUI_BASE_URL}/static/favicon.png`)}
/> />
<div class="w-full overflow-hidden pl-1"> <div class="w-full overflow-hidden pl-1">
<Name> <Name>
{#if message.model in modelfiles} {model?.name ?? message.model}
{modelfiles[message.model]?.title}
{:else}
{message.model ? ` ${message.model}` : ''}
{/if}
{#if message.timestamp} {#if message.timestamp}
<span <span
@ -442,8 +447,8 @@
{#if token.type === 'code'} {#if token.type === 'code'}
<CodeBlock <CodeBlock
id={`${message.id}-${tokenIdx}`} id={`${message.id}-${tokenIdx}`}
lang={token.lang} lang={token?.lang ?? ''}
code={revertSanitizedResponseContent(token.text)} code={revertSanitizedResponseContent(token?.text ?? '')}
/> />
{:else} {:else}
{@html marked.parse(token.raw, { {@html marked.parse(token.raw, {
@ -688,7 +693,7 @@
</button> </button>
</Tooltip> </Tooltip>
{#if $config.images && !readOnly} {#if $config.enable_image_generation && !readOnly}
<Tooltip content="Generate Image" placement="bottom"> <Tooltip content="Generate Image" placement="bottom">
<button <button
class="{isLastMessage class="{isLastMessage

View File

@ -4,7 +4,7 @@
import { tick, createEventDispatcher, getContext } from 'svelte'; import { tick, createEventDispatcher, getContext } from 'svelte';
import Name from './Name.svelte'; import Name from './Name.svelte';
import ProfileImage from './ProfileImage.svelte'; import ProfileImage from './ProfileImage.svelte';
import { modelfiles, settings } from '$lib/stores'; import { models, settings } from '$lib/stores';
import Tooltip from '$lib/components/common/Tooltip.svelte'; import Tooltip from '$lib/components/common/Tooltip.svelte';
import { user as _user } from '$lib/stores'; import { user as _user } from '$lib/stores';
@ -60,8 +60,7 @@
{#if !($settings?.chatBubble ?? true)} {#if !($settings?.chatBubble ?? true)}
<ProfileImage <ProfileImage
src={message.user src={message.user
? $modelfiles.find((modelfile) => modelfile.tagName === message.user)?.imageUrl ?? ? $models.find((m) => m.id === message.user)?.info?.meta?.profile_image_url ?? '/user.png'
'/user.png'
: user?.profile_image_url ?? '/user.png'} : user?.profile_image_url ?? '/user.png'}
/> />
{/if} {/if}
@ -70,12 +69,8 @@
<div> <div>
<Name> <Name>
{#if message.user} {#if message.user}
{#if $modelfiles.map((modelfile) => modelfile.tagName).includes(message.user)} {$i18n.t('You')}
{$modelfiles.find((modelfile) => modelfile.tagName === message.user)?.title} <span class=" text-gray-500 text-sm font-medium">{message?.user ?? ''}</span>
{:else}
{$i18n.t('You')}
<span class=" text-gray-500 text-sm font-medium">{message?.user ?? ''}</span>
{/if}
{:else if $settings.showUsername || $_user.name !== user.name} {:else if $settings.showUsername || $_user.name !== user.name}
{user.name} {user.name}
{:else} {:else}

View File

@ -45,13 +45,11 @@
<div class="mr-1 max-w-full"> <div class="mr-1 max-w-full">
<Selector <Selector
placeholder={$i18n.t('Select a model')} placeholder={$i18n.t('Select a model')}
items={$models items={$models.map((model) => ({
.filter((model) => model.name !== 'hr') value: model.id,
.map((model) => ({ label: model.name,
value: model.id, model: model
label: model.name, }))}
info: model
}))}
bind:value={selectedModel} bind:value={selectedModel}
/> />
</div> </div>

View File

@ -12,7 +12,9 @@
import { user, MODEL_DOWNLOAD_POOL, models, mobile } from '$lib/stores'; import { user, MODEL_DOWNLOAD_POOL, models, mobile } from '$lib/stores';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import { capitalizeFirstLetter, getModels, splitStream } from '$lib/utils'; import { capitalizeFirstLetter, sanitizeResponseContent, splitStream } from '$lib/utils';
import { getModels } from '$lib/apis';
import Tooltip from '$lib/components/common/Tooltip.svelte'; import Tooltip from '$lib/components/common/Tooltip.svelte';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
@ -23,7 +25,12 @@
export let searchEnabled = true; export let searchEnabled = true;
export let searchPlaceholder = $i18n.t('Search a model'); export let searchPlaceholder = $i18n.t('Search a model');
export let items = [{ value: 'mango', label: 'Mango' }]; export let items: {
label: string;
value: string;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
[key: string]: any;
} = [];
export let className = 'w-[30rem]'; export let className = 'w-[30rem]';
@ -239,19 +246,37 @@
}} }}
> >
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<div class="line-clamp-1"> <div class="flex items-center">
{item.label} <div class="line-clamp-1">
{item.label}
<span class=" text-xs font-medium text-gray-600 dark:text-gray-400" </div>
>{item.info?.details?.parameter_size ?? ''}</span {#if item.model.owned_by === 'ollama' && (item.model.ollama?.details?.parameter_size ?? '') !== ''}
> <div class="flex ml-1 items-center">
<Tooltip
content={`${
item.model.ollama?.details?.quantization_level
? item.model.ollama?.details?.quantization_level + ' '
: ''
}${
item.model.ollama?.size
? `(${(item.model.ollama?.size / 1024 ** 3).toFixed(1)}GB)`
: ''
}`}
className="self-end"
>
<span class=" text-xs font-medium text-gray-600 dark:text-gray-400"
>{item.model.ollama?.details?.parameter_size ?? ''}</span
>
</Tooltip>
</div>
{/if}
</div> </div>
<!-- {JSON.stringify(item.info)} --> <!-- {JSON.stringify(item.info)} -->
{#if item.info.external} {#if item.model.owned_by === 'openai'}
<Tooltip content={item.info?.source ?? 'External'}> <Tooltip content={`${'External'}`}>
<div class=" mr-2"> <div class="">
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16" viewBox="0 0 16 16"
@ -271,15 +296,15 @@
</svg> </svg>
</div> </div>
</Tooltip> </Tooltip>
{:else} {/if}
{#if item.model?.info?.meta?.description}
<Tooltip <Tooltip
content={`${ content={`${sanitizeResponseContent(
item.info?.details?.quantization_level item.model?.info?.meta?.description
? item.info?.details?.quantization_level + ' ' ).replaceAll('\n', '<br>')}`}
: ''
}${item.info.size ? `(${(item.info.size / 1024 ** 3).toFixed(1)}GB)` : ''}`}
> >
<div class=" mr-2"> <div class="">
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
fill="none" fill="none"

View File

@ -1,155 +0,0 @@
<script lang="ts">
import { createEventDispatcher, onMount, getContext } from 'svelte';
import AdvancedParams from './Advanced/AdvancedParams.svelte';
const i18n = getContext('i18n');
const dispatch = createEventDispatcher();
export let saveSettings: Function;
// Advanced
let requestFormat = '';
let keepAlive = null;
let options = {
// Advanced
seed: 0,
temperature: '',
repeat_penalty: '',
repeat_last_n: '',
mirostat: '',
mirostat_eta: '',
mirostat_tau: '',
top_k: '',
top_p: '',
stop: '',
tfs_z: '',
num_ctx: '',
num_predict: ''
};
const toggleRequestFormat = async () => {
if (requestFormat === '') {
requestFormat = 'json';
} else {
requestFormat = '';
}
saveSettings({ requestFormat: requestFormat !== '' ? requestFormat : undefined });
};
onMount(() => {
let settings = JSON.parse(localStorage.getItem('settings') ?? '{}');
requestFormat = settings.requestFormat ?? '';
keepAlive = settings.keepAlive ?? null;
options.seed = settings.seed ?? 0;
options.temperature = settings.temperature ?? '';
options.repeat_penalty = settings.repeat_penalty ?? '';
options.top_k = settings.top_k ?? '';
options.top_p = settings.top_p ?? '';
options.num_ctx = settings.num_ctx ?? '';
options = { ...options, ...settings.options };
options.stop = (settings?.options?.stop ?? []).join(',');
});
</script>
<div class="flex flex-col h-full justify-between text-sm">
<div class=" space-y-3 pr-1.5 overflow-y-scroll max-h-80">
<div class=" text-sm font-medium">{$i18n.t('Parameters')}</div>
<AdvancedParams bind:options />
<hr class=" dark:border-gray-700" />
<div class=" py-1 w-full justify-between">
<div class="flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Keep Alive')}</div>
<button
class="p-1 px-3 text-xs flex rounded transition"
type="button"
on:click={() => {
keepAlive = keepAlive === null ? '5m' : null;
}}
>
{#if keepAlive === 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 keepAlive !== null}
<div class="flex mt-1 space-x-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
type="text"
placeholder={$i18n.t("e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.")}
bind:value={keepAlive}
/>
</div>
{/if}
</div>
<div>
<div class=" py-1 flex w-full justify-between">
<div class=" self-center text-sm font-medium">{$i18n.t('Request Mode')}</div>
<button
class="p-1 px-3 text-xs flex rounded transition"
on:click={() => {
toggleRequestFormat();
}}
>
{#if requestFormat === ''}
<span class="ml-2 self-center"> {$i18n.t('Default')} </span>
{:else if requestFormat === 'json'}
<!-- <svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="w-4 h-4 self-center"
>
<path
d="M10 2a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 0110 2zM10 15a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 0110 15zM10 7a3 3 0 100 6 3 3 0 000-6zM15.657 5.404a.75.75 0 10-1.06-1.06l-1.061 1.06a.75.75 0 001.06 1.06l1.06-1.06zM6.464 14.596a.75.75 0 10-1.06-1.06l-1.06 1.06a.75.75 0 001.06 1.06l1.06-1.06zM18 10a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0118 10zM5 10a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 015 10zM14.596 15.657a.75.75 0 001.06-1.06l-1.06-1.061a.75.75 0 10-1.06 1.06l1.06 1.06zM5.404 6.464a.75.75 0 001.06-1.06l-1.06-1.06a.75.75 0 10-1.061 1.06l1.06 1.06z"
/>
</svg> -->
<span class="ml-2 self-center">{$i18n.t('JSON')}</span>
{/if}
</button>
</div>
</div>
</div>
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class=" px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-lg"
on:click={() => {
saveSettings({
options: {
seed: (options.seed !== 0 ? options.seed : undefined) ?? undefined,
stop: options.stop !== '' ? options.stop.split(',').filter((e) => e) : undefined,
temperature: options.temperature !== '' ? options.temperature : undefined,
repeat_penalty: options.repeat_penalty !== '' ? options.repeat_penalty : undefined,
repeat_last_n: options.repeat_last_n !== '' ? options.repeat_last_n : undefined,
mirostat: options.mirostat !== '' ? options.mirostat : undefined,
mirostat_eta: options.mirostat_eta !== '' ? options.mirostat_eta : undefined,
mirostat_tau: options.mirostat_tau !== '' ? options.mirostat_tau : undefined,
top_k: options.top_k !== '' ? options.top_k : undefined,
top_p: options.top_p !== '' ? options.top_p : undefined,
tfs_z: options.tfs_z !== '' ? options.tfs_z : undefined,
num_ctx: options.num_ctx !== '' ? options.num_ctx : undefined,
num_predict: options.num_predict !== '' ? options.num_predict : undefined
},
keepAlive: keepAlive ? (isNaN(keepAlive) ? keepAlive : parseInt(keepAlive)) : undefined
});
dispatch('save');
}}
>
{$i18n.t('Save')}
</button>
</div>
</div>

View File

@ -1,14 +1,16 @@
<script lang="ts"> <script lang="ts">
import { getContext } from 'svelte'; import { getContext, createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
const i18n = getContext('i18n'); const i18n = getContext('i18n');
export let options = { export let params = {
// Advanced // Advanced
seed: 0, seed: 0,
stop: '', stop: null,
temperature: '', temperature: '',
repeat_penalty: '', frequency_penalty: '',
repeat_last_n: '', repeat_last_n: '',
mirostat: '', mirostat: '',
mirostat_eta: '', mirostat_eta: '',
@ -17,40 +19,86 @@
top_p: '', top_p: '',
tfs_z: '', tfs_z: '',
num_ctx: '', num_ctx: '',
num_predict: '' max_tokens: '',
template: null
}; };
let customFieldName = '';
let customFieldValue = '';
$: if (params) {
dispatch('change', params);
}
</script> </script>
<div class=" space-y-3 text-xs"> <div class=" space-y-1 text-xs">
<div> <div class=" py-0.5 w-full justify-between">
<div class=" py-0.5 flex w-full justify-between"> <div class="flex w-full justify-between">
<div class=" w-20 text-xs font-medium self-center">{$i18n.t('Seed')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('Seed')}</div>
<div class=" flex-1 self-center">
<input <button
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none" class="p-1 px-3 text-xs flex rounded transition"
type="number" type="button"
placeholder="Enter Seed" on:click={() => {
bind:value={options.seed} params.seed = (params?.seed ?? null) === null ? 0 : null;
autocomplete="off" }}
min="0" >
/> {#if (params?.seed ?? null) === null}
</div> <span class="ml-2 self-center"> {$i18n.t('Default')} </span>
{:else}
<span class="ml-2 self-center"> {$i18n.t('Custom')} </span>
{/if}
</button>
</div> </div>
{#if (params?.seed ?? null) !== null}
<div class="flex mt-0.5 space-x-2">
<div class=" flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
type="number"
placeholder="Enter Seed"
bind:value={params.seed}
autocomplete="off"
min="0"
/>
</div>
</div>
{/if}
</div> </div>
<div> <div class=" py-0.5 w-full justify-between">
<div class=" py-0.5 flex w-full justify-between"> <div class="flex w-full justify-between">
<div class=" w-20 text-xs font-medium self-center">{$i18n.t('Stop Sequence')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('Stop Sequence')}</div>
<div class=" flex-1 self-center">
<input <button
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none" class="p-1 px-3 text-xs flex rounded transition"
type="text" type="button"
placeholder={$i18n.t('Enter stop sequence')} on:click={() => {
bind:value={options.stop} params.stop = (params?.stop ?? null) === null ? '' : null;
autocomplete="off" }}
/> >
</div> {#if (params?.stop ?? 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> </div>
{#if (params?.stop ?? null) !== null}
<div class="flex mt-0.5 space-x-2">
<div class=" flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
type="text"
placeholder={$i18n.t('Enter stop sequence')}
bind:value={params.stop}
autocomplete="off"
/>
</div>
</div>
{/if}
</div> </div>
<div class=" py-0.5 w-full justify-between"> <div class=" py-0.5 w-full justify-between">
@ -61,10 +109,10 @@
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.temperature = options.temperature === '' ? 0.8 : ''; params.temperature = (params?.temperature ?? '') === '' ? 0.8 : '';
}} }}
> >
{#if options.temperature === ''} {#if (params?.temperature ?? '') === ''}
<span class="ml-2 self-center"> {$i18n.t('Default')} </span> <span class="ml-2 self-center"> {$i18n.t('Default')} </span>
{:else} {:else}
<span class="ml-2 self-center"> {$i18n.t('Custom')} </span> <span class="ml-2 self-center"> {$i18n.t('Custom')} </span>
@ -72,7 +120,7 @@
</button> </button>
</div> </div>
{#if options.temperature !== ''} {#if (params?.temperature ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -81,13 +129,13 @@
min="0" min="0"
max="1" max="1"
step="0.05" step="0.05"
bind:value={options.temperature} bind:value={params.temperature}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div> <div>
<input <input
bind:value={options.temperature} bind:value={params.temperature}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="0" min="0"
@ -107,18 +155,18 @@
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.mirostat = options.mirostat === '' ? 0 : ''; params.mirostat = (params?.mirostat ?? '') === '' ? 0 : '';
}} }}
> >
{#if options.mirostat === ''} {#if (params?.mirostat ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if} {/if}
</button> </button>
</div> </div>
{#if options.mirostat !== ''} {#if (params?.mirostat ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -127,13 +175,13 @@
min="0" min="0"
max="2" max="2"
step="1" step="1"
bind:value={options.mirostat} bind:value={params.mirostat}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div> <div>
<input <input
bind:value={options.mirostat} bind:value={params.mirostat}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="0" min="0"
@ -153,18 +201,18 @@
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.mirostat_eta = options.mirostat_eta === '' ? 0.1 : ''; params.mirostat_eta = (params?.mirostat_eta ?? '') === '' ? 0.1 : '';
}} }}
> >
{#if options.mirostat_eta === ''} {#if (params?.mirostat_eta ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if} {/if}
</button> </button>
</div> </div>
{#if options.mirostat_eta !== ''} {#if (params?.mirostat_eta ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -173,13 +221,13 @@
min="0" min="0"
max="1" max="1"
step="0.05" step="0.05"
bind:value={options.mirostat_eta} bind:value={params.mirostat_eta}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div> <div>
<input <input
bind:value={options.mirostat_eta} bind:value={params.mirostat_eta}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="0" min="0"
@ -199,10 +247,10 @@
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.mirostat_tau = options.mirostat_tau === '' ? 5.0 : ''; params.mirostat_tau = (params?.mirostat_tau ?? '') === '' ? 5.0 : '';
}} }}
> >
{#if options.mirostat_tau === ''} {#if (params?.mirostat_tau ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Custom')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
@ -210,7 +258,7 @@
</button> </button>
</div> </div>
{#if options.mirostat_tau !== ''} {#if (params?.mirostat_tau ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -219,13 +267,13 @@
min="0" min="0"
max="10" max="10"
step="0.5" step="0.5"
bind:value={options.mirostat_tau} bind:value={params.mirostat_tau}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div> <div>
<input <input
bind:value={options.mirostat_tau} bind:value={params.mirostat_tau}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="0" min="0"
@ -245,18 +293,18 @@
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.top_k = options.top_k === '' ? 40 : ''; params.top_k = (params?.top_k ?? '') === '' ? 40 : '';
}} }}
> >
{#if options.top_k === ''} {#if (params?.top_k ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if} {/if}
</button> </button>
</div> </div>
{#if options.top_k !== ''} {#if (params?.top_k ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -265,13 +313,13 @@
min="0" min="0"
max="100" max="100"
step="0.5" step="0.5"
bind:value={options.top_k} bind:value={params.top_k}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div> <div>
<input <input
bind:value={options.top_k} bind:value={params.top_k}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="0" min="0"
@ -291,18 +339,18 @@
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.top_p = options.top_p === '' ? 0.9 : ''; params.top_p = (params?.top_p ?? '') === '' ? 0.9 : '';
}} }}
> >
{#if options.top_p === ''} {#if (params?.top_p ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if} {/if}
</button> </button>
</div> </div>
{#if options.top_p !== ''} {#if (params?.top_p ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -311,13 +359,13 @@
min="0" min="0"
max="1" max="1"
step="0.05" step="0.05"
bind:value={options.top_p} bind:value={params.top_p}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div> <div>
<input <input
bind:value={options.top_p} bind:value={params.top_p}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="0" min="0"
@ -331,24 +379,24 @@
<div class=" py-0.5 w-full justify-between"> <div class=" py-0.5 w-full justify-between">
<div class="flex w-full justify-between"> <div class="flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Repeat Penalty')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('Frequencey Penalty')}</div>
<button <button
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.repeat_penalty = options.repeat_penalty === '' ? 1.1 : ''; params.frequency_penalty = (params?.frequency_penalty ?? '') === '' ? 1.1 : '';
}} }}
> >
{#if options.repeat_penalty === ''} {#if (params?.frequency_penalty ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if} {/if}
</button> </button>
</div> </div>
{#if options.repeat_penalty !== ''} {#if (params?.frequency_penalty ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -357,13 +405,13 @@
min="0" min="0"
max="2" max="2"
step="0.05" step="0.05"
bind:value={options.repeat_penalty} bind:value={params.frequency_penalty}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div> <div>
<input <input
bind:value={options.repeat_penalty} bind:value={params.frequency_penalty}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="0" min="0"
@ -383,18 +431,18 @@
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.repeat_last_n = options.repeat_last_n === '' ? 64 : ''; params.repeat_last_n = (params?.repeat_last_n ?? '') === '' ? 64 : '';
}} }}
> >
{#if options.repeat_last_n === ''} {#if (params?.repeat_last_n ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if} {/if}
</button> </button>
</div> </div>
{#if options.repeat_last_n !== ''} {#if (params?.repeat_last_n ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -403,13 +451,13 @@
min="-1" min="-1"
max="128" max="128"
step="1" step="1"
bind:value={options.repeat_last_n} bind:value={params.repeat_last_n}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div> <div>
<input <input
bind:value={options.repeat_last_n} bind:value={params.repeat_last_n}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="-1" min="-1"
@ -429,18 +477,18 @@
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.tfs_z = options.tfs_z === '' ? 1 : ''; params.tfs_z = (params?.tfs_z ?? '') === '' ? 1 : '';
}} }}
> >
{#if options.tfs_z === ''} {#if (params?.tfs_z ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if} {/if}
</button> </button>
</div> </div>
{#if options.tfs_z !== ''} {#if (params?.tfs_z ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -449,13 +497,13 @@
min="0" min="0"
max="2" max="2"
step="0.05" step="0.05"
bind:value={options.tfs_z} bind:value={params.tfs_z}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div> <div>
<input <input
bind:value={options.tfs_z} bind:value={params.tfs_z}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="0" min="0"
@ -475,18 +523,18 @@
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.num_ctx = options.num_ctx === '' ? 2048 : ''; params.num_ctx = (params?.num_ctx ?? '') === '' ? 2048 : '';
}} }}
> >
{#if options.num_ctx === ''} {#if (params?.num_ctx ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if} {/if}
</button> </button>
</div> </div>
{#if options.num_ctx !== ''} {#if (params?.num_ctx ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -495,13 +543,13 @@
min="-1" min="-1"
max="10240000" max="10240000"
step="1" step="1"
bind:value={options.num_ctx} bind:value={params.num_ctx}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div class=""> <div class="">
<input <input
bind:value={options.num_ctx} bind:value={params.num_ctx}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="-1" min="-1"
@ -513,24 +561,24 @@
</div> </div>
<div class=" py-0.5 w-full justify-between"> <div class=" py-0.5 w-full justify-between">
<div class="flex w-full justify-between"> <div class="flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Max Tokens')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('Max Tokens (num_predict)')}</div>
<button <button
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
type="button" type="button"
on:click={() => { on:click={() => {
options.num_predict = options.num_predict === '' ? 128 : ''; params.max_tokens = (params?.max_tokens ?? '') === '' ? 128 : '';
}} }}
> >
{#if options.num_predict === ''} {#if (params?.max_tokens ?? '') === ''}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Default')}</span> <span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if} {/if}
</button> </button>
</div> </div>
{#if options.num_predict !== ''} {#if (params?.max_tokens ?? '') !== ''}
<div class="flex mt-0.5 space-x-2"> <div class="flex mt-0.5 space-x-2">
<div class=" flex-1"> <div class=" flex-1">
<input <input
@ -539,13 +587,13 @@
min="-2" min="-2"
max="16000" max="16000"
step="1" step="1"
bind:value={options.num_predict} bind:value={params.max_tokens}
class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700" class="w-full h-2 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"
/> />
</div> </div>
<div class=""> <div class="">
<input <input
bind:value={options.num_predict} bind:value={params.max_tokens}
type="number" type="number"
class=" bg-transparent text-center w-14" class=" bg-transparent text-center w-14"
min="-2" min="-2"
@ -556,4 +604,36 @@
</div> </div>
{/if} {/if}
</div> </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('Template')}</div>
<button
class="p-1 px-3 text-xs flex rounded transition"
type="button"
on:click={() => {
params.template = (params?.template ?? null) === null ? '' : null;
}}
>
{#if (params?.template ?? 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?.template ?? null) !== null}
<div class="flex mt-0.5 space-x-2">
<div class=" flex-1">
<textarea
class="px-3 py-1.5 text-sm w-full bg-transparent border dark:border-gray-600 outline-none rounded-lg -mb-1"
placeholder="Write your model template content here"
rows="4"
bind:value={params.template}
/>
</div>
</div>
{/if}
</div>
</div> </div>

View File

@ -5,6 +5,7 @@
import { chats, user, config } from '$lib/stores'; import { chats, user, config } from '$lib/stores';
import { import {
archiveAllChats,
createNewChat, createNewChat,
deleteAllChats, deleteAllChats,
getAllChats, getAllChats,
@ -22,7 +23,10 @@
// Chats // Chats
let saveChatHistory = true; let saveChatHistory = true;
let importFiles; let importFiles;
let showArchiveConfirm = false;
let showDeleteConfirm = false; let showDeleteConfirm = false;
let chatImportInputElement: HTMLInputElement; let chatImportInputElement: HTMLInputElement;
$: if (importFiles) { $: if (importFiles) {
@ -68,14 +72,15 @@
saveAs(blob, `chat-export-${Date.now()}.json`); saveAs(blob, `chat-export-${Date.now()}.json`);
}; };
const exportAllUserChats = async () => { const archiveAllChatsHandler = async () => {
let blob = new Blob([JSON.stringify(await getAllUserChats(localStorage.token))], { await goto('/');
type: 'application/json' await archiveAllChats(localStorage.token).catch((error) => {
toast.error(error);
}); });
saveAs(blob, `all-chats-export-${Date.now()}.json`); await chats.set(await getChatList(localStorage.token));
}; };
const deleteChats = async () => { const deleteAllChatsHandler = async () => {
await goto('/'); await goto('/');
await deleteAllChats(localStorage.token).catch((error) => { await deleteAllChats(localStorage.token).catch((error) => {
toast.error(error); toast.error(error);
@ -217,118 +222,177 @@
<hr class=" dark:border-gray-700" /> <hr class=" dark:border-gray-700" />
{#if showDeleteConfirm} <div class="flex flex-col">
<div class="flex justify-between rounded-md items-center py-2 px-3.5 w-full transition"> {#if showArchiveConfirm}
<div class="flex items-center space-x-3"> <div class="flex justify-between rounded-md items-center py-2 px-3.5 w-full transition">
<svg <div class="flex items-center space-x-3">
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path d="M2 3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3Z" />
<path
fill-rule="evenodd"
d="M13 6H3v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6ZM5.72 7.47a.75.75 0 0 1 1.06 0L8 8.69l1.22-1.22a.75.75 0 1 1 1.06 1.06L9.06 9.75l1.22 1.22a.75.75 0 1 1-1.06 1.06L8 10.81l-1.22 1.22a.75.75 0 0 1-1.06-1.06l1.22-1.22-1.22-1.22a.75.75 0 0 1 0-1.06Z"
clip-rule="evenodd"
/>
</svg>
<span>{$i18n.t('Are you sure?')}</span>
</div>
<div class="flex space-x-1.5 items-center">
<button
class="hover:text-white transition"
on:click={() => {
deleteChats();
showDeleteConfirm = false;
}}
>
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20" viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path d="M2 3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3Z" />
<path
fill-rule="evenodd"
d="M13 6H3v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6ZM5.72 7.47a.75.75 0 0 1 1.06 0L8 8.69l1.22-1.22a.75.75 0 1 1 1.06 1.06L9.06 9.75l1.22 1.22a.75.75 0 1 1-1.06 1.06L8 10.81l-1.22 1.22a.75.75 0 0 1-1.06-1.06l1.22-1.22-1.22-1.22a.75.75 0 0 1 0-1.06Z"
clip-rule="evenodd"
/>
</svg>
<span>{$i18n.t('Are you sure?')}</span>
</div>
<div class="flex space-x-1.5 items-center">
<button
class="hover:text-white transition"
on:click={() => {
archiveAllChatsHandler();
showArchiveConfirm = false;
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="w-4 h-4"
>
<path
fill-rule="evenodd"
d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
clip-rule="evenodd"
/>
</svg>
</button>
<button
class="hover:text-white transition"
on:click={() => {
showArchiveConfirm = false;
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="w-4 h-4"
>
<path
d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
/>
</svg>
</button>
</div>
</div>
{:else}
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
on:click={() => {
showArchiveConfirm = true;
}}
>
<div class=" self-center mr-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="currentColor"
class="size-4"
>
<path
d="M3.375 3C2.339 3 1.5 3.84 1.5 4.875v.75c0 1.036.84 1.875 1.875 1.875h17.25c1.035 0 1.875-.84 1.875-1.875v-.75C22.5 3.839 21.66 3 20.625 3H3.375Z"
/>
<path
fill-rule="evenodd"
d="m3.087 9 .54 9.176A3 3 0 0 0 6.62 21h10.757a3 3 0 0 0 2.995-2.824L20.913 9H3.087Zm6.163 3.75A.75.75 0 0 1 10 12h4a.75.75 0 0 1 0 1.5h-4a.75.75 0 0 1-.75-.75Z"
clip-rule="evenodd"
/>
</svg>
</div>
<div class=" self-center text-sm font-medium">{$i18n.t('Archive All Chats')}</div>
</button>
{/if}
{#if showDeleteConfirm}
<div class="flex justify-between rounded-md items-center py-2 px-3.5 w-full transition">
<div class="flex items-center space-x-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path d="M2 3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3Z" />
<path
fill-rule="evenodd"
d="M13 6H3v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6ZM5.72 7.47a.75.75 0 0 1 1.06 0L8 8.69l1.22-1.22a.75.75 0 1 1 1.06 1.06L9.06 9.75l1.22 1.22a.75.75 0 1 1-1.06 1.06L8 10.81l-1.22 1.22a.75.75 0 0 1-1.06-1.06l1.22-1.22-1.22-1.22a.75.75 0 0 1 0-1.06Z"
clip-rule="evenodd"
/>
</svg>
<span>{$i18n.t('Are you sure?')}</span>
</div>
<div class="flex space-x-1.5 items-center">
<button
class="hover:text-white transition"
on:click={() => {
deleteAllChatsHandler();
showDeleteConfirm = false;
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="w-4 h-4"
>
<path
fill-rule="evenodd"
d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
clip-rule="evenodd"
/>
</svg>
</button>
<button
class="hover:text-white transition"
on:click={() => {
showDeleteConfirm = false;
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="w-4 h-4"
>
<path
d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
/>
</svg>
</button>
</div>
</div>
{:else}
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
on:click={() => {
showDeleteConfirm = true;
}}
>
<div class=" self-center mr-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor" fill="currentColor"
class="w-4 h-4" class="w-4 h-4"
> >
<path <path
fill-rule="evenodd" fill-rule="evenodd"
d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z" d="M4 2a1.5 1.5 0 0 0-1.5 1.5v9A1.5 1.5 0 0 0 4 14h8a1.5 1.5 0 0 0 1.5-1.5V6.621a1.5 1.5 0 0 0-.44-1.06L9.94 2.439A1.5 1.5 0 0 0 8.878 2H4Zm7 7a.75.75 0 0 1-.75.75h-4.5a.75.75 0 0 1 0-1.5h4.5A.75.75 0 0 1 11 9Z"
clip-rule="evenodd" clip-rule="evenodd"
/> />
</svg> </svg>
</button> </div>
<button <div class=" self-center text-sm font-medium">{$i18n.t('Delete All Chats')}</div>
class="hover:text-white transition" </button>
on:click={() => { {/if}
showDeleteConfirm = false; </div>
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="w-4 h-4"
>
<path
d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
/>
</svg>
</button>
</div>
</div>
{:else}
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
on:click={() => {
showDeleteConfirm = true;
}}
>
<div class=" self-center mr-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path
fill-rule="evenodd"
d="M4 2a1.5 1.5 0 0 0-1.5 1.5v9A1.5 1.5 0 0 0 4 14h8a1.5 1.5 0 0 0 1.5-1.5V6.621a1.5 1.5 0 0 0-.44-1.06L9.94 2.439A1.5 1.5 0 0 0 8.878 2H4Zm7 7a.75.75 0 0 1-.75.75h-4.5a.75.75 0 0 1 0-1.5h4.5A.75.75 0 0 1 11 9Z"
clip-rule="evenodd"
/>
</svg>
</div>
<div class=" self-center text-sm font-medium">{$i18n.t('Delete Chats')}</div>
</button>
{/if}
{#if $user?.role === 'admin' && ($config?.admin_export_enabled ?? true)}
<hr class=" dark:border-gray-700" />
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
on:click={() => {
exportAllUserChats();
}}
>
<div class=" self-center mr-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path d="M2 3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3Z" />
<path
fill-rule="evenodd"
d="M13 6H3v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6ZM8.75 7.75a.75.75 0 0 0-1.5 0v2.69L6.03 9.22a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l2.5-2.5a.75.75 0 1 0-1.06-1.06l-1.22 1.22V7.75Z"
clip-rule="evenodd"
/>
</svg>
</div>
<div class=" self-center text-sm font-medium">
{$i18n.t('Export All Chats (All Users)')}
</div>
</button>
{/if}
</div> </div>
</div> </div>

View File

@ -41,21 +41,21 @@
let requestFormat = ''; let requestFormat = '';
let keepAlive = null; let keepAlive = null;
let options = { let params = {
// Advanced // Advanced
seed: 0, seed: 0,
temperature: '', temperature: '',
repeat_penalty: '', frequency_penalty: '',
repeat_last_n: '', repeat_last_n: '',
mirostat: '', mirostat: '',
mirostat_eta: '', mirostat_eta: '',
mirostat_tau: '', mirostat_tau: '',
top_k: '', top_k: '',
top_p: '', top_p: '',
stop: '', stop: null,
tfs_z: '', tfs_z: '',
num_ctx: '', num_ctx: '',
num_predict: '' max_tokens: ''
}; };
const toggleRequestFormat = async () => { const toggleRequestFormat = async () => {
@ -80,14 +80,14 @@
requestFormat = settings.requestFormat ?? ''; requestFormat = settings.requestFormat ?? '';
keepAlive = settings.keepAlive ?? null; keepAlive = settings.keepAlive ?? null;
options.seed = settings.seed ?? 0; params.seed = settings.seed ?? 0;
options.temperature = settings.temperature ?? ''; params.temperature = settings.temperature ?? '';
options.repeat_penalty = settings.repeat_penalty ?? ''; params.frequency_penalty = settings.frequency_penalty ?? '';
options.top_k = settings.top_k ?? ''; params.top_k = settings.top_k ?? '';
options.top_p = settings.top_p ?? ''; params.top_p = settings.top_p ?? '';
options.num_ctx = settings.num_ctx ?? ''; params.num_ctx = settings.num_ctx ?? '';
options = { ...options, ...settings.options }; params = { ...params, ...settings.params };
options.stop = (settings?.options?.stop ?? []).join(','); params.stop = settings?.params?.stop ? (settings?.params?.stop ?? []).join(',') : null;
}); });
const applyTheme = (_theme: string) => { const applyTheme = (_theme: string) => {
@ -228,7 +228,7 @@
</div> </div>
{#if showAdvanced} {#if showAdvanced}
<AdvancedParams bind:options /> <AdvancedParams bind:params />
<hr class=" dark:border-gray-700" /> <hr class=" dark:border-gray-700" />
<div class=" py-1 w-full justify-between"> <div class=" py-1 w-full justify-between">
@ -300,20 +300,21 @@
on:click={() => { on:click={() => {
saveSettings({ saveSettings({
system: system !== '' ? system : undefined, system: system !== '' ? system : undefined,
options: { params: {
seed: (options.seed !== 0 ? options.seed : undefined) ?? undefined, seed: (params.seed !== 0 ? params.seed : undefined) ?? undefined,
stop: options.stop !== '' ? options.stop.split(',').filter((e) => e) : undefined, stop: params.stop ? params.stop.split(',').filter((e) => e) : undefined,
temperature: options.temperature !== '' ? options.temperature : undefined, temperature: params.temperature !== '' ? params.temperature : undefined,
repeat_penalty: options.repeat_penalty !== '' ? options.repeat_penalty : undefined, frequency_penalty:
repeat_last_n: options.repeat_last_n !== '' ? options.repeat_last_n : undefined, params.frequency_penalty !== '' ? params.frequency_penalty : undefined,
mirostat: options.mirostat !== '' ? options.mirostat : undefined, repeat_last_n: params.repeat_last_n !== '' ? params.repeat_last_n : undefined,
mirostat_eta: options.mirostat_eta !== '' ? options.mirostat_eta : undefined, mirostat: params.mirostat !== '' ? params.mirostat : undefined,
mirostat_tau: options.mirostat_tau !== '' ? options.mirostat_tau : undefined, mirostat_eta: params.mirostat_eta !== '' ? params.mirostat_eta : undefined,
top_k: options.top_k !== '' ? options.top_k : undefined, mirostat_tau: params.mirostat_tau !== '' ? params.mirostat_tau : undefined,
top_p: options.top_p !== '' ? options.top_p : undefined, top_k: params.top_k !== '' ? params.top_k : undefined,
tfs_z: options.tfs_z !== '' ? options.tfs_z : undefined, top_p: params.top_p !== '' ? params.top_p : undefined,
num_ctx: options.num_ctx !== '' ? options.num_ctx : undefined, tfs_z: params.tfs_z !== '' ? params.tfs_z : undefined,
num_predict: options.num_predict !== '' ? options.num_predict : undefined num_ctx: params.num_ctx !== '' ? params.num_ctx : undefined,
max_tokens: params.max_tokens !== '' ? params.max_tokens : undefined
}, },
keepAlive: keepAlive ? (isNaN(keepAlive) ? keepAlive : parseInt(keepAlive)) : undefined keepAlive: keepAlive ? (isNaN(keepAlive) ? keepAlive : parseInt(keepAlive)) : undefined
}); });

View File

@ -1,5 +1,4 @@
<script lang="ts"> <script lang="ts">
import queue from 'async/queue';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import { import {
@ -12,32 +11,20 @@
cancelOllamaRequest, cancelOllamaRequest,
uploadModel uploadModel
} from '$lib/apis/ollama'; } from '$lib/apis/ollama';
import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants'; import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants';
import { WEBUI_NAME, models, MODEL_DOWNLOAD_POOL, user } from '$lib/stores'; import { WEBUI_NAME, models, MODEL_DOWNLOAD_POOL, user, config } from '$lib/stores';
import { splitStream } from '$lib/utils'; import { splitStream } from '$lib/utils';
import { onMount, getContext } from 'svelte'; import { onMount, getContext } from 'svelte';
import { addLiteLLMModel, deleteLiteLLMModel, getLiteLLMModelInfo } from '$lib/apis/litellm';
import Tooltip from '$lib/components/common/Tooltip.svelte'; import Tooltip from '$lib/components/common/Tooltip.svelte';
import Spinner from '$lib/components/common/Spinner.svelte';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
export let getModels: Function; export let getModels: Function;
let showLiteLLM = false;
let showLiteLLMParams = false;
let modelUploadInputElement: HTMLInputElement; let modelUploadInputElement: HTMLInputElement;
let liteLLMModelInfo = [];
let liteLLMModel = '';
let liteLLMModelName = '';
let liteLLMAPIBase = '';
let liteLLMAPIKey = '';
let liteLLMRPM = '';
let liteLLMMaxTokens = '';
let deleteLiteLLMModelName = '';
$: liteLLMModelName = liteLLMModel;
// Models // Models
@ -48,7 +35,8 @@
let updateProgress = null; let updateProgress = null;
let showExperimentalOllama = false; let showExperimentalOllama = false;
let ollamaVersion = '';
let ollamaVersion = null;
const MAX_PARALLEL_DOWNLOADS = 3; const MAX_PARALLEL_DOWNLOADS = 3;
let modelTransferring = false; let modelTransferring = false;
@ -70,8 +58,11 @@
const updateModelsHandler = async () => { const updateModelsHandler = async () => {
for (const model of $models.filter( for (const model of $models.filter(
(m) => (m) =>
m.size != null && !(m?.preset ?? false) &&
(selectedOllamaUrlIdx === null ? true : (m?.urls ?? []).includes(selectedOllamaUrlIdx)) m.owned_by === 'ollama' &&
(selectedOllamaUrlIdx === null
? true
: (m?.ollama?.urls ?? []).includes(selectedOllamaUrlIdx))
)) { )) {
console.log(model); console.log(model);
@ -439,77 +430,28 @@
} }
}; };
const addLiteLLMModelHandler = async () => {
if (!liteLLMModelInfo.find((info) => info.model_name === liteLLMModelName)) {
const res = await addLiteLLMModel(localStorage.token, {
name: liteLLMModelName,
model: liteLLMModel,
api_base: liteLLMAPIBase,
api_key: liteLLMAPIKey,
rpm: liteLLMRPM,
max_tokens: liteLLMMaxTokens
}).catch((error) => {
toast.error(error);
return null;
});
if (res) {
if (res.message) {
toast.success(res.message);
}
}
} else {
toast.error($i18n.t(`Model {{modelName}} already exists.`, { modelName: liteLLMModelName }));
}
liteLLMModelName = '';
liteLLMModel = '';
liteLLMAPIBase = '';
liteLLMAPIKey = '';
liteLLMRPM = '';
liteLLMMaxTokens = '';
liteLLMModelInfo = await getLiteLLMModelInfo(localStorage.token);
models.set(await getModels());
};
const deleteLiteLLMModelHandler = async () => {
const res = await deleteLiteLLMModel(localStorage.token, deleteLiteLLMModelName).catch(
(error) => {
toast.error(error);
return null;
}
);
if (res) {
if (res.message) {
toast.success(res.message);
}
}
deleteLiteLLMModelName = '';
liteLLMModelInfo = await getLiteLLMModelInfo(localStorage.token);
models.set(await getModels());
};
onMount(async () => { onMount(async () => {
OLLAMA_URLS = await getOllamaUrls(localStorage.token).catch((error) => { await Promise.all([
toast.error(error); (async () => {
return []; OLLAMA_URLS = await getOllamaUrls(localStorage.token).catch((error) => {
}); toast.error(error);
return [];
});
if (OLLAMA_URLS.length > 0) { if (OLLAMA_URLS.length > 0) {
selectedOllamaUrlIdx = 0; selectedOllamaUrlIdx = 0;
} }
})(),
ollamaVersion = await getOllamaVersion(localStorage.token).catch((error) => false); (async () => {
liteLLMModelInfo = await getLiteLLMModelInfo(localStorage.token); ollamaVersion = await getOllamaVersion(localStorage.token).catch((error) => false);
})()
]);
}); });
</script> </script>
<div class="flex flex-col h-full justify-between text-sm"> <div class="flex flex-col h-full justify-between text-sm">
<div class=" space-y-3 pr-1.5 overflow-y-scroll h-[24rem]"> <div class=" space-y-3 pr-1.5 overflow-y-scroll h-[24rem]">
{#if ollamaVersion} {#if ollamaVersion !== null}
<div class="space-y-2 pr-1.5"> <div class="space-y-2 pr-1.5">
<div class="text-sm font-medium">{$i18n.t('Manage Ollama Models')}</div> <div class="text-sm font-medium">{$i18n.t('Manage Ollama Models')}</div>
@ -587,24 +529,28 @@
viewBox="0 0 24 24" viewBox="0 0 24 24"
fill="currentColor" fill="currentColor"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
><style> >
<style>
.spinner_ajPY { .spinner_ajPY {
transform-origin: center; transform-origin: center;
animation: spinner_AtaB 0.75s infinite linear; animation: spinner_AtaB 0.75s infinite linear;
} }
@keyframes spinner_AtaB { @keyframes spinner_AtaB {
100% { 100% {
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
</style><path </style>
<path
d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z" d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
opacity=".25" opacity=".25"
/><path />
<path
d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z" d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
class="spinner_ajPY" class="spinner_ajPY"
/></svg />
> </svg>
</div> </div>
{:else} {:else}
<svg <svg
@ -703,9 +649,12 @@
{#if !deleteModelTag} {#if !deleteModelTag}
<option value="" disabled selected>{$i18n.t('Select a model')}</option> <option value="" disabled selected>{$i18n.t('Select a model')}</option>
{/if} {/if}
{#each $models.filter((m) => m.size != null && (selectedOllamaUrlIdx === null ? true : (m?.urls ?? []).includes(selectedOllamaUrlIdx))) as model} {#each $models.filter((m) => !(m?.preset ?? false) && m.owned_by === 'ollama' && (selectedOllamaUrlIdx === null ? true : (m?.ollama?.urls ?? []).includes(selectedOllamaUrlIdx))) as model}
<option value={model.name} class="bg-gray-100 dark:bg-gray-700" <option value={model.name} class="bg-gray-100 dark:bg-gray-700"
>{model.name + ' (' + (model.size / 1024 ** 3).toFixed(1) + ' GB)'}</option >{model.name +
' (' +
(model.ollama.size / 1024 ** 3).toFixed(1) +
' GB)'}</option
> >
{/each} {/each}
</select> </select>
@ -833,24 +782,28 @@
viewBox="0 0 24 24" viewBox="0 0 24 24"
fill="currentColor" fill="currentColor"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
><style> >
<style>
.spinner_ajPY { .spinner_ajPY {
transform-origin: center; transform-origin: center;
animation: spinner_AtaB 0.75s infinite linear; animation: spinner_AtaB 0.75s infinite linear;
} }
@keyframes spinner_AtaB { @keyframes spinner_AtaB {
100% { 100% {
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
</style><path </style>
<path
d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z" d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
opacity=".25" opacity=".25"
/><path />
<path
d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z" d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
class="spinner_ajPY" class="spinner_ajPY"
/></svg />
> </svg>
</div> </div>
{:else} {:else}
<svg <svg
@ -929,203 +882,14 @@
{/if} {/if}
</div> </div>
</div> </div>
<hr class=" dark:border-gray-700 my-2" /> {:else if ollamaVersion === false}
{/if} <div>Ollama Not Detected</div>
{:else}
<div class=" space-y-3"> <div class="flex h-full justify-center">
<div class="mt-2 space-y-3 pr-1.5"> <div class="my-auto">
<div> <Spinner className="size-6" />
<div class="mb-2">
<div class="flex justify-between items-center text-xs">
<div class=" text-sm font-medium">{$i18n.t('Manage LiteLLM Models')}</div>
<button
class=" text-xs font-medium text-gray-500"
type="button"
on:click={() => {
showLiteLLM = !showLiteLLM;
}}>{showLiteLLM ? $i18n.t('Hide') : $i18n.t('Show')}</button
>
</div>
</div>
{#if showLiteLLM}
<div>
<div class="flex justify-between items-center text-xs">
<div class=" text-sm font-medium">{$i18n.t('Add a model')}</div>
<button
class=" text-xs font-medium text-gray-500"
type="button"
on:click={() => {
showLiteLLMParams = !showLiteLLMParams;
}}
>{showLiteLLMParams
? $i18n.t('Hide Additional Params')
: $i18n.t('Show Additional Params')}</button
>
</div>
</div>
<div class="my-2 space-y-2">
<div class="flex w-full mb-1.5">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
placeholder={$i18n.t('Enter LiteLLM Model (litellm_params.model)')}
bind:value={liteLLMModel}
autocomplete="off"
/>
</div>
<button
class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
on:click={() => {
addLiteLLMModelHandler();
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path
d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z"
/>
</svg>
</button>
</div>
{#if showLiteLLMParams}
<div>
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Model Name')}</div>
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
placeholder="Enter Model Name (model_name)"
bind:value={liteLLMModelName}
autocomplete="off"
/>
</div>
</div>
</div>
<div>
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('API Base URL')}</div>
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
placeholder={$i18n.t(
'Enter LiteLLM API Base URL (litellm_params.api_base)'
)}
bind:value={liteLLMAPIBase}
autocomplete="off"
/>
</div>
</div>
</div>
<div>
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('API Key')}</div>
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
placeholder={$i18n.t('Enter LiteLLM API Key (litellm_params.api_key)')}
bind:value={liteLLMAPIKey}
autocomplete="off"
/>
</div>
</div>
</div>
<div>
<div class="mb-1.5 text-sm font-medium">{$i18n.t('API RPM')}</div>
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
placeholder={$i18n.t('Enter LiteLLM API RPM (litellm_params.rpm)')}
bind:value={liteLLMRPM}
autocomplete="off"
/>
</div>
</div>
</div>
<div>
<div class="mb-1.5 text-sm font-medium">{$i18n.t('Max Tokens')}</div>
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
placeholder={$i18n.t('Enter Max Tokens (litellm_params.max_tokens)')}
bind:value={liteLLMMaxTokens}
type="number"
min="1"
autocomplete="off"
/>
</div>
</div>
</div>
{/if}
</div>
<div class="mb-2 text-xs text-gray-400 dark:text-gray-500">
{$i18n.t('Not sure what to add?')}
<a
class=" text-gray-300 font-medium underline"
href="https://litellm.vercel.app/docs/proxy/configs#quick-start"
target="_blank"
>
{$i18n.t('Click here for help.')}
</a>
</div>
<div>
<div class=" mb-2.5 text-sm font-medium">{$i18n.t('Delete a model')}</div>
<div class="flex w-full">
<div class="flex-1 mr-2">
<select
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
bind:value={deleteLiteLLMModelName}
placeholder={$i18n.t('Select a model')}
>
{#if !deleteLiteLLMModelName}
<option value="" disabled selected>{$i18n.t('Select a model')}</option>
{/if}
{#each liteLLMModelInfo as model}
<option value={model.model_name} class="bg-gray-100 dark:bg-gray-700"
>{model.model_name}</option
>
{/each}
</select>
</div>
<button
class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
on:click={() => {
deleteLiteLLMModelHandler();
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path
fill-rule="evenodd"
d="M5 3.25V4H2.75a.75.75 0 0 0 0 1.5h.3l.815 8.15A1.5 1.5 0 0 0 5.357 15h5.285a1.5 1.5 0 0 0 1.493-1.35l.815-8.15h.3a.75.75 0 0 0 0-1.5H11v-.75A2.25 2.25 0 0 0 8.75 1h-1.5A2.25 2.25 0 0 0 5 3.25Zm2.25-.75a.75.75 0 0 0-.75.75V4h3v-.75a.75.75 0 0 0-.75-.75h-1.5ZM6.05 6a.75.75 0 0 1 .787.713l.275 5.5a.75.75 0 0 1-1.498.075l-.275-5.5A.75.75 0 0 1 6.05 6Zm3.9 0a.75.75 0 0 1 .712.787l-.275 5.5a.75.75 0 0 1-1.498-.075l.275-5.5a.75.75 0 0 1 .786-.711Z"
clip-rule="evenodd"
/>
</svg>
</button>
</div>
</div>
{/if}
</div> </div>
</div> </div>
</div> {/if}
</div> </div>
</div> </div>

View File

@ -3,7 +3,7 @@
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import { models, settings, user } from '$lib/stores'; import { models, settings, user } from '$lib/stores';
import { getModels as _getModels } from '$lib/utils'; import { getModels as _getModels } from '$lib/apis';
import Modal from '../common/Modal.svelte'; import Modal from '../common/Modal.svelte';
import Account from './Settings/Account.svelte'; import Account from './Settings/Account.svelte';

View File

@ -1,9 +1,9 @@
<script lang="ts"> <script lang="ts">
import { getContext, onMount } from 'svelte'; import { getContext, onMount } from 'svelte';
import { models } from '$lib/stores';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import { deleteSharedChatById, getChatById, shareChatById } from '$lib/apis/chats'; import { deleteSharedChatById, getChatById, shareChatById } from '$lib/apis/chats';
import { modelfiles } from '$lib/stores';
import { copyToClipboard } from '$lib/utils'; import { copyToClipboard } from '$lib/utils';
import Modal from '../common/Modal.svelte'; import Modal from '../common/Modal.svelte';
@ -43,9 +43,7 @@
tab.postMessage( tab.postMessage(
JSON.stringify({ JSON.stringify({
chat: _chat, chat: _chat,
modelfiles: $modelfiles.filter((modelfile) => models: $models.filter((m) => _chat.models.includes(m.id))
_chat.models.includes(modelfile.tagName)
)
}), }),
'*' '*'
); );

View File

@ -29,6 +29,7 @@
dispatch('change', _state); dispatch('change', _state);
} }
}} }}
type="button"
> >
<div class="top-0 left-0 absolute w-full flex justify-center"> <div class="top-0 left-0 absolute w-full flex justify-center">
{#if _state === 'checked'} {#if _state === 'checked'}

View File

@ -1,9 +1,9 @@
<script lang="ts"> <script lang="ts">
export let className: string = ''; export let className: string = 'size-5';
</script> </script>
<div class="flex justify-center text-center {className}"> <div class="flex justify-center text-center">
<svg class="size-5" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg" <svg class={className} viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
><style> ><style>
.spinner_ajPY { .spinner_ajPY {
transform-origin: center; transform-origin: center;

View File

@ -5,6 +5,7 @@
export let placement = 'top'; export let placement = 'top';
export let content = `I'm a tooltip!`; export let content = `I'm a tooltip!`;
export let touch = true; export let touch = true;
export let className = 'flex';
let tooltipElement; let tooltipElement;
let tooltipInstance; let tooltipInstance;
@ -29,6 +30,6 @@
}); });
</script> </script>
<div bind:this={tooltipElement} aria-label={content} class="flex"> <div bind:this={tooltipElement} aria-label={content} class={className}>
<slot /> <slot />
</div> </div>

View File

@ -6,7 +6,6 @@
WEBUI_NAME, WEBUI_NAME,
chatId, chatId,
mobile, mobile,
modelfiles,
settings, settings,
showArchivedChats, showArchivedChats,
showSettings, showSettings,

View File

@ -1,4 +1,6 @@
<script lang="ts"> <script lang="ts">
import fileSaver from 'file-saver';
const { saveAs } = fileSaver;
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { getContext, createEventDispatcher } from 'svelte'; import { getContext, createEventDispatcher } from 'svelte';
@ -13,6 +15,8 @@
export let show = false; export let show = false;
let searchValue = '';
let chats = []; let chats = [];
const unarchiveChatHandler = async (chatId) => { const unarchiveChatHandler = async (chatId) => {
@ -33,6 +37,13 @@
chats = await getArchivedChatList(localStorage.token); chats = await getArchivedChatList(localStorage.token);
}; };
const exportChatsHandler = async () => {
let blob = new Blob([JSON.stringify(chats)], {
type: 'application/json'
});
saveAs(blob, `archived-chat-export-${Date.now()}.json`);
};
$: if (show) { $: if (show) {
(async () => { (async () => {
chats = await getArchivedChatList(localStorage.token); chats = await getArchivedChatList(localStorage.token);
@ -63,102 +74,136 @@
</button> </button>
</div> </div>
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 dark:text-gray-200"> <div class="flex flex-col w-full px-5 pb-4 dark:text-gray-200">
<div class=" flex w-full mt-2 space-x-2">
<div class="flex flex-1">
<div class=" self-center ml-1 mr-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="w-4 h-4"
>
<path
fill-rule="evenodd"
d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z"
clip-rule="evenodd"
/>
</svg>
</div>
<input
class=" w-full text-sm pr-4 py-1 rounded-r-xl outline-none bg-transparent"
bind:value={searchValue}
placeholder={$i18n.t('Search Chats')}
/>
</div>
</div>
<hr class=" dark:border-gray-850 my-2" />
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6"> <div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
{#if chats.length > 0} {#if chats.length > 0}
<div class="text-left text-sm w-full mb-4 max-h-[22rem] overflow-y-scroll"> <div>
<div class="relative overflow-x-auto"> <div class="text-left text-sm w-full mb-3 max-h-[22rem] overflow-y-scroll">
<table class="w-full text-sm text-left text-gray-600 dark:text-gray-400 table-auto"> <div class="relative overflow-x-auto">
<thead <table class="w-full text-sm text-left text-gray-600 dark:text-gray-400 table-auto">
class="text-xs text-gray-700 uppercase bg-transparent dark:text-gray-200 border-b-2 dark:border-gray-800" <thead
> class="text-xs text-gray-700 uppercase bg-transparent dark:text-gray-200 border-b-2 dark:border-gray-800"
<tr> >
<th scope="col" class="px-3 py-2"> {$i18n.t('Name')} </th> <tr>
<th scope="col" class="px-3 py-2 hidden md:flex"> {$i18n.t('Created At')} </th> <th scope="col" class="px-3 py-2"> {$i18n.t('Name')} </th>
<th scope="col" class="px-3 py-2 text-right" /> <th scope="col" class="px-3 py-2 hidden md:flex">
</tr> {$i18n.t('Created At')}
</thead> </th>
<tbody> <th scope="col" class="px-3 py-2 text-right" />
{#each chats as chat, idx}
<tr
class="bg-transparent {idx !== chats.length - 1 &&
'border-b'} dark:bg-gray-900 dark:border-gray-850 text-xs"
>
<td class="px-3 py-1 w-2/3">
<a href="/c/{chat.id}" target="_blank">
<div class=" underline line-clamp-1">
{chat.title}
</div>
</a>
</td>
<td class=" px-3 py-1 hidden md:flex h-[2.5rem]">
<div class="my-auto">
{dayjs(chat.created_at * 1000).format($i18n.t('MMMM DD, YYYY HH:mm'))}
</div>
</td>
<td class="px-3 py-1 text-right">
<div class="flex justify-end w-full">
<Tooltip content="Unarchive Chat">
<button
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
on:click={async () => {
unarchiveChatHandler(chat.id);
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="size-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15"
/>
</svg>
</button>
</Tooltip>
<Tooltip content="Delete Chat">
<button
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
on:click={async () => {
deleteChatHandler(chat.id);
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-4 h-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
/>
</svg>
</button>
</Tooltip>
</div>
</td>
</tr> </tr>
{/each} </thead>
</tbody> <tbody>
</table> {#each chats.filter((c) => searchValue === '' || c.title
</div> .toLowerCase()
<!-- {#each chats as chat} .includes(searchValue.toLowerCase())) as chat, idx}
<div> <tr
{JSON.stringify(chat)} class="bg-transparent {idx !== chats.length - 1 &&
'border-b'} dark:bg-gray-900 dark:border-gray-850 text-xs"
>
<td class="px-3 py-1 w-2/3">
<a href="/c/{chat.id}" target="_blank">
<div class=" underline line-clamp-1">
{chat.title}
</div>
</a>
</td>
<td class=" px-3 py-1 hidden md:flex h-[2.5rem]">
<div class="my-auto">
{dayjs(chat.created_at * 1000).format($i18n.t('MMMM DD, YYYY HH:mm'))}
</div>
</td>
<td class="px-3 py-1 text-right">
<div class="flex justify-end w-full">
<Tooltip content="Unarchive Chat">
<button
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
on:click={async () => {
unarchiveChatHandler(chat.id);
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="size-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15"
/>
</svg>
</button>
</Tooltip>
<Tooltip content="Delete Chat">
<button
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
on:click={async () => {
deleteChatHandler(chat.id);
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-4 h-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
/>
</svg>
</button>
</Tooltip>
</div>
</td>
</tr>
{/each}
</tbody>
</table>
</div> </div>
{/each} --> </div>
<div class="flex flex-wrap text-sm font-medium gap-1.5 mt-2 m-1">
<button
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-300 dark:outline-gray-800 rounded-3xl"
on:click={() => {
exportChatsHandler();
}}>Export All Archived Chats</button
>
</div>
</div> </div>
{:else} {:else}
<div class="text-left text-sm w-full mb-8"> <div class="text-left text-sm w-full mb-8">

View File

@ -5,67 +5,84 @@
import { onMount, getContext } from 'svelte'; import { onMount, getContext } from 'svelte';
import { WEBUI_NAME, modelfiles, settings, user } from '$lib/stores'; import { WEBUI_NAME, modelfiles, models, settings, user } from '$lib/stores';
import { createModel, deleteModel } from '$lib/apis/ollama'; import { addNewModel, deleteModelById, getModelInfos } from '$lib/apis/models';
import {
createNewModelfile, import { deleteModel } from '$lib/apis/ollama';
deleteModelfileByTagName,
getModelfiles
} from '$lib/apis/modelfiles';
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import { getModels } from '$lib/apis';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
let localModelfiles = []; let localModelfiles = [];
let importFiles; let importFiles;
let modelfilesImportInputElement: HTMLInputElement; let modelsImportInputElement: HTMLInputElement;
const deleteModelHandler = async (tagName) => {
let success = null;
success = await deleteModel(localStorage.token, tagName).catch((err) => { let searchValue = '';
toast.error(err);
const deleteModelHandler = async (model) => {
console.log(model.info);
if (!model?.info) {
toast.error(
$i18n.t('{{ owner }}: You cannot delete a base model', {
owner: model.owned_by.toUpperCase()
})
);
return null; return null;
});
if (success) {
toast.success($i18n.t(`Deleted {{tagName}}`, { tagName }));
} }
return success; const res = await deleteModelById(localStorage.token, model.id);
if (res) {
toast.success($i18n.t(`Deleted {{name}}`, { name: model.id }));
}
await models.set(await getModels(localStorage.token));
}; };
const deleteModelfile = async (tagName) => { const cloneModelHandler = async (model) => {
await deleteModelHandler(tagName); if ((model?.info?.base_model_id ?? null) === null) {
await deleteModelfileByTagName(localStorage.token, tagName); toast.error($i18n.t('You cannot clone a base model'));
await modelfiles.set(await getModelfiles(localStorage.token)); return;
} else {
sessionStorage.model = JSON.stringify({
...model,
id: `${model.id}-clone`,
name: `${model.name} (Clone)`
});
goto('/workspace/models/create');
}
}; };
const shareModelfile = async (modelfile) => { const shareModelHandler = async (model) => {
toast.success($i18n.t('Redirecting you to OpenWebUI Community')); toast.success($i18n.t('Redirecting you to OpenWebUI Community'));
const url = 'https://openwebui.com'; const url = 'https://openwebui.com';
const tab = await window.open(`${url}/modelfiles/create`, '_blank'); const tab = await window.open(`${url}/models/create`, '_blank');
window.addEventListener( window.addEventListener(
'message', 'message',
(event) => { (event) => {
if (event.origin !== url) return; if (event.origin !== url) return;
if (event.data === 'loaded') { if (event.data === 'loaded') {
tab.postMessage(JSON.stringify(modelfile), '*'); tab.postMessage(JSON.stringify(model), '*');
} }
}, },
false false
); );
}; };
const saveModelfiles = async (modelfiles) => { const downloadModels = async (models) => {
let blob = new Blob([JSON.stringify(modelfiles)], { let blob = new Blob([JSON.stringify(models)], {
type: 'application/json' type: 'application/json'
}); });
saveAs(blob, `modelfiles-export-${Date.now()}.json`); saveAs(blob, `models-export-${Date.now()}.json`);
}; };
onMount(() => { onMount(() => {
// Legacy code to sync localModelfiles with models
localModelfiles = JSON.parse(localStorage.getItem('modelfiles') ?? '[]'); localModelfiles = JSON.parse(localStorage.getItem('modelfiles') ?? '[]');
if (localModelfiles) { if (localModelfiles) {
@ -76,13 +93,56 @@
<svelte:head> <svelte:head>
<title> <title>
{$i18n.t('Modelfiles')} | {$WEBUI_NAME} {$i18n.t('Models')} | {$WEBUI_NAME}
</title> </title>
</svelte:head> </svelte:head>
<div class=" text-lg font-semibold mb-3">{$i18n.t('Modelfiles')}</div> <div class=" text-lg font-semibold mb-3">{$i18n.t('Models')}</div>
<a class=" flex space-x-4 cursor-pointer w-full mb-2 px-3 py-2" href="/workspace/modelfiles/create"> <div class=" flex w-full space-x-2">
<div class="flex flex-1">
<div class=" self-center ml-1 mr-3">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="w-4 h-4"
>
<path
fill-rule="evenodd"
d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z"
clip-rule="evenodd"
/>
</svg>
</div>
<input
class=" w-full text-sm pr-4 py-1 rounded-r-xl outline-none bg-transparent"
bind:value={searchValue}
placeholder={$i18n.t('Search Models')}
/>
</div>
<div>
<a
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"
href="/workspace/models/create"
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path
d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z"
/>
</svg>
</a>
</div>
</div>
<hr class=" dark:border-gray-850 my-2.5" />
<a class=" flex space-x-4 cursor-pointer w-full mb-2 px-3 py-2" href="/workspace/models/create">
<div class=" self-center w-10"> <div class=" self-center w-10">
<div <div
class="w-full h-10 flex justify-center rounded-full bg-transparent dark:bg-gray-700 border border-dashed border-gray-200" class="w-full h-10 flex justify-center rounded-full bg-transparent dark:bg-gray-700 border border-dashed border-gray-200"
@ -98,26 +158,28 @@
</div> </div>
<div class=" self-center"> <div class=" self-center">
<div class=" font-bold">{$i18n.t('Create a modelfile')}</div> <div class=" font-bold">{$i18n.t('Create a model')}</div>
<div class=" text-sm">{$i18n.t('Customize Ollama models for a specific purpose')}</div> <div class=" text-sm">{$i18n.t('Customize models for a specific purpose')}</div>
</div> </div>
</a> </a>
<hr class=" dark:border-gray-850" /> <hr class=" dark:border-gray-850" />
<div class=" my-2 mb-5"> <div class=" my-2 mb-5">
{#each $modelfiles as modelfile} {#each $models.filter((m) => searchValue === '' || m.name
.toLowerCase()
.includes(searchValue.toLowerCase())) as model}
<div <div
class=" flex space-x-4 cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl" class=" flex space-x-4 cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl"
> >
<a <a
class=" flex flex-1 space-x-4 cursor-pointer w-full" class=" flex flex-1 space-x-4 cursor-pointer w-full"
href={`/?models=${encodeURIComponent(modelfile.tagName)}`} href={`/?models=${encodeURIComponent(model.id)}`}
> >
<div class=" self-center w-10"> <div class=" self-center w-10">
<div class=" rounded-full bg-stone-700"> <div class=" rounded-full bg-stone-700">
<img <img
src={modelfile.imageUrl ?? '/user.png'} src={model?.info?.meta?.profile_image_url ?? '/favicon.png'}
alt="modelfile profile" alt="modelfile profile"
class=" rounded-full w-full h-auto object-cover" class=" rounded-full w-full h-auto object-cover"
/> />
@ -125,9 +187,9 @@
</div> </div>
<div class=" flex-1 self-center"> <div class=" flex-1 self-center">
<div class=" font-bold capitalize">{modelfile.title}</div> <div class=" font-bold line-clamp-1">{model.name}</div>
<div class=" text-sm overflow-hidden text-ellipsis line-clamp-1"> <div class=" text-sm overflow-hidden text-ellipsis line-clamp-1">
{modelfile.desc} {!!model?.info?.meta?.description ? model?.info?.meta?.description : model.id}
</div> </div>
</div> </div>
</a> </a>
@ -135,7 +197,7 @@
<a <a
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" 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" type="button"
href={`/workspace/modelfiles/edit?tag=${encodeURIComponent(modelfile.tagName)}`} href={`/workspace/models/edit?id=${encodeURIComponent(model.id)}`}
> >
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@ -157,9 +219,7 @@
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" 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" type="button"
on:click={() => { on:click={() => {
// console.log(modelfile); cloneModelHandler(model);
sessionStorage.modelfile = JSON.stringify(modelfile);
goto('/workspace/modelfiles/create');
}} }}
> >
<svg <svg
@ -182,7 +242,7 @@
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" 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" type="button"
on:click={() => { on:click={() => {
shareModelfile(modelfile); shareModelHandler(model);
}} }}
> >
<svg <svg
@ -205,7 +265,7 @@
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" 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" type="button"
on:click={() => { on:click={() => {
deleteModelfile(modelfile.tagName); deleteModelHandler(model);
}} }}
> >
<svg <svg
@ -231,8 +291,8 @@
<div class=" flex justify-end w-full mb-3"> <div class=" flex justify-end w-full mb-3">
<div class="flex space-x-1"> <div class="flex space-x-1">
<input <input
id="modelfiles-import-input" id="models-import-input"
bind:this={modelfilesImportInputElement} bind:this={modelsImportInputElement}
bind:files={importFiles} bind:files={importFiles}
type="file" type="file"
accept=".json" accept=".json"
@ -242,16 +302,18 @@
let reader = new FileReader(); let reader = new FileReader();
reader.onload = async (event) => { reader.onload = async (event) => {
let savedModelfiles = JSON.parse(event.target.result); let savedModels = JSON.parse(event.target.result);
console.log(savedModelfiles); console.log(savedModels);
for (const modelfile of savedModelfiles) { for (const model of savedModels) {
await createNewModelfile(localStorage.token, modelfile).catch((error) => { if (model?.info ?? false) {
return null; await addNewModel(localStorage.token, model.info).catch((error) => {
}); return null;
});
}
} }
await modelfiles.set(await getModelfiles(localStorage.token)); await models.set(await getModels(localStorage.token));
}; };
reader.readAsText(importFiles[0]); reader.readAsText(importFiles[0]);
@ -261,10 +323,10 @@
<button <button
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-gray-200 transition" class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-gray-200 transition"
on:click={() => { on:click={() => {
modelfilesImportInputElement.click(); modelsImportInputElement.click();
}} }}
> >
<div class=" self-center mr-2 font-medium">{$i18n.t('Import Modelfiles')}</div> <div class=" self-center mr-2 font-medium">{$i18n.t('Import Models')}</div>
<div class=" self-center"> <div class=" self-center">
<svg <svg
@ -285,10 +347,10 @@
<button <button
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-gray-200 transition" class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-gray-200 transition"
on:click={async () => { on:click={async () => {
saveModelfiles($modelfiles); downloadModels($models);
}} }}
> >
<div class=" self-center mr-2 font-medium">{$i18n.t('Export Modelfiles')}</div> <div class=" self-center mr-2 font-medium">{$i18n.t('Export Models')}</div>
<div class=" self-center"> <div class=" self-center">
<svg <svg
@ -314,47 +376,13 @@
</div> </div>
<div class="flex space-x-1"> <div class="flex space-x-1">
<button
class="self-center w-fit text-sm px-3 py-1 border dark:border-gray-600 rounded-xl flex"
on:click={async () => {
for (const modelfile of localModelfiles) {
await createNewModelfile(localStorage.token, modelfile).catch((error) => {
return null;
});
}
saveModelfiles(localModelfiles);
localStorage.removeItem('modelfiles');
localModelfiles = JSON.parse(localStorage.getItem('modelfiles') ?? '[]');
await modelfiles.set(await getModelfiles(localStorage.token));
}}
>
<div class=" self-center mr-2 font-medium">{$i18n.t('Sync All')}</div>
<div class=" self-center">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-3.5 h-3.5"
>
<path
fill-rule="evenodd"
d="M13.836 2.477a.75.75 0 0 1 .75.75v3.182a.75.75 0 0 1-.75.75h-3.182a.75.75 0 0 1 0-1.5h1.37l-.84-.841a4.5 4.5 0 0 0-7.08.932.75.75 0 0 1-1.3-.75 6 6 0 0 1 9.44-1.242l.842.84V3.227a.75.75 0 0 1 .75-.75Zm-.911 7.5A.75.75 0 0 1 13.199 11a6 6 0 0 1-9.44 1.241l-.84-.84v1.371a.75.75 0 0 1-1.5 0V9.591a.75.75 0 0 1 .75-.75H5.35a.75.75 0 0 1 0 1.5H3.98l.841.841a4.5 4.5 0 0 0 7.08-.932.75.75 0 0 1 1.025-.273Z"
clip-rule="evenodd"
/>
</svg>
</div>
</button>
<button <button
class="self-center w-fit text-sm p-1.5 border dark:border-gray-600 rounded-xl flex" class="self-center w-fit text-sm p-1.5 border dark:border-gray-600 rounded-xl flex"
on:click={async () => { on:click={async () => {
saveModelfiles(localModelfiles); downloadModels(localModelfiles);
localStorage.removeItem('modelfiles'); localStorage.removeItem('modelfiles');
localModelfiles = JSON.parse(localStorage.getItem('modelfiles') ?? '[]'); localModelfiles = JSON.parse(localStorage.getItem('modelfiles') ?? '[]');
await modelfiles.set(await getModelfiles(localStorage.token));
}} }}
> >
<div class=" self-center"> <div class=" self-center">
@ -402,7 +430,7 @@
</div> </div>
<div class=" self-center"> <div class=" self-center">
<div class=" font-bold">{$i18n.t('Discover a modelfile')}</div> <div class=" font-bold">{$i18n.t('Discover a model')}</div>
<div class=" text-sm">{$i18n.t('Discover, download, and explore model presets')}</div> <div class=" text-sm">{$i18n.t('Discover, download, and explore model presets')}</div>
</div> </div>
</a> </a>

View File

@ -5,12 +5,7 @@
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import { import { OLLAMA_API_BASE_URL, OPENAI_API_BASE_URL, WEBUI_API_BASE_URL } from '$lib/constants';
LITELLM_API_BASE_URL,
OLLAMA_API_BASE_URL,
OPENAI_API_BASE_URL,
WEBUI_API_BASE_URL
} from '$lib/constants';
import { WEBUI_NAME, config, user, models, settings } from '$lib/stores'; import { WEBUI_NAME, config, user, models, settings } from '$lib/stores';
import { cancelOllamaRequest, generateChatCompletion } from '$lib/apis/ollama'; import { cancelOllamaRequest, generateChatCompletion } from '$lib/apis/ollama';
@ -79,11 +74,7 @@
} }
] ]
}, },
model.external model?.owned_by === 'openai' ? `${OPENAI_API_BASE_URL}` : `${OLLAMA_API_BASE_URL}/v1`
? model.source === 'litellm'
? `${LITELLM_API_BASE_URL}/v1`
: `${OPENAI_API_BASE_URL}`
: `${OLLAMA_API_BASE_URL}/v1`
); );
if (res && res.ok) { if (res && res.ok) {
@ -150,11 +141,7 @@
...messages ...messages
].filter((message) => message) ].filter((message) => message)
}, },
model.external model?.owned_by === 'openai' ? `${OPENAI_API_BASE_URL}` : `${OLLAMA_API_BASE_URL}/v1`
? model.source === 'litellm'
? `${LITELLM_API_BASE_URL}/v1`
: `${OPENAI_API_BASE_URL}`
: `${OLLAMA_API_BASE_URL}/v1`
); );
let responseMessage; let responseMessage;
@ -321,13 +308,11 @@
<div class="max-w-full"> <div class="max-w-full">
<Selector <Selector
placeholder={$i18n.t('Select a model')} placeholder={$i18n.t('Select a model')}
items={$models items={$models.map((model) => ({
.filter((model) => model.name !== 'hr') value: model.id,
.map((model) => ({ label: model.name,
value: model.id, model: model
label: model.name, }))}
info: model
}))}
bind:value={selectedModelId} bind:value={selectedModelId}
/> />
</div> </div>

View File

@ -6,9 +6,8 @@ export const WEBUI_BASE_URL = browser ? (dev ? `http://${location.hostname}:8080
export const WEBUI_API_BASE_URL = `${WEBUI_BASE_URL}/api/v1`; export const WEBUI_API_BASE_URL = `${WEBUI_BASE_URL}/api/v1`;
export const LITELLM_API_BASE_URL = `${WEBUI_BASE_URL}/litellm/api`;
export const OLLAMA_API_BASE_URL = `${WEBUI_BASE_URL}/ollama`; export const OLLAMA_API_BASE_URL = `${WEBUI_BASE_URL}/ollama`;
export const OPENAI_API_BASE_URL = `${WEBUI_BASE_URL}/openai/api`; export const OPENAI_API_BASE_URL = `${WEBUI_BASE_URL}/openai`;
export const AUDIO_API_BASE_URL = `${WEBUI_BASE_URL}/audio/api/v1`; export const AUDIO_API_BASE_URL = `${WEBUI_BASE_URL}/audio/api/v1`;
export const IMAGES_API_BASE_URL = `${WEBUI_BASE_URL}/images/api/v1`; export const IMAGES_API_BASE_URL = `${WEBUI_BASE_URL}/images/api/v1`;
export const RAG_API_BASE_URL = `${WEBUI_BASE_URL}/rag/api/v1`; export const RAG_API_BASE_URL = `${WEBUI_BASE_URL}/rag/api/v1`;

View File

@ -3,6 +3,8 @@
"(Beta)": "(تجريبي)", "(Beta)": "(تجريبي)",
"(e.g. `sh webui.sh --api`)": "( `sh webui.sh --api`مثال)", "(e.g. `sh webui.sh --api`)": "( `sh webui.sh --api`مثال)",
"(latest)": "(الأخير)", "(latest)": "(الأخير)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} ...يفكر", "{{modelName}} is thinking...": "{{modelName}} ...يفكر",
"{{user}}'s Chats": "دردشات {{user}}", "{{user}}'s Chats": "دردشات {{user}}",
"{{webUIName}} Backend Required": "{{webUIName}} مطلوب", "{{webUIName}} Backend Required": "{{webUIName}} مطلوب",
@ -11,9 +13,8 @@
"Account": "الحساب", "Account": "الحساب",
"Accurate information": "معلومات دقيقة", "Accurate information": "معلومات دقيقة",
"Add": "أضف", "Add": "أضف",
"Add a model": "أضف موديل", "Add a model id": "",
"Add a model tag name": "ضع علامة للأسم الموديل", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "أضف وصفًا قصيرًا حول ما يفعله ملف الموديل هذا",
"Add a short title for this prompt": "أضف عنوانًا قصيرًا لبداء المحادثة", "Add a short title for this prompt": "أضف عنوانًا قصيرًا لبداء المحادثة",
"Add a tag": "أضافة تاق", "Add a tag": "أضافة تاق",
"Add custom prompt": "أضافة مطالبة مخصصه", "Add custom prompt": "أضافة مطالبة مخصصه",
@ -29,6 +30,7 @@
"Admin Panel": "لوحة التحكم", "Admin Panel": "لوحة التحكم",
"Admin Settings": "اعدادات المشرف", "Admin Settings": "اعدادات المشرف",
"Advanced Parameters": "التعليمات المتقدمة", "Advanced Parameters": "التعليمات المتقدمة",
"Advanced Params": "",
"all": "الكل", "all": "الكل",
"All Documents": "جميع الملفات", "All Documents": "جميع الملفات",
"All Users": "جميع المستخدمين", "All Users": "جميع المستخدمين",
@ -43,7 +45,6 @@
"API Key": "API مفتاح", "API Key": "API مفتاح",
"API Key created.": "API تم أنشاء المفتاح", "API Key created.": "API تم أنشاء المفتاح",
"API keys": "مفاتيح واجهة برمجة التطبيقات", "API keys": "مفاتيح واجهة برمجة التطبيقات",
"API RPM": "API RPM",
"April": "أبريل", "April": "أبريل",
"Archive": "الأرشيف", "Archive": "الأرشيف",
"Archived Chats": "الأرشيف المحادثات", "Archived Chats": "الأرشيف المحادثات",
@ -60,12 +61,12 @@
"available!": "متاح", "available!": "متاح",
"Back": "خلف", "Back": "خلف",
"Bad Response": "استجابة خطاء", "Bad Response": "استجابة خطاء",
"Base Model (From)": "",
"before": "قبل", "before": "قبل",
"Being lazy": "كون كسول", "Being lazy": "كون كسول",
"Builder Mode": "بناء الموديل",
"Bypass SSL verification for Websites": "تجاوز التحقق من SSL للموقع", "Bypass SSL verification for Websites": "تجاوز التحقق من SSL للموقع",
"Cancel": "اللغاء", "Cancel": "اللغاء",
"Categories": "التصنيفات", "Capabilities": "",
"Change Password": "تغير الباسورد", "Change Password": "تغير الباسورد",
"Chat": "المحادثة", "Chat": "المحادثة",
"Chat Bubble UI": "UI الدردشة", "Chat Bubble UI": "UI الدردشة",
@ -83,7 +84,6 @@
"Citation": "اقتباس", "Citation": "اقتباس",
"Click here for help.": "أضغط هنا للمساعدة", "Click here for help.": "أضغط هنا للمساعدة",
"Click here to": "أضغط هنا الانتقال", "Click here to": "أضغط هنا الانتقال",
"Click here to check other modelfiles.": "انقر هنا للتحقق من ملفات الموديلات الأخرى",
"Click here to select": "أضغط هنا للاختيار", "Click here to select": "أضغط هنا للاختيار",
"Click here to select a csv file.": "أضغط هنا للاختيار ملف csv", "Click here to select a csv file.": "أضغط هنا للاختيار ملف csv",
"Click here to select documents.": "انقر هنا لاختيار المستندات", "Click here to select documents.": "انقر هنا لاختيار المستندات",
@ -108,7 +108,7 @@
"Copy Link": "أنسخ الرابط", "Copy Link": "أنسخ الرابط",
"Copying to clipboard was successful!": "تم النسخ إلى الحافظة بنجاح", "Copying to clipboard was successful!": "تم النسخ إلى الحافظة بنجاح",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "قم بإنشاء عبارة موجزة مكونة من 3-5 كلمات كرأس للاستعلام التالي، مع الالتزام الصارم بالحد الأقصى لعدد الكلمات الذي يتراوح بين 3-5 كلمات وتجنب استخدام الكلمة 'عنوان':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "قم بإنشاء عبارة موجزة مكونة من 3-5 كلمات كرأس للاستعلام التالي، مع الالتزام الصارم بالحد الأقصى لعدد الكلمات الذي يتراوح بين 3-5 كلمات وتجنب استخدام الكلمة 'عنوان':",
"Create a modelfile": "إنشاء ملف نموذجي", "Create a model": "",
"Create Account": "إنشاء حساب", "Create Account": "إنشاء حساب",
"Create new key": "عمل مفتاح جديد", "Create new key": "عمل مفتاح جديد",
"Create new secret key": "عمل سر جديد", "Create new secret key": "عمل سر جديد",
@ -117,7 +117,7 @@
"Current Model": "الموديل المختار", "Current Model": "الموديل المختار",
"Current Password": "كلمة السر الحالية", "Current Password": "كلمة السر الحالية",
"Custom": "مخصص", "Custom": "مخصص",
"Customize Ollama models for a specific purpose": "تخصيص الموديل Ollama لغرض محدد", "Customize models for a specific purpose": "",
"Dark": "مظلم", "Dark": "مظلم",
"Dashboard": "لوحة التحكم", "Dashboard": "لوحة التحكم",
"Database": "قاعدة البيانات", "Database": "قاعدة البيانات",
@ -132,17 +132,17 @@
"delete": "حذف", "delete": "حذف",
"Delete": "حذف", "Delete": "حذف",
"Delete a model": "حذف الموديل", "Delete a model": "حذف الموديل",
"Delete All Chats": "",
"Delete chat": "حذف المحادثه", "Delete chat": "حذف المحادثه",
"Delete Chat": "حذف المحادثه.", "Delete Chat": "حذف المحادثه.",
"Delete Chats": "حذف المحادثات",
"delete this link": "أحذف هذا الرابط", "delete this link": "أحذف هذا الرابط",
"Delete User": "حذف المستخدم", "Delete User": "حذف المستخدم",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف",
"Deleted {{tagName}}": "{{tagName}} حذف", "Deleted {{name}}": "",
"Description": "وصف", "Description": "وصف",
"Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل", "Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل",
"Disabled": "تعطيل", "Disabled": "تعطيل",
"Discover a modelfile": "اكتشاف ملف نموذجي", "Discover a model": "",
"Discover a prompt": "اكتشاف موجه", "Discover a prompt": "اكتشاف موجه",
"Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة", "Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة",
"Discover, download, and explore model presets": "اكتشاف وتنزيل واستكشاف الإعدادات المسبقة للنموذج", "Discover, download, and explore model presets": "اكتشاف وتنزيل واستكشاف الإعدادات المسبقة للنموذج",
@ -176,11 +176,6 @@
"Enter Chunk Size": "أدخل Chunk الحجم", "Enter Chunk Size": "أدخل Chunk الحجم",
"Enter Image Size (e.g. 512x512)": "(e.g. 512x512) أدخل حجم الصورة ", "Enter Image Size (e.g. 512x512)": "(e.g. 512x512) أدخل حجم الصورة ",
"Enter language codes": "أدخل كود اللغة", "Enter language codes": "أدخل كود اللغة",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "أدخل عنوان URL الأساسي لواجهة برمجة تطبيقات LiteLLM (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "أدخل مفتاح LiteLLM API (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "أدخل LiteLLM API RPM (litllm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "أدخل LiteLLM الموديل (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "أدخل أكثر Tokens (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "(e.g. {{modelTag}}) أدخل الموديل تاق", "Enter model tag (e.g. {{modelTag}})": "(e.g. {{modelTag}}) أدخل الموديل تاق",
"Enter Number of Steps (e.g. 50)": "(e.g. 50) أدخل عدد الخطوات", "Enter Number of Steps (e.g. 50)": "(e.g. 50) أدخل عدد الخطوات",
"Enter Score": "أدخل النتيجة", "Enter Score": "أدخل النتيجة",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "تصدير جميع الدردشات (جميع المستخدمين)", "Export All Chats (All Users)": "تصدير جميع الدردشات (جميع المستخدمين)",
"Export Chats": "تصدير جميع الدردشات", "Export Chats": "تصدير جميع الدردشات",
"Export Documents Mapping": "تصدير وثائق الخرائط", "Export Documents Mapping": "تصدير وثائق الخرائط",
"Export Modelfiles": "تصدير ملفات النماذج", "Export Models": "",
"Export Prompts": "مطالبات التصدير", "Export Prompts": "مطالبات التصدير",
"Failed to create API Key.": "فشل في إنشاء مفتاح API.", "Failed to create API Key.": "فشل في إنشاء مفتاح API.",
"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة", "Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
@ -209,7 +204,7 @@
"Focus chat input": "التركيز على إدخال الدردشة", "Focus chat input": "التركيز على إدخال الدردشة",
"Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه", "Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه",
"Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:", "Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:",
"From (Base Model)": "من (الموديل الافتراضي)", "Frequencey Penalty": "",
"Full Screen Mode": "وضع ملء الشاشة", "Full Screen Mode": "وضع ملء الشاشة",
"General": "عام", "General": "عام",
"General Settings": "الاعدادات العامة", "General Settings": "الاعدادات العامة",
@ -220,7 +215,6 @@
"Hello, {{name}}": " {{name}} مرحبا", "Hello, {{name}}": " {{name}} مرحبا",
"Help": "مساعدة", "Help": "مساعدة",
"Hide": "أخفاء", "Hide": "أخفاء",
"Hide Additional Params": "إخفاء المعلمات الإضافية",
"How can I help you today?": "كيف استطيع مساعدتك اليوم؟", "How can I help you today?": "كيف استطيع مساعدتك اليوم؟",
"Hybrid Search": "البحث الهجين", "Hybrid Search": "البحث الهجين",
"Image Generation (Experimental)": "توليد الصور (تجريبي)", "Image Generation (Experimental)": "توليد الصور (تجريبي)",
@ -229,7 +223,7 @@
"Images": "الصور", "Images": "الصور",
"Import Chats": "استيراد الدردشات", "Import Chats": "استيراد الدردشات",
"Import Documents Mapping": "استيراد خرائط المستندات", "Import Documents Mapping": "استيراد خرائط المستندات",
"Import Modelfiles": "استيراد ملفات النماذج", "Import Models": "",
"Import Prompts": "مطالبات الاستيراد", "Import Prompts": "مطالبات الاستيراد",
"Include `--api` flag when running stable-diffusion-webui": "قم بتضمين علامة `-api` عند تشغيل Stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "قم بتضمين علامة `-api` عند تشغيل Stable-diffusion-webui",
"Input commands": "إدخال الأوامر", "Input commands": "إدخال الأوامر",
@ -238,6 +232,7 @@
"January": "يناير", "January": "يناير",
"join our Discord for help.": "انضم إلى Discord للحصول على المساعدة.", "join our Discord for help.": "انضم إلى Discord للحصول على المساعدة.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "يوليو", "July": "يوليو",
"June": "يونيو", "June": "يونيو",
"JWT Expiration": "JWT تجريبي", "JWT Expiration": "JWT تجريبي",
@ -252,11 +247,10 @@
"LTR": "من جهة اليسار إلى اليمين", "LTR": "من جهة اليسار إلى اليمين",
"Made by OpenWebUI Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ", "Made by OpenWebUI Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ",
"Make sure to enclose them with": "تأكد من إرفاقها", "Make sure to enclose them with": "تأكد من إرفاقها",
"Manage LiteLLM Models": "LiteLLM إدارة نماذج ",
"Manage Models": "إدارة النماذج", "Manage Models": "إدارة النماذج",
"Manage Ollama Models": "Ollama إدارة موديلات ", "Manage Ollama Models": "Ollama إدارة موديلات ",
"March": "مارس", "March": "مارس",
"Max Tokens": "Max Tokens", "Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.",
"May": "مايو", "May": "مايو",
"Memories accessible by LLMs will be shown here.": "", "Memories accessible by LLMs will be shown here.": "",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "تم تحميل النموذج '{{modelName}}' بنجاح", "Model '{{modelName}}' has been successfully downloaded.": "تم تحميل النموذج '{{modelName}}' بنجاح",
"Model '{{modelTag}}' is already in queue for downloading.": "النموذج '{{modelTag}}' موجود بالفعل في قائمة الانتظار للتحميل", "Model '{{modelTag}}' is already in queue for downloading.": "النموذج '{{modelTag}}' موجود بالفعل في قائمة الانتظار للتحميل",
"Model {{modelId}} not found": "لم يتم العثور على النموذج {{modelId}}.", "Model {{modelId}} not found": "لم يتم العثور على النموذج {{modelId}}.",
"Model {{modelName}} already exists.": "موجود {{modelName}} موديل بالفعل", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "تم اكتشاف مسار نظام الملفات النموذجي. الاسم المختصر للنموذج مطلوب للتحديث، ولا يمكن الاستمرار.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "تم اكتشاف مسار نظام الملفات النموذجي. الاسم المختصر للنموذج مطلوب للتحديث، ولا يمكن الاستمرار.",
"Model Name": "أسم الموديل", "Model ID": "",
"Model not selected": "لم تختار موديل", "Model not selected": "لم تختار موديل",
"Model Tag Name": "أسم التاق للموديل", "Model Params": "",
"Model Whitelisting": "القائمة البيضاء للموديل", "Model Whitelisting": "القائمة البيضاء للموديل",
"Model(s) Whitelisted": "القائمة البيضاء الموديل", "Model(s) Whitelisted": "القائمة البيضاء الموديل",
"Modelfile": "ملف نموذجي",
"Modelfile Advanced Settings": "الإعدادات المتقدمة لملف النموذج",
"Modelfile Content": "محتوى الملف النموذجي", "Modelfile Content": "محتوى الملف النموذجي",
"Modelfiles": "ملفات الموديل",
"Models": "الموديلات", "Models": "الموديلات",
"More": "المزيد", "More": "المزيد",
"Name": "الأسم", "Name": "الأسم",
"Name Tag": "أسم التاق", "Name Tag": "أسم التاق",
"Name your modelfile": "قم بتسمية ملف النموذج الخاص بك", "Name your model": "",
"New Chat": "دردشة جديدة", "New Chat": "دردشة جديدة",
"New Password": "كلمة المرور الجديدة", "New Password": "كلمة المرور الجديدة",
"No results found": "لا توجد نتايج", "No results found": "لا توجد نتايج",
"No source available": "لا يوجد مصدر متاح", "No source available": "لا يوجد مصدر متاح",
"Not factually correct": "ليس صحيحا من حيث الواقع", "Not factually correct": "ليس صحيحا من حيث الواقع",
"Not sure what to add?": "لست متأكدا ما يجب إضافته؟",
"Not sure what to write? Switch to": "لست متأكدا ماذا أكتب؟ التبديل إلى",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "ملاحظة: إذا قمت بتعيين الحد الأدنى من النقاط، فلن يؤدي البحث إلا إلى إرجاع المستندات التي لها نقاط أكبر من أو تساوي الحد الأدنى من النقاط.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "ملاحظة: إذا قمت بتعيين الحد الأدنى من النقاط، فلن يؤدي البحث إلا إلى إرجاع المستندات التي لها نقاط أكبر من أو تساوي الحد الأدنى من النقاط.",
"Notifications": "إشعارات", "Notifications": "إشعارات",
"November": "نوفمبر", "November": "نوفمبر",
@ -322,7 +311,6 @@
"or": "أو", "or": "أو",
"Other": "آخر", "Other": "آخر",
"Overview": "عرض", "Overview": "عرض",
"Parameters": "Parameters",
"Password": "الباسورد", "Password": "الباسورد",
"PDF document (.pdf)": "PDF ملف (.pdf)", "PDF document (.pdf)": "PDF ملف (.pdf)",
"PDF Extract Images (OCR)": "PDF أستخرج الصور (OCR)", "PDF Extract Images (OCR)": "PDF أستخرج الصور (OCR)",
@ -342,10 +330,8 @@
"Prompts": "مطالبات", "Prompts": "مطالبات",
"Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com \"{{searchValue}}\" أسحب من ", "Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com \"{{searchValue}}\" أسحب من ",
"Pull a model from Ollama.com": "Ollama.com سحب الموديل من ", "Pull a model from Ollama.com": "Ollama.com سحب الموديل من ",
"Pull Progress": "سحب التقدم",
"Query Params": "Query Params", "Query Params": "Query Params",
"RAG Template": "RAG تنمبلت", "RAG Template": "RAG تنمبلت",
"Raw Format": "Raw فورمات",
"Read Aloud": "أقراء لي", "Read Aloud": "أقراء لي",
"Record voice": "سجل صوت", "Record voice": "سجل صوت",
"Redirecting you to OpenWebUI Community": "OpenWebUI إعادة توجيهك إلى مجتمع ", "Redirecting you to OpenWebUI Community": "OpenWebUI إعادة توجيهك إلى مجتمع ",
@ -356,7 +342,6 @@
"Remove Model": "حذف الموديل", "Remove Model": "حذف الموديل",
"Rename": "إعادة تسمية", "Rename": "إعادة تسمية",
"Repeat Last N": "N كرر آخر", "Repeat Last N": "N كرر آخر",
"Repeat Penalty": "كرر المخالفة",
"Request Mode": "وضع الطلب", "Request Mode": "وضع الطلب",
"Reranking Model": "إعادة تقييم النموذج", "Reranking Model": "إعادة تقييم النموذج",
"Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب", "Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب",
@ -377,14 +362,17 @@
"Search": "البحث", "Search": "البحث",
"Search a model": "البحث عن موديل", "Search a model": "البحث عن موديل",
"Search Documents": "البحث المستندات", "Search Documents": "البحث المستندات",
"Search Models": "",
"Search Prompts": "أبحث حث", "Search Prompts": "أبحث حث",
"See readme.md for instructions": "readme.md للحصول على التعليمات", "See readme.md for instructions": "readme.md للحصول على التعليمات",
"See what's new": "ما الجديد", "See what's new": "ما الجديد",
"Seed": "Seed", "Seed": "Seed",
"Select a base model": "",
"Select a mode": "أختار موديل", "Select a mode": "أختار موديل",
"Select a model": "أختار الموديل", "Select a model": "أختار الموديل",
"Select an Ollama instance": "أختار سيرفر ", "Select an Ollama instance": "أختار سيرفر ",
"Select model": " أختار موديل", "Select model": " أختار موديل",
"Selected model(s) do not support image inputs": "",
"Send": "تم", "Send": "تم",
"Send a Message": "يُرجى إدخال طلبك هنا", "Send a Message": "يُرجى إدخال طلبك هنا",
"Send message": "يُرجى إدخال طلبك هنا.", "Send message": "يُرجى إدخال طلبك هنا.",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "OpenWebUI شارك في مجتمع", "Share to OpenWebUI Community": "OpenWebUI شارك في مجتمع",
"short-summary": "ملخص قصير", "short-summary": "ملخص قصير",
"Show": "عرض", "Show": "عرض",
"Show Additional Params": "إظهار المعلمات الإضافية",
"Show shortcuts": "إظهار الاختصارات", "Show shortcuts": "إظهار الاختصارات",
"Showcased creativity": "أظهر الإبداع", "Showcased creativity": "أظهر الإبداع",
"sidebar": "الشريط الجانبي", "sidebar": "الشريط الجانبي",
@ -425,7 +412,6 @@
"Success": "نجاح", "Success": "نجاح",
"Successfully updated.": "تم التحديث بنجاح", "Successfully updated.": "تم التحديث بنجاح",
"Suggested": "مقترحات", "Suggested": "مقترحات",
"Sync All": "مزامنة الكل",
"System": "النظام", "System": "النظام",
"System Prompt": "محادثة النظام", "System Prompt": "محادثة النظام",
"Tags": "الوسوم", "Tags": "الوسوم",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "اكتب ملخصًا في 50 كلمة يلخص [الموضوع أو الكلمة الرئيسية]", "Write a summary in 50 words that summarizes [topic or keyword].": "اكتب ملخصًا في 50 كلمة يلخص [الموضوع أو الكلمة الرئيسية]",
"Yesterday": "أمس", "Yesterday": "أمس",
"You": "انت", "You": "انت",
"You cannot clone a base model": "",
"You have no archived conversations.": "لا تملك محادثات محفوظه", "You have no archived conversations.": "لا تملك محادثات محفوظه",
"You have shared this chat": "تم مشاركة هذه المحادثة", "You have shared this chat": "تم مشاركة هذه المحادثة",
"You're a helpful assistant.": "مساعدك المفيد هنا", "You're a helpful assistant.": "مساعدك المفيد هنا",

View File

@ -3,6 +3,8 @@
"(Beta)": "(Бета)", "(Beta)": "(Бета)",
"(e.g. `sh webui.sh --api`)": "(например `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(например `sh webui.sh --api`)",
"(latest)": "(последна)", "(latest)": "(последна)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} мисли ...", "{{modelName}} is thinking...": "{{modelName}} мисли ...",
"{{user}}'s Chats": "{{user}}'s чатове", "{{user}}'s Chats": "{{user}}'s чатове",
"{{webUIName}} Backend Required": "{{webUIName}} Изисква се Бекенд", "{{webUIName}} Backend Required": "{{webUIName}} Изисква се Бекенд",
@ -11,9 +13,8 @@
"Account": "Акаунт", "Account": "Акаунт",
"Accurate information": "Точни информация", "Accurate information": "Точни информация",
"Add": "Добавяне", "Add": "Добавяне",
"Add a model": "Добавяне на модел", "Add a model id": "",
"Add a model tag name": "Добавяне на име на таг за модел", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "Добавяне на кратко описание за това какво прави този модфайл",
"Add a short title for this prompt": "Добавяне на кратко заглавие за този промпт", "Add a short title for this prompt": "Добавяне на кратко заглавие за този промпт",
"Add a tag": "Добавяне на таг", "Add a tag": "Добавяне на таг",
"Add custom prompt": "Добавяне на собствен промпт", "Add custom prompt": "Добавяне на собствен промпт",
@ -29,6 +30,7 @@
"Admin Panel": "Панел на Администратор", "Admin Panel": "Панел на Администратор",
"Admin Settings": "Настройки на Администратор", "Admin Settings": "Настройки на Администратор",
"Advanced Parameters": "Разширени Параметри", "Advanced Parameters": "Разширени Параметри",
"Advanced Params": "",
"all": "всички", "all": "всички",
"All Documents": "Всички Документи", "All Documents": "Всички Документи",
"All Users": "Всички Потребители", "All Users": "Всички Потребители",
@ -43,7 +45,6 @@
"API Key": "API Ключ", "API Key": "API Ключ",
"API Key created.": "API Ключ създаден.", "API Key created.": "API Ключ създаден.",
"API keys": "API Ключове", "API keys": "API Ключове",
"API RPM": "API RPM",
"April": "Април", "April": "Април",
"Archive": "Архивирани Чатове", "Archive": "Архивирани Чатове",
"Archived Chats": "Архивирани Чатове", "Archived Chats": "Архивирани Чатове",
@ -60,12 +61,12 @@
"available!": "наличен!", "available!": "наличен!",
"Back": "Назад", "Back": "Назад",
"Bad Response": "Невалиден отговор от API", "Bad Response": "Невалиден отговор от API",
"Base Model (From)": "",
"before": "преди", "before": "преди",
"Being lazy": "Да бъдеш мързелив", "Being lazy": "Да бъдеш мързелив",
"Builder Mode": "Режим на Създаване",
"Bypass SSL verification for Websites": "Изключване на SSL проверката за сайтове", "Bypass SSL verification for Websites": "Изключване на SSL проверката за сайтове",
"Cancel": "Отказ", "Cancel": "Отказ",
"Categories": "Категории", "Capabilities": "",
"Change Password": "Промяна на Парола", "Change Password": "Промяна на Парола",
"Chat": "Чат", "Chat": "Чат",
"Chat Bubble UI": "UI за чат бублон", "Chat Bubble UI": "UI за чат бублон",
@ -83,7 +84,6 @@
"Citation": "Цитат", "Citation": "Цитат",
"Click here for help.": "Натиснете тук за помощ.", "Click here for help.": "Натиснете тук за помощ.",
"Click here to": "Натиснете тук за", "Click here to": "Натиснете тук за",
"Click here to check other modelfiles.": "Натиснете тук за проверка на други моделфайлове.",
"Click here to select": "Натиснете тук, за да изберете", "Click here to select": "Натиснете тук, за да изберете",
"Click here to select a csv file.": "Натиснете тук, за да изберете csv файл.", "Click here to select a csv file.": "Натиснете тук, за да изберете csv файл.",
"Click here to select documents.": "Натиснете тук, за да изберете документи.", "Click here to select documents.": "Натиснете тук, за да изберете документи.",
@ -108,7 +108,7 @@
"Copy Link": "Копиране на връзка", "Copy Link": "Копиране на връзка",
"Copying to clipboard was successful!": "Копирането в клипборда беше успешно!", "Copying to clipboard was successful!": "Копирането в клипборда беше успешно!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Създайте кратка фраза от 3-5 думи като заглавие за следващото запитване, като стриктно спазвате ограничението от 3-5 думи и избягвате използването на думата 'заглавие':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Създайте кратка фраза от 3-5 думи като заглавие за следващото запитване, като стриктно спазвате ограничението от 3-5 думи и избягвате използването на думата 'заглавие':",
"Create a modelfile": "Създаване на модфайл", "Create a model": "",
"Create Account": "Създаване на Акаунт", "Create Account": "Създаване на Акаунт",
"Create new key": "Създаване на нов ключ", "Create new key": "Създаване на нов ключ",
"Create new secret key": "Създаване на нов секретен ключ", "Create new secret key": "Създаване на нов секретен ключ",
@ -117,7 +117,7 @@
"Current Model": "Текущ модел", "Current Model": "Текущ модел",
"Current Password": "Текуща Парола", "Current Password": "Текуща Парола",
"Custom": "Персонализиран", "Custom": "Персонализиран",
"Customize Ollama models for a specific purpose": "Персонализиране на Ollama моделите за конкретна цел", "Customize models for a specific purpose": "",
"Dark": "Тъмен", "Dark": "Тъмен",
"Dashboard": "Панел", "Dashboard": "Панел",
"Database": "База данни", "Database": "База данни",
@ -132,17 +132,17 @@
"delete": "изтриване", "delete": "изтриване",
"Delete": "Изтриване", "Delete": "Изтриване",
"Delete a model": "Изтриване на модел", "Delete a model": "Изтриване на модел",
"Delete All Chats": "",
"Delete chat": "Изтриване на чат", "Delete chat": "Изтриване на чат",
"Delete Chat": "Изтриване на Чат", "Delete Chat": "Изтриване на Чат",
"Delete Chats": "Изтриване на Чатове",
"delete this link": "Изтриване на този линк", "delete this link": "Изтриване на този линк",
"Delete User": "Изтриване на потребител", "Delete User": "Изтриване на потребител",
"Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}",
"Deleted {{tagName}}": "Изтрито {{tagName}}", "Deleted {{name}}": "",
"Description": "Описание", "Description": "Описание",
"Didn't fully follow instructions": "Не следва инструкциите", "Didn't fully follow instructions": "Не следва инструкциите",
"Disabled": "Деактивиран", "Disabled": "Деактивиран",
"Discover a modelfile": "Откриване на модфайл", "Discover a model": "",
"Discover a prompt": "Откриване на промпт", "Discover a prompt": "Откриване на промпт",
"Discover, download, and explore custom prompts": "Откриване, сваляне и преглед на персонализирани промптове", "Discover, download, and explore custom prompts": "Откриване, сваляне и преглед на персонализирани промптове",
"Discover, download, and explore model presets": "Откриване, сваляне и преглед на пресетове на модели", "Discover, download, and explore model presets": "Откриване, сваляне и преглед на пресетове на модели",
@ -176,11 +176,6 @@
"Enter Chunk Size": "Въведете Chunk Size", "Enter Chunk Size": "Въведете Chunk Size",
"Enter Image Size (e.g. 512x512)": "Въведете размер на изображението (напр. 512x512)", "Enter Image Size (e.g. 512x512)": "Въведете размер на изображението (напр. 512x512)",
"Enter language codes": "Въведете кодове на езика", "Enter language codes": "Въведете кодове на езика",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Въведете LiteLLM API Base URL (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Въведете LiteLLM API Key (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Въведете LiteLLM API RPM (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Въведете LiteLLM Model (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Въведете Max Tokens (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Въведете таг на модел (напр. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Въведете таг на модел (напр. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Въведете брой стъпки (напр. 50)", "Enter Number of Steps (e.g. 50)": "Въведете брой стъпки (напр. 50)",
"Enter Score": "Въведете оценка", "Enter Score": "Въведете оценка",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "Експортване на всички чатове (За всички потребители)", "Export All Chats (All Users)": "Експортване на всички чатове (За всички потребители)",
"Export Chats": "Експортване на чатове", "Export Chats": "Експортване на чатове",
"Export Documents Mapping": "Експортване на документен мапинг", "Export Documents Mapping": "Експортване на документен мапинг",
"Export Modelfiles": "Експортване на модфайлове", "Export Models": "",
"Export Prompts": "Експортване на промптове", "Export Prompts": "Експортване на промптове",
"Failed to create API Key.": "Неуспешно създаване на API ключ.", "Failed to create API Key.": "Неуспешно създаване на API ключ.",
"Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда", "Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда",
@ -209,7 +204,7 @@
"Focus chat input": "Фокусиране на чат вход", "Focus chat input": "Фокусиране на чат вход",
"Followed instructions perfectly": "Следвайте инструкциите перфектно", "Followed instructions perfectly": "Следвайте инструкциите перфектно",
"Format your variables using square brackets like this:": "Форматирайте вашите променливи, като използвате квадратни скоби, както следва:", "Format your variables using square brackets like this:": "Форматирайте вашите променливи, като използвате квадратни скоби, както следва:",
"From (Base Model)": "От (Базов модел)", "Frequencey Penalty": "",
"Full Screen Mode": "На Цял екран", "Full Screen Mode": "На Цял екран",
"General": "Основни", "General": "Основни",
"General Settings": "Основни Настройки", "General Settings": "Основни Настройки",
@ -220,7 +215,6 @@
"Hello, {{name}}": "Здравей, {{name}}", "Hello, {{name}}": "Здравей, {{name}}",
"Help": "Помощ", "Help": "Помощ",
"Hide": "Скрий", "Hide": "Скрий",
"Hide Additional Params": "Скрий допълнителни параметри",
"How can I help you today?": "Как мога да ви помогна днес?", "How can I help you today?": "Как мога да ви помогна днес?",
"Hybrid Search": "Hybrid Search", "Hybrid Search": "Hybrid Search",
"Image Generation (Experimental)": "Генерация на изображения (Експериментално)", "Image Generation (Experimental)": "Генерация на изображения (Експериментално)",
@ -229,7 +223,7 @@
"Images": "Изображения", "Images": "Изображения",
"Import Chats": "Импортване на чатове", "Import Chats": "Импортване на чатове",
"Import Documents Mapping": "Импортване на документен мапинг", "Import Documents Mapping": "Импортване на документен мапинг",
"Import Modelfiles": "Импортване на модфайлове", "Import Models": "",
"Import Prompts": "Импортване на промптове", "Import Prompts": "Импортване на промптове",
"Include `--api` flag when running stable-diffusion-webui": "Включете флага `--api`, когато стартирате stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Включете флага `--api`, когато стартирате stable-diffusion-webui",
"Input commands": "Въведете команди", "Input commands": "Въведете команди",
@ -238,6 +232,7 @@
"January": "Януари", "January": "Януари",
"join our Discord for help.": "свържете се с нашия Discord за помощ.", "join our Discord for help.": "свържете се с нашия Discord за помощ.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "Июл", "July": "Июл",
"June": "Июн", "June": "Июн",
"JWT Expiration": "JWT Expiration", "JWT Expiration": "JWT Expiration",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "Направено от OpenWebUI общността", "Made by OpenWebUI Community": "Направено от OpenWebUI общността",
"Make sure to enclose them with": "Уверете се, че са заключени с", "Make sure to enclose them with": "Уверете се, че са заключени с",
"Manage LiteLLM Models": "Управление на LiteLLM Моделите",
"Manage Models": "Управление на Моделите", "Manage Models": "Управление на Моделите",
"Manage Ollama Models": "Управление на Ollama Моделите", "Manage Ollama Models": "Управление на Ollama Моделите",
"March": "Март", "March": "Март",
"Max Tokens": "Max Tokens", "Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 модели могат да бъдат сваляни едновременно. Моля, опитайте отново по-късно.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 модели могат да бъдат сваляни едновременно. Моля, опитайте отново по-късно.",
"May": "Май", "May": "Май",
"Memories accessible by LLMs will be shown here.": "Мемории достъпни от LLMs ще бъдат показани тук.", "Memories accessible by LLMs will be shown here.": "Мемории достъпни от LLMs ще бъдат показани тук.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "Моделът '{{modelName}}' беше успешно свален.", "Model '{{modelName}}' has been successfully downloaded.": "Моделът '{{modelName}}' беше успешно свален.",
"Model '{{modelTag}}' is already in queue for downloading.": "Моделът '{{modelTag}}' е вече в очакване за сваляне.", "Model '{{modelTag}}' is already in queue for downloading.": "Моделът '{{modelTag}}' е вече в очакване за сваляне.",
"Model {{modelId}} not found": "Моделът {{modelId}} не е намерен", "Model {{modelId}} not found": "Моделът {{modelId}} не е намерен",
"Model {{modelName}} already exists.": "Моделът {{modelName}} вече съществува.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Открит е път до файловата система на модела. За актуализацията се изисква съкратено име на модела, не може да продължи.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Открит е път до файловата система на модела. За актуализацията се изисква съкратено име на модела, не може да продължи.",
"Model Name": "Име на модел", "Model ID": "",
"Model not selected": "Не е избран модел", "Model not selected": "Не е избран модел",
"Model Tag Name": "Име на таг на модел", "Model Params": "",
"Model Whitelisting": "Модел Whitelisting", "Model Whitelisting": "Модел Whitelisting",
"Model(s) Whitelisted": "Модели Whitelisted", "Model(s) Whitelisted": "Модели Whitelisted",
"Modelfile": "Модфайл",
"Modelfile Advanced Settings": "Разширени настройки на модфайл",
"Modelfile Content": "Съдържание на модфайл", "Modelfile Content": "Съдържание на модфайл",
"Modelfiles": "Модфайлове",
"Models": "Модели", "Models": "Модели",
"More": "Повече", "More": "Повече",
"Name": "Име", "Name": "Име",
"Name Tag": "Име Таг", "Name Tag": "Име Таг",
"Name your modelfile": "Име на модфайла", "Name your model": "",
"New Chat": "Нов чат", "New Chat": "Нов чат",
"New Password": "Нова парола", "New Password": "Нова парола",
"No results found": "Няма намерени резултати", "No results found": "Няма намерени резултати",
"No source available": "Няма наличен източник", "No source available": "Няма наличен източник",
"Not factually correct": "Не е фактологически правилно", "Not factually correct": "Не е фактологически правилно",
"Not sure what to add?": "Не сте сигурни, какво да добавите?",
"Not sure what to write? Switch to": "Не сте сигурни, какво да напишете? Превключете към",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Забележка: Ако зададете минимален резултат, търсенето ще върне само документи с резултат, по-голям или равен на минималния резултат.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Забележка: Ако зададете минимален резултат, търсенето ще върне само документи с резултат, по-голям или равен на минималния резултат.",
"Notifications": "Десктоп Известия", "Notifications": "Десктоп Известия",
"November": "Ноември", "November": "Ноември",
@ -322,7 +311,6 @@
"or": "или", "or": "или",
"Other": "Other", "Other": "Other",
"Overview": "Обзор", "Overview": "Обзор",
"Parameters": "Параметри",
"Password": "Парола", "Password": "Парола",
"PDF document (.pdf)": "PDF документ (.pdf)", "PDF document (.pdf)": "PDF документ (.pdf)",
"PDF Extract Images (OCR)": "PDF Extract Images (OCR)", "PDF Extract Images (OCR)": "PDF Extract Images (OCR)",
@ -342,10 +330,8 @@
"Prompts": "Промптове", "Prompts": "Промптове",
"Pull \"{{searchValue}}\" from Ollama.com": "Извади \"{{searchValue}}\" от Ollama.com", "Pull \"{{searchValue}}\" from Ollama.com": "Извади \"{{searchValue}}\" от Ollama.com",
"Pull a model from Ollama.com": "Издърпайте модел от Ollama.com", "Pull a model from Ollama.com": "Издърпайте модел от Ollama.com",
"Pull Progress": "Прогрес на издърпването",
"Query Params": "Query Параметри", "Query Params": "Query Параметри",
"RAG Template": "RAG Шаблон", "RAG Template": "RAG Шаблон",
"Raw Format": "Raw Формат",
"Read Aloud": "Прочети на Голос", "Read Aloud": "Прочети на Голос",
"Record voice": "Записване на глас", "Record voice": "Записване на глас",
"Redirecting you to OpenWebUI Community": "Пренасочване към OpenWebUI общността", "Redirecting you to OpenWebUI Community": "Пренасочване към OpenWebUI общността",
@ -356,7 +342,6 @@
"Remove Model": "Изтриване на модела", "Remove Model": "Изтриване на модела",
"Rename": "Преименуване", "Rename": "Преименуване",
"Repeat Last N": "Repeat Last N", "Repeat Last N": "Repeat Last N",
"Repeat Penalty": "Repeat Penalty",
"Request Mode": "Request Mode", "Request Mode": "Request Mode",
"Reranking Model": "Reranking Model", "Reranking Model": "Reranking Model",
"Reranking model disabled": "Reranking model disabled", "Reranking model disabled": "Reranking model disabled",
@ -377,14 +362,17 @@
"Search": "Търси", "Search": "Търси",
"Search a model": "Търси модел", "Search a model": "Търси модел",
"Search Documents": "Търси Документи", "Search Documents": "Търси Документи",
"Search Models": "",
"Search Prompts": "Търси Промптове", "Search Prompts": "Търси Промптове",
"See readme.md for instructions": "Виж readme.md за инструкции", "See readme.md for instructions": "Виж readme.md за инструкции",
"See what's new": "Виж какво е новото", "See what's new": "Виж какво е новото",
"Seed": "Seed", "Seed": "Seed",
"Select a base model": "",
"Select a mode": "Изберете режим", "Select a mode": "Изберете режим",
"Select a model": "Изберете модел", "Select a model": "Изберете модел",
"Select an Ollama instance": "Изберете Ollama инстанция", "Select an Ollama instance": "Изберете Ollama инстанция",
"Select model": "Изберете модел", "Select model": "Изберете модел",
"Selected model(s) do not support image inputs": "",
"Send": "Изпрати", "Send": "Изпрати",
"Send a Message": "Изпращане на Съобщение", "Send a Message": "Изпращане на Съобщение",
"Send message": "Изпращане на съобщение", "Send message": "Изпращане на съобщение",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "Споделите с OpenWebUI Общността", "Share to OpenWebUI Community": "Споделите с OpenWebUI Общността",
"short-summary": "short-summary", "short-summary": "short-summary",
"Show": "Покажи", "Show": "Покажи",
"Show Additional Params": "Покажи допълнителни параметри",
"Show shortcuts": "Покажи", "Show shortcuts": "Покажи",
"Showcased creativity": "Показана креативност", "Showcased creativity": "Показана креативност",
"sidebar": "sidebar", "sidebar": "sidebar",
@ -425,7 +412,6 @@
"Success": "Успех", "Success": "Успех",
"Successfully updated.": "Успешно обновено.", "Successfully updated.": "Успешно обновено.",
"Suggested": "Препоръчано", "Suggested": "Препоръчано",
"Sync All": "Синхронизиране на всички",
"System": "Система", "System": "Система",
"System Prompt": "Системен Промпт", "System Prompt": "Системен Промпт",
"Tags": "Тагове", "Tags": "Тагове",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Напиши описание в 50 знака, което описва [тема или ключова дума].", "Write a summary in 50 words that summarizes [topic or keyword].": "Напиши описание в 50 знака, което описва [тема или ключова дума].",
"Yesterday": "вчера", "Yesterday": "вчера",
"You": "вие", "You": "вие",
"You cannot clone a base model": "",
"You have no archived conversations.": "Нямате архивирани разговори.", "You have no archived conversations.": "Нямате архивирани разговори.",
"You have shared this chat": "Вие сте споделели този чат", "You have shared this chat": "Вие сте споделели този чат",
"You're a helpful assistant.": "Вие сте полезен асистент.", "You're a helpful assistant.": "Вие сте полезен асистент.",

View File

@ -3,6 +3,8 @@
"(Beta)": "(পরিক্ষামূলক)", "(Beta)": "(পরিক্ষামূলক)",
"(e.g. `sh webui.sh --api`)": "(যেমন `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(যেমন `sh webui.sh --api`)",
"(latest)": "(সর্বশেষ)", "(latest)": "(সর্বশেষ)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} চিন্তা করছে...", "{{modelName}} is thinking...": "{{modelName}} চিন্তা করছে...",
"{{user}}'s Chats": "{{user}}র চ্যাটস", "{{user}}'s Chats": "{{user}}র চ্যাটস",
"{{webUIName}} Backend Required": "{{webUIName}} ব্যাকএন্ড আবশ্যক", "{{webUIName}} Backend Required": "{{webUIName}} ব্যাকএন্ড আবশ্যক",
@ -11,9 +13,8 @@
"Account": "একাউন্ট", "Account": "একাউন্ট",
"Accurate information": "সঠিক তথ্য", "Accurate information": "সঠিক তথ্য",
"Add": "যোগ করুন", "Add": "যোগ করুন",
"Add a model": "একটি মডেল যোগ করুন", "Add a model id": "",
"Add a model tag name": "একটি মডেল ট্যাগ যোগ করুন", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "এই মডেলফাইলটির সম্পর্কে সংক্ষিপ্ত বিবরণ যোগ করুন",
"Add a short title for this prompt": "এই প্রম্পটের জন্য একটি সংক্ষিপ্ত টাইটেল যোগ করুন", "Add a short title for this prompt": "এই প্রম্পটের জন্য একটি সংক্ষিপ্ত টাইটেল যোগ করুন",
"Add a tag": "একটি ট্যাগ যোগ করুন", "Add a tag": "একটি ট্যাগ যোগ করুন",
"Add custom prompt": "একটি কাস্টম প্রম্পট যোগ করুন", "Add custom prompt": "একটি কাস্টম প্রম্পট যোগ করুন",
@ -29,6 +30,7 @@
"Admin Panel": "এডমিন প্যানেল", "Admin Panel": "এডমিন প্যানেল",
"Admin Settings": "এডমিন সেটিংস", "Admin Settings": "এডমিন সেটিংস",
"Advanced Parameters": "এডভান্সড প্যারামিটার্স", "Advanced Parameters": "এডভান্সড প্যারামিটার্স",
"Advanced Params": "",
"all": "সব", "all": "সব",
"All Documents": "সব ডকুমেন্ট", "All Documents": "সব ডকুমেন্ট",
"All Users": "সব ইউজার", "All Users": "সব ইউজার",
@ -43,7 +45,6 @@
"API Key": "এপিআই কোড", "API Key": "এপিআই কোড",
"API Key created.": "একটি এপিআই কোড তৈরি করা হয়েছে.", "API Key created.": "একটি এপিআই কোড তৈরি করা হয়েছে.",
"API keys": "এপিআই কোডস", "API keys": "এপিআই কোডস",
"API RPM": "এপিআই আরপিএম",
"April": "আপ্রিল", "April": "আপ্রিল",
"Archive": "আর্কাইভ", "Archive": "আর্কাইভ",
"Archived Chats": "চ্যাট ইতিহাস সংরক্ষণাগার", "Archived Chats": "চ্যাট ইতিহাস সংরক্ষণাগার",
@ -60,12 +61,12 @@
"available!": "উপলব্ধ!", "available!": "উপলব্ধ!",
"Back": "পেছনে", "Back": "পেছনে",
"Bad Response": "খারাপ প্রতিক্রিয়া", "Bad Response": "খারাপ প্রতিক্রিয়া",
"Base Model (From)": "",
"before": "পূর্ববর্তী", "before": "পূর্ববর্তী",
"Being lazy": "অলস হওয়া", "Being lazy": "অলস হওয়া",
"Builder Mode": "বিল্ডার মোড",
"Bypass SSL verification for Websites": "ওয়েবসাইটের জন্য SSL যাচাই বাতিল করুন", "Bypass SSL verification for Websites": "ওয়েবসাইটের জন্য SSL যাচাই বাতিল করুন",
"Cancel": "বাতিল", "Cancel": "বাতিল",
"Categories": "ক্যাটাগরিসমূহ", "Capabilities": "",
"Change Password": "পাসওয়ার্ড পরিবর্তন করুন", "Change Password": "পাসওয়ার্ড পরিবর্তন করুন",
"Chat": "চ্যাট", "Chat": "চ্যাট",
"Chat Bubble UI": "চ্যাট বাবল UI", "Chat Bubble UI": "চ্যাট বাবল UI",
@ -83,7 +84,6 @@
"Citation": "উদ্ধৃতি", "Citation": "উদ্ধৃতি",
"Click here for help.": "সাহায্যের জন্য এখানে ক্লিক করুন", "Click here for help.": "সাহায্যের জন্য এখানে ক্লিক করুন",
"Click here to": "এখানে ক্লিক করুন", "Click here to": "এখানে ক্লিক করুন",
"Click here to check other modelfiles.": "অন্যান্য মডেলফাইল চেক করার জন্য এখানে ক্লিক করুন",
"Click here to select": "নির্বাচন করার জন্য এখানে ক্লিক করুন", "Click here to select": "নির্বাচন করার জন্য এখানে ক্লিক করুন",
"Click here to select a csv file.": "একটি csv ফাইল নির্বাচন করার জন্য এখানে ক্লিক করুন", "Click here to select a csv file.": "একটি csv ফাইল নির্বাচন করার জন্য এখানে ক্লিক করুন",
"Click here to select documents.": "ডকুমেন্টগুলো নির্বাচন করার জন্য এখানে ক্লিক করুন", "Click here to select documents.": "ডকুমেন্টগুলো নির্বাচন করার জন্য এখানে ক্লিক করুন",
@ -108,7 +108,7 @@
"Copy Link": "লিংক কপি করুন", "Copy Link": "লিংক কপি করুন",
"Copying to clipboard was successful!": "ক্লিপবোর্ডে কপি করা সফল হয়েছে", "Copying to clipboard was successful!": "ক্লিপবোর্ডে কপি করা সফল হয়েছে",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "'title' শব্দটি ব্যবহার না করে নিম্মোক্ত অনুসন্ধানের জন্য সংক্ষেপে সর্বোচ্চ ৩-৫ শব্দের একটি হেডার তৈরি করুন", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "'title' শব্দটি ব্যবহার না করে নিম্মোক্ত অনুসন্ধানের জন্য সংক্ষেপে সর্বোচ্চ ৩-৫ শব্দের একটি হেডার তৈরি করুন",
"Create a modelfile": "একটি মডেলফাইল তৈরি করুন", "Create a model": "",
"Create Account": "একাউন্ট তৈরি করুন", "Create Account": "একাউন্ট তৈরি করুন",
"Create new key": "একটি নতুন কী তৈরি করুন", "Create new key": "একটি নতুন কী তৈরি করুন",
"Create new secret key": "একটি নতুন সিক্রেট কী তৈরি করুন", "Create new secret key": "একটি নতুন সিক্রেট কী তৈরি করুন",
@ -117,7 +117,7 @@
"Current Model": "বর্তমান মডেল", "Current Model": "বর্তমান মডেল",
"Current Password": "বর্তমান পাসওয়ার্ড", "Current Password": "বর্তমান পাসওয়ার্ড",
"Custom": "কাস্টম", "Custom": "কাস্টম",
"Customize Ollama models for a specific purpose": "নির্দিষ্ট উদ্দেশ্যে Ollama মডেল পরিবর্তন করুন", "Customize models for a specific purpose": "",
"Dark": "ডার্ক", "Dark": "ডার্ক",
"Dashboard": "ড্যাশবোর্ড", "Dashboard": "ড্যাশবোর্ড",
"Database": "ডেটাবেজ", "Database": "ডেটাবেজ",
@ -132,17 +132,17 @@
"delete": "মুছে ফেলুন", "delete": "মুছে ফেলুন",
"Delete": "মুছে ফেলুন", "Delete": "মুছে ফেলুন",
"Delete a model": "একটি মডেল মুছে ফেলুন", "Delete a model": "একটি মডেল মুছে ফেলুন",
"Delete All Chats": "",
"Delete chat": "চ্যাট মুছে ফেলুন", "Delete chat": "চ্যাট মুছে ফেলুন",
"Delete Chat": "চ্যাট মুছে ফেলুন", "Delete Chat": "চ্যাট মুছে ফেলুন",
"Delete Chats": "চ্যাটগুলো মুছে ফেলুন",
"delete this link": "এই লিংক মুছে ফেলুন", "delete this link": "এই লিংক মুছে ফেলুন",
"Delete User": "ইউজার মুছে ফেলুন", "Delete User": "ইউজার মুছে ফেলুন",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} মুছে ফেলা হয়েছে", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} মুছে ফেলা হয়েছে",
"Deleted {{tagName}}": "{{tagName}} মুছে ফেলা হয়েছে", "Deleted {{name}}": "",
"Description": "বিবরণ", "Description": "বিবরণ",
"Didn't fully follow instructions": "ইনস্ট্রাকশন সম্পূর্ণ অনুসরণ করা হয়নি", "Didn't fully follow instructions": "ইনস্ট্রাকশন সম্পূর্ণ অনুসরণ করা হয়নি",
"Disabled": "অক্ষম", "Disabled": "অক্ষম",
"Discover a modelfile": "একটি মডেলফাইল খুঁজে বের করুন", "Discover a model": "",
"Discover a prompt": "একটি প্রম্পট খুঁজে বের করুন", "Discover a prompt": "একটি প্রম্পট খুঁজে বের করুন",
"Discover, download, and explore custom prompts": "কাস্টম প্রম্পটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন", "Discover, download, and explore custom prompts": "কাস্টম প্রম্পটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন",
"Discover, download, and explore model presets": "মডেল প্রিসেটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন", "Discover, download, and explore model presets": "মডেল প্রিসেটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন",
@ -176,11 +176,6 @@
"Enter Chunk Size": "চাংক সাইজ লিখুন", "Enter Chunk Size": "চাংক সাইজ লিখুন",
"Enter Image Size (e.g. 512x512)": "ছবির মাপ লিখুন (যেমন 512x512)", "Enter Image Size (e.g. 512x512)": "ছবির মাপ লিখুন (যেমন 512x512)",
"Enter language codes": "ল্যাঙ্গুয়েজ কোড লিখুন", "Enter language codes": "ল্যাঙ্গুয়েজ কোড লিখুন",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "LiteLLM এপিআই বেজ ইউআরএল লিখুন (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "LiteLLM এপিআই কোড লিখুন (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM এপিআই RPM দিন (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "LiteLLM মডেল দিন (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "সর্বোচ্চ টোকেন সংখ্যা দিন (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "মডেল ট্যাগ লিখুন (e.g. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "মডেল ট্যাগ লিখুন (e.g. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "ধাপের সংখ্যা দিন (যেমন: 50)", "Enter Number of Steps (e.g. 50)": "ধাপের সংখ্যা দিন (যেমন: 50)",
"Enter Score": "স্কোর দিন", "Enter Score": "স্কোর দিন",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "সব চ্যাট এক্সপোর্ট করুন (সব ইউজারের)", "Export All Chats (All Users)": "সব চ্যাট এক্সপোর্ট করুন (সব ইউজারের)",
"Export Chats": "চ্যাটগুলো এক্সপোর্ট করুন", "Export Chats": "চ্যাটগুলো এক্সপোর্ট করুন",
"Export Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং এক্সপোর্ট করুন", "Export Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং এক্সপোর্ট করুন",
"Export Modelfiles": "মডেলফাইলগুলো এক্সপোর্ট করুন", "Export Models": "",
"Export Prompts": "প্রম্পটগুলো একপোর্ট করুন", "Export Prompts": "প্রম্পটগুলো একপোর্ট করুন",
"Failed to create API Key.": "API Key তৈরি করা যায়নি।", "Failed to create API Key.": "API Key তৈরি করা যায়নি।",
"Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি", "Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি",
@ -209,7 +204,7 @@
"Focus chat input": "চ্যাট ইনপুট ফোকাস করুন", "Focus chat input": "চ্যাট ইনপুট ফোকাস করুন",
"Followed instructions perfectly": "নির্দেশাবলী নিখুঁতভাবে অনুসরণ করা হয়েছে", "Followed instructions perfectly": "নির্দেশাবলী নিখুঁতভাবে অনুসরণ করা হয়েছে",
"Format your variables using square brackets like this:": "আপনার ভেরিয়বলগুলো এভাবে স্কয়ার ব্রাকেটের মাধ্যমে সাজান", "Format your variables using square brackets like this:": "আপনার ভেরিয়বলগুলো এভাবে স্কয়ার ব্রাকেটের মাধ্যমে সাজান",
"From (Base Model)": "উৎস (বেজ মডেল)", "Frequencey Penalty": "",
"Full Screen Mode": "ফুলস্ক্রিন মোড", "Full Screen Mode": "ফুলস্ক্রিন মোড",
"General": "সাধারণ", "General": "সাধারণ",
"General Settings": "সাধারণ সেটিংসমূহ", "General Settings": "সাধারণ সেটিংসমূহ",
@ -220,7 +215,6 @@
"Hello, {{name}}": "হ্যালো, {{name}}", "Hello, {{name}}": "হ্যালো, {{name}}",
"Help": "সহায়তা", "Help": "সহায়তা",
"Hide": "লুকান", "Hide": "লুকান",
"Hide Additional Params": "অতিরিক্ত প্যারামিটাগুলো লুকান",
"How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?", "How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?",
"Hybrid Search": "হাইব্রিড অনুসন্ধান", "Hybrid Search": "হাইব্রিড অনুসন্ধান",
"Image Generation (Experimental)": "ইমেজ জেনারেশন (পরিক্ষামূলক)", "Image Generation (Experimental)": "ইমেজ জেনারেশন (পরিক্ষামূলক)",
@ -229,7 +223,7 @@
"Images": "ছবিসমূহ", "Images": "ছবিসমূহ",
"Import Chats": "চ্যাটগুলি ইমপোর্ট করুন", "Import Chats": "চ্যাটগুলি ইমপোর্ট করুন",
"Import Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং ইমপোর্ট করুন", "Import Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং ইমপোর্ট করুন",
"Import Modelfiles": "মডেলফাইলগুলো ইমপোর্ট করুন", "Import Models": "",
"Import Prompts": "প্রম্পটগুলো ইমপোর্ট করুন", "Import Prompts": "প্রম্পটগুলো ইমপোর্ট করুন",
"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui চালু করার সময় `--api` ফ্ল্যাগ সংযুক্ত করুন", "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui চালু করার সময় `--api` ফ্ল্যাগ সংযুক্ত করুন",
"Input commands": "ইনপুট কমান্ডস", "Input commands": "ইনপুট কমান্ডস",
@ -238,6 +232,7 @@
"January": "জানুয়ারী", "January": "জানুয়ারী",
"join our Discord for help.": "সাহায্যের জন্য আমাদের Discord-এ যুক্ত হোন", "join our Discord for help.": "সাহায্যের জন্য আমাদের Discord-এ যুক্ত হোন",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "জুলাই", "July": "জুলাই",
"June": "জুন", "June": "জুন",
"JWT Expiration": "JWT-র মেয়াদ", "JWT Expiration": "JWT-র মেয়াদ",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "OpenWebUI কমিউনিটিকর্তৃক নির্মিত", "Made by OpenWebUI Community": "OpenWebUI কমিউনিটিকর্তৃক নির্মিত",
"Make sure to enclose them with": "এটা দিয়ে বন্ধনী দিতে ভুলবেন না", "Make sure to enclose them with": "এটা দিয়ে বন্ধনী দিতে ভুলবেন না",
"Manage LiteLLM Models": "LiteLLM মডেল ব্যবস্থাপনা করুন",
"Manage Models": "মডেলসমূহ ব্যবস্থাপনা করুন", "Manage Models": "মডেলসমূহ ব্যবস্থাপনা করুন",
"Manage Ollama Models": "Ollama মডেলসূহ ব্যবস্থাপনা করুন", "Manage Ollama Models": "Ollama মডেলসূহ ব্যবস্থাপনা করুন",
"March": "মার্চ", "March": "মার্চ",
"Max Tokens": "সর্বোচ্চ টোকন", "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.": "একসঙ্গে সর্বোচ্চ তিনটি মডেল ডাউনলোড করা যায়। দয়া করে পরে আবার চেষ্টা করুন।",
"May": "মে", "May": "মে",
"Memories accessible by LLMs will be shown here.": "LLMs দ্বারা অ্যাক্সেসযোগ্য মেমোরিগুলি এখানে দেখানো হবে।", "Memories accessible by LLMs will be shown here.": "LLMs দ্বারা অ্যাক্সেসযোগ্য মেমোরিগুলি এখানে দেখানো হবে।",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' মডেল সফলভাবে ডাউনলোড হয়েছে।", "Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' মডেল সফলভাবে ডাউনলোড হয়েছে।",
"Model '{{modelTag}}' is already in queue for downloading.": "{{modelTag}} ডাউনলোডের জন্য আগে থেকেই অপেক্ষমান আছে।", "Model '{{modelTag}}' is already in queue for downloading.": "{{modelTag}} ডাউনলোডের জন্য আগে থেকেই অপেক্ষমান আছে।",
"Model {{modelId}} not found": "{{modelId}} মডেল পাওয়া যায়নি", "Model {{modelId}} not found": "{{modelId}} মডেল পাওয়া যায়নি",
"Model {{modelName}} already exists.": "{{modelName}} মডেল আগে থেকেই আছে", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "মডেল ফাইলসিস্টেম পাথ পাওয়া গেছে। আপডেটের জন্য মডেলের শর্টনেম আবশ্যক, এগিয়ে যাওয়া যাচ্ছে না।", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "মডেল ফাইলসিস্টেম পাথ পাওয়া গেছে। আপডেটের জন্য মডেলের শর্টনেম আবশ্যক, এগিয়ে যাওয়া যাচ্ছে না।",
"Model Name": "মডেলের নাম", "Model ID": "",
"Model not selected": "মডেল নির্বাচন করা হয়নি", "Model not selected": "মডেল নির্বাচন করা হয়নি",
"Model Tag Name": "মডেলের ট্যাগ নাম", "Model Params": "",
"Model Whitelisting": "মডেল হোয়াইটলিস্টিং", "Model Whitelisting": "মডেল হোয়াইটলিস্টিং",
"Model(s) Whitelisted": "হোয়াইটলিস্টেড মডেল(সমূহ)", "Model(s) Whitelisted": "হোয়াইটলিস্টেড মডেল(সমূহ)",
"Modelfile": "মডেলফাইল",
"Modelfile Advanced Settings": "মডেলফাইল এডভান্সড সেটিসমূহ",
"Modelfile Content": "মডেলফাইল কনটেন্ট", "Modelfile Content": "মডেলফাইল কনটেন্ট",
"Modelfiles": "মডেলফাইলসমূহ",
"Models": "মডেলসমূহ", "Models": "মডেলসমূহ",
"More": "আরো", "More": "আরো",
"Name": "নাম", "Name": "নাম",
"Name Tag": "নামের ট্যাগ", "Name Tag": "নামের ট্যাগ",
"Name your modelfile": "আপনার মডেলফাইলের নাম দিন", "Name your model": "",
"New Chat": "নতুন চ্যাট", "New Chat": "নতুন চ্যাট",
"New Password": "নতুন পাসওয়ার্ড", "New Password": "নতুন পাসওয়ার্ড",
"No results found": "কোন ফলাফল পাওয়া যায়নি", "No results found": "কোন ফলাফল পাওয়া যায়নি",
"No source available": "কোন উৎস পাওয়া যায়নি", "No source available": "কোন উৎস পাওয়া যায়নি",
"Not factually correct": "তথ্যগত দিক থেকে সঠিক নয়", "Not factually correct": "তথ্যগত দিক থেকে সঠিক নয়",
"Not sure what to add?": "কী যুক্ত করতে হবে নিশ্চিত না?",
"Not sure what to write? Switch to": "কী লিখতে হবে নিশ্চিত না? পরিবর্তন করুন:",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "দ্রষ্টব্য: আপনি যদি ন্যূনতম স্কোর সেট করেন তবে অনুসন্ধানটি কেবলমাত্র ন্যূনতম স্কোরের চেয়ে বেশি বা সমান স্কোর সহ নথিগুলি ফেরত দেবে।", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "দ্রষ্টব্য: আপনি যদি ন্যূনতম স্কোর সেট করেন তবে অনুসন্ধানটি কেবলমাত্র ন্যূনতম স্কোরের চেয়ে বেশি বা সমান স্কোর সহ নথিগুলি ফেরত দেবে।",
"Notifications": "নোটিফিকেশনসমূহ", "Notifications": "নোটিফিকেশনসমূহ",
"November": "নভেম্বর", "November": "নভেম্বর",
@ -322,7 +311,6 @@
"or": "অথবা", "or": "অথবা",
"Other": "অন্যান্য", "Other": "অন্যান্য",
"Overview": "বিবরণ", "Overview": "বিবরণ",
"Parameters": "প্যারামিটারসমূহ",
"Password": "পাসওয়ার্ড", "Password": "পাসওয়ার্ড",
"PDF document (.pdf)": "PDF ডকুমেন্ট (.pdf)", "PDF document (.pdf)": "PDF ডকুমেন্ট (.pdf)",
"PDF Extract Images (OCR)": "পিডিএফ এর ছবি থেকে লেখা বের করুন (OCR)", "PDF Extract Images (OCR)": "পিডিএফ এর ছবি থেকে লেখা বের করুন (OCR)",
@ -342,10 +330,8 @@
"Prompts": "প্রম্পটসমূহ", "Prompts": "প্রম্পটসমূহ",
"Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com থেকে \"{{searchValue}}\" টানুন", "Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com থেকে \"{{searchValue}}\" টানুন",
"Pull a model from Ollama.com": "Ollama.com থেকে একটি টেনে আনুন আনুন", "Pull a model from Ollama.com": "Ollama.com থেকে একটি টেনে আনুন আনুন",
"Pull Progress": "Pull চলমান",
"Query Params": "Query প্যারামিটারসমূহ", "Query Params": "Query প্যারামিটারসমূহ",
"RAG Template": "RAG টেম্পলেট", "RAG Template": "RAG টেম্পলেট",
"Raw Format": "Raw ফরম্যাট",
"Read Aloud": "পড়াশোনা করুন", "Read Aloud": "পড়াশোনা করুন",
"Record voice": "ভয়েস রেকর্ড করুন", "Record voice": "ভয়েস রেকর্ড করুন",
"Redirecting you to OpenWebUI Community": "আপনাকে OpenWebUI কমিউনিটিতে পাঠানো হচ্ছে", "Redirecting you to OpenWebUI Community": "আপনাকে OpenWebUI কমিউনিটিতে পাঠানো হচ্ছে",
@ -356,7 +342,6 @@
"Remove Model": "মডেল রিমুভ করুন", "Remove Model": "মডেল রিমুভ করুন",
"Rename": "রেনেম", "Rename": "রেনেম",
"Repeat Last N": "রিপিট Last N", "Repeat Last N": "রিপিট Last N",
"Repeat Penalty": "রিপিট প্যানাল্টি",
"Request Mode": "রিকোয়েস্ট মোড", "Request Mode": "রিকোয়েস্ট মোড",
"Reranking Model": "রির্যাক্টিং মডেল", "Reranking Model": "রির্যাক্টিং মডেল",
"Reranking model disabled": "রির্যাক্টিং মডেল নিষ্ক্রিয় করা", "Reranking model disabled": "রির্যাক্টিং মডেল নিষ্ক্রিয় করা",
@ -377,14 +362,17 @@
"Search": "অনুসন্ধান", "Search": "অনুসন্ধান",
"Search a model": "মডেল অনুসন্ধান করুন", "Search a model": "মডেল অনুসন্ধান করুন",
"Search Documents": "ডকুমেন্টসমূহ অনুসন্ধান করুন", "Search Documents": "ডকুমেন্টসমূহ অনুসন্ধান করুন",
"Search Models": "",
"Search Prompts": "প্রম্পটসমূহ অনুসন্ধান করুন", "Search Prompts": "প্রম্পটসমূহ অনুসন্ধান করুন",
"See readme.md for instructions": "নির্দেশিকার জন্য readme.md দেখুন", "See readme.md for instructions": "নির্দেশিকার জন্য readme.md দেখুন",
"See what's new": "নতুন কী আছে দেখুন", "See what's new": "নতুন কী আছে দেখুন",
"Seed": "সীড", "Seed": "সীড",
"Select a base model": "",
"Select a mode": "একটি মডেল নির্বাচন করুন", "Select a mode": "একটি মডেল নির্বাচন করুন",
"Select a model": "একটি মডেল নির্বাচন করুন", "Select a model": "একটি মডেল নির্বাচন করুন",
"Select an Ollama instance": "একটি Ollama ইন্সট্যান্স নির্বাচন করুন", "Select an Ollama instance": "একটি Ollama ইন্সট্যান্স নির্বাচন করুন",
"Select model": "মডেল নির্বাচন করুন", "Select model": "মডেল নির্বাচন করুন",
"Selected model(s) do not support image inputs": "",
"Send": "পাঠান", "Send": "পাঠান",
"Send a Message": "একটি মেসেজ পাঠান", "Send a Message": "একটি মেসেজ পাঠান",
"Send message": "মেসেজ পাঠান", "Send message": "মেসেজ পাঠান",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "OpenWebUI কমিউনিটিতে শেয়ার করুন", "Share to OpenWebUI Community": "OpenWebUI কমিউনিটিতে শেয়ার করুন",
"short-summary": "সংক্ষিপ্ত বিবরণ", "short-summary": "সংক্ষিপ্ত বিবরণ",
"Show": "দেখান", "Show": "দেখান",
"Show Additional Params": "অতিরিক্ত প্যারামিটারগুলো দেখান",
"Show shortcuts": "শর্টকাটগুলো দেখান", "Show shortcuts": "শর্টকাটগুলো দেখান",
"Showcased creativity": "সৃজনশীলতা প্রদর্শন", "Showcased creativity": "সৃজনশীলতা প্রদর্শন",
"sidebar": "সাইডবার", "sidebar": "সাইডবার",
@ -425,7 +412,6 @@
"Success": "সফল", "Success": "সফল",
"Successfully updated.": "সফলভাবে আপডেট হয়েছে", "Successfully updated.": "সফলভাবে আপডেট হয়েছে",
"Suggested": "প্রস্তাবিত", "Suggested": "প্রস্তাবিত",
"Sync All": "সব সিংক্রোনাইজ করুন",
"System": "সিস্টেম", "System": "সিস্টেম",
"System Prompt": "সিস্টেম প্রম্পট", "System Prompt": "সিস্টেম প্রম্পট",
"Tags": "ট্যাগসমূহ", "Tags": "ট্যাগসমূহ",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "৫০ শব্দের মধ্যে [topic or keyword] এর একটি সারসংক্ষেপ লিখুন।", "Write a summary in 50 words that summarizes [topic or keyword].": "৫০ শব্দের মধ্যে [topic or keyword] এর একটি সারসংক্ষেপ লিখুন।",
"Yesterday": "আগামী", "Yesterday": "আগামী",
"You": "আপনি", "You": "আপনি",
"You cannot clone a base model": "",
"You have no archived conversations.": "আপনার কোনও আর্কাইভ করা কথোপকথন নেই।", "You have no archived conversations.": "আপনার কোনও আর্কাইভ করা কথোপকথন নেই।",
"You have shared this chat": "আপনি এই চ্যাটটি শেয়ার করেছেন", "You have shared this chat": "আপনি এই চ্যাটটি শেয়ার করেছেন",
"You're a helpful assistant.": "আপনি একজন উপকারী এসিস্ট্যান্ট", "You're a helpful assistant.": "আপনি একজন উপকারী এসিস্ট্যান্ট",

View File

@ -3,6 +3,8 @@
"(Beta)": "(Beta)", "(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)",
"(latest)": "(últim)", "(latest)": "(últim)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} està pensant...", "{{modelName}} is thinking...": "{{modelName}} està pensant...",
"{{user}}'s Chats": "{{user}}'s Chats", "{{user}}'s Chats": "{{user}}'s Chats",
"{{webUIName}} Backend Required": "Es requereix Backend de {{webUIName}}", "{{webUIName}} Backend Required": "Es requereix Backend de {{webUIName}}",
@ -11,9 +13,8 @@
"Account": "Compte", "Account": "Compte",
"Accurate information": "Informació precisa", "Accurate information": "Informació precisa",
"Add": "Afegir", "Add": "Afegir",
"Add a model": "Afegeix un model", "Add a model id": "",
"Add a model tag name": "Afegeix un nom d'etiqueta de model", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "Afegeix una descripció curta del que fa aquest arxiu de model",
"Add a short title for this prompt": "Afegeix un títol curt per aquest prompt", "Add a short title for this prompt": "Afegeix un títol curt per aquest prompt",
"Add a tag": "Afegeix una etiqueta", "Add a tag": "Afegeix una etiqueta",
"Add custom prompt": "Afegir un prompt personalitzat", "Add custom prompt": "Afegir un prompt personalitzat",
@ -29,6 +30,7 @@
"Admin Panel": "Panell d'Administració", "Admin Panel": "Panell d'Administració",
"Admin Settings": "Configuració d'Administració", "Admin Settings": "Configuració d'Administració",
"Advanced Parameters": "Paràmetres Avançats", "Advanced Parameters": "Paràmetres Avançats",
"Advanced Params": "",
"all": "tots", "all": "tots",
"All Documents": "Tots els Documents", "All Documents": "Tots els Documents",
"All Users": "Tots els Usuaris", "All Users": "Tots els Usuaris",
@ -43,7 +45,6 @@
"API Key": "Clau de l'API", "API Key": "Clau de l'API",
"API Key created.": "Clau de l'API creada.", "API Key created.": "Clau de l'API creada.",
"API keys": "Claus de l'API", "API keys": "Claus de l'API",
"API RPM": "RPM de l'API",
"April": "Abril", "April": "Abril",
"Archive": "Arxiu", "Archive": "Arxiu",
"Archived Chats": "Arxiu d'historial de xat", "Archived Chats": "Arxiu d'historial de xat",
@ -60,12 +61,12 @@
"available!": "disponible!", "available!": "disponible!",
"Back": "Enrere", "Back": "Enrere",
"Bad Response": "Resposta Erroni", "Bad Response": "Resposta Erroni",
"Base Model (From)": "",
"before": "abans", "before": "abans",
"Being lazy": "Ser l'estupidez", "Being lazy": "Ser l'estupidez",
"Builder Mode": "Mode Constructor",
"Bypass SSL verification for Websites": "Desactivar la verificació SSL per a l'accés a l'Internet", "Bypass SSL verification for Websites": "Desactivar la verificació SSL per a l'accés a l'Internet",
"Cancel": "Cancel·la", "Cancel": "Cancel·la",
"Categories": "Categories", "Capabilities": "",
"Change Password": "Canvia la Contrasenya", "Change Password": "Canvia la Contrasenya",
"Chat": "Xat", "Chat": "Xat",
"Chat Bubble UI": "Chat Bubble UI", "Chat Bubble UI": "Chat Bubble UI",
@ -83,7 +84,6 @@
"Citation": "Citació", "Citation": "Citació",
"Click here for help.": "Fes clic aquí per ajuda.", "Click here for help.": "Fes clic aquí per ajuda.",
"Click here to": "Fes clic aquí per", "Click here to": "Fes clic aquí per",
"Click here to check other modelfiles.": "Fes clic aquí per comprovar altres fitxers de model.",
"Click here to select": "Fes clic aquí per seleccionar", "Click here to select": "Fes clic aquí per seleccionar",
"Click here to select a csv file.": "Fes clic aquí per seleccionar un fitxer csv.", "Click here to select a csv file.": "Fes clic aquí per seleccionar un fitxer csv.",
"Click here to select documents.": "Fes clic aquí per seleccionar documents.", "Click here to select documents.": "Fes clic aquí per seleccionar documents.",
@ -108,7 +108,7 @@
"Copy Link": "Copiar l'enllaç", "Copy Link": "Copiar l'enllaç",
"Copying to clipboard was successful!": "La còpia al porta-retalls ha estat exitosa!", "Copying to clipboard was successful!": "La còpia al porta-retalls ha estat exitosa!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Crea una frase concisa de 3-5 paraules com a capçalera per a la següent consulta, seguint estrictament el límit de 3-5 paraules i evitant l'ús de la paraula 'títol':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Crea una frase concisa de 3-5 paraules com a capçalera per a la següent consulta, seguint estrictament el límit de 3-5 paraules i evitant l'ús de la paraula 'títol':",
"Create a modelfile": "Crea un fitxer de model", "Create a model": "",
"Create Account": "Crea un Compte", "Create Account": "Crea un Compte",
"Create new key": "Crea una nova clau", "Create new key": "Crea una nova clau",
"Create new secret key": "Crea una nova clau secreta", "Create new secret key": "Crea una nova clau secreta",
@ -117,7 +117,7 @@
"Current Model": "Model Actual", "Current Model": "Model Actual",
"Current Password": "Contrasenya Actual", "Current Password": "Contrasenya Actual",
"Custom": "Personalitzat", "Custom": "Personalitzat",
"Customize Ollama models for a specific purpose": "Personalitza els models Ollama per a un propòsit específic", "Customize models for a specific purpose": "",
"Dark": "Fosc", "Dark": "Fosc",
"Dashboard": "Tauler", "Dashboard": "Tauler",
"Database": "Base de Dades", "Database": "Base de Dades",
@ -132,17 +132,17 @@
"delete": "esborra", "delete": "esborra",
"Delete": "Esborra", "Delete": "Esborra",
"Delete a model": "Esborra un model", "Delete a model": "Esborra un model",
"Delete All Chats": "",
"Delete chat": "Esborra xat", "Delete chat": "Esborra xat",
"Delete Chat": "Esborra Xat", "Delete Chat": "Esborra Xat",
"Delete Chats": "Esborra Xats",
"delete this link": "Esborra aquest enllaç", "delete this link": "Esborra aquest enllaç",
"Delete User": "Esborra Usuari", "Delete User": "Esborra Usuari",
"Deleted {{deleteModelTag}}": "Esborrat {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "Esborrat {{deleteModelTag}}",
"Deleted {{tagName}}": "Esborrat {{tagName}}", "Deleted {{name}}": "",
"Description": "Descripció", "Description": "Descripció",
"Didn't fully follow instructions": "No s'ha completat els instruccions", "Didn't fully follow instructions": "No s'ha completat els instruccions",
"Disabled": "Desactivat", "Disabled": "Desactivat",
"Discover a modelfile": "Descobreix un fitxer de model", "Discover a model": "",
"Discover a prompt": "Descobreix un prompt", "Discover a prompt": "Descobreix un prompt",
"Discover, download, and explore custom prompts": "Descobreix, descarrega i explora prompts personalitzats", "Discover, download, and explore custom prompts": "Descobreix, descarrega i explora prompts personalitzats",
"Discover, download, and explore model presets": "Descobreix, descarrega i explora presets de models", "Discover, download, and explore model presets": "Descobreix, descarrega i explora presets de models",
@ -176,11 +176,6 @@
"Enter Chunk Size": "Introdueix la Mida del Bloc", "Enter Chunk Size": "Introdueix la Mida del Bloc",
"Enter Image Size (e.g. 512x512)": "Introdueix la Mida de la Imatge (p. ex. 512x512)", "Enter Image Size (e.g. 512x512)": "Introdueix la Mida de la Imatge (p. ex. 512x512)",
"Enter language codes": "Introdueix els codis de llenguatge", "Enter language codes": "Introdueix els codis de llenguatge",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Introdueix l'URL Base de LiteLLM API (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Introdueix la Clau de LiteLLM API (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Introdueix RPM de LiteLLM API (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Introdueix el Model de LiteLLM (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Introdueix el Màxim de Tokens (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Introdueix l'etiqueta del model (p. ex. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Introdueix l'etiqueta del model (p. ex. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Introdueix el Nombre de Passos (p. ex. 50)", "Enter Number of Steps (e.g. 50)": "Introdueix el Nombre de Passos (p. ex. 50)",
"Enter Score": "Introdueix el Puntuació", "Enter Score": "Introdueix el Puntuació",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "Exporta Tots els Xats (Tots els Usuaris)", "Export All Chats (All Users)": "Exporta Tots els Xats (Tots els Usuaris)",
"Export Chats": "Exporta Xats", "Export Chats": "Exporta Xats",
"Export Documents Mapping": "Exporta el Mapatge de Documents", "Export Documents Mapping": "Exporta el Mapatge de Documents",
"Export Modelfiles": "Exporta Fitxers de Model", "Export Models": "",
"Export Prompts": "Exporta Prompts", "Export Prompts": "Exporta Prompts",
"Failed to create API Key.": "No s'ha pogut crear la clau d'API.", "Failed to create API Key.": "No s'ha pogut crear la clau d'API.",
"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls", "Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
@ -209,7 +204,7 @@
"Focus chat input": "Enfoca l'entrada del xat", "Focus chat input": "Enfoca l'entrada del xat",
"Followed instructions perfectly": "Siguiu les instruccions perfeicte", "Followed instructions perfectly": "Siguiu les instruccions perfeicte",
"Format your variables using square brackets like this:": "Formata les teves variables utilitzant claudàtors així:", "Format your variables using square brackets like this:": "Formata les teves variables utilitzant claudàtors així:",
"From (Base Model)": "Des de (Model Base)", "Frequencey Penalty": "",
"Full Screen Mode": "Mode de Pantalla Completa", "Full Screen Mode": "Mode de Pantalla Completa",
"General": "General", "General": "General",
"General Settings": "Configuració General", "General Settings": "Configuració General",
@ -220,7 +215,6 @@
"Hello, {{name}}": "Hola, {{name}}", "Hello, {{name}}": "Hola, {{name}}",
"Help": "Ajuda", "Help": "Ajuda",
"Hide": "Amaga", "Hide": "Amaga",
"Hide Additional Params": "Amaga Paràmetres Addicionals",
"How can I help you today?": "Com et puc ajudar avui?", "How can I help you today?": "Com et puc ajudar avui?",
"Hybrid Search": "Cerca Hibrida", "Hybrid Search": "Cerca Hibrida",
"Image Generation (Experimental)": "Generació d'Imatges (Experimental)", "Image Generation (Experimental)": "Generació d'Imatges (Experimental)",
@ -229,7 +223,7 @@
"Images": "Imatges", "Images": "Imatges",
"Import Chats": "Importa Xats", "Import Chats": "Importa Xats",
"Import Documents Mapping": "Importa el Mapa de Documents", "Import Documents Mapping": "Importa el Mapa de Documents",
"Import Modelfiles": "Importa Fitxers de Model", "Import Models": "",
"Import Prompts": "Importa Prompts", "Import Prompts": "Importa Prompts",
"Include `--api` flag when running stable-diffusion-webui": "Inclou la bandera `--api` quan executis stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Inclou la bandera `--api` quan executis stable-diffusion-webui",
"Input commands": "Entra ordres", "Input commands": "Entra ordres",
@ -238,6 +232,7 @@
"January": "Gener", "January": "Gener",
"join our Discord for help.": "uneix-te al nostre Discord per ajuda.", "join our Discord for help.": "uneix-te al nostre Discord per ajuda.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "Juliol", "July": "Juliol",
"June": "Juny", "June": "Juny",
"JWT Expiration": "Expiració de JWT", "JWT Expiration": "Expiració de JWT",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "Creat per la Comunitat OpenWebUI", "Made by OpenWebUI Community": "Creat per la Comunitat OpenWebUI",
"Make sure to enclose them with": "Assegura't d'envoltar-los amb", "Make sure to enclose them with": "Assegura't d'envoltar-los amb",
"Manage LiteLLM Models": "Gestiona Models LiteLLM",
"Manage Models": "Gestiona Models", "Manage Models": "Gestiona Models",
"Manage Ollama Models": "Gestiona Models Ollama", "Manage Ollama Models": "Gestiona Models Ollama",
"March": "Març", "March": "Març",
"Max Tokens": "Màxim de Tokens", "Max 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.", "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.",
"May": "Maig", "May": "Maig",
"Memories accessible by LLMs will be shown here.": "Els memòries accessible per a LLMs es mostraran aquí.", "Memories accessible by LLMs will be shown here.": "Els memòries accessible per a LLMs es mostraran aquí.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "El model '{{modelName}}' s'ha descarregat amb èxit.", "Model '{{modelName}}' has been successfully downloaded.": "El model '{{modelName}}' s'ha descarregat amb èxit.",
"Model '{{modelTag}}' is already in queue for downloading.": "El model '{{modelTag}}' ja està en cua per ser descarregat.", "Model '{{modelTag}}' is already in queue for downloading.": "El model '{{modelTag}}' ja està en cua per ser descarregat.",
"Model {{modelId}} not found": "Model {{modelId}} no trobat", "Model {{modelId}} not found": "Model {{modelId}} no trobat",
"Model {{modelName}} already exists.": "El model {{modelName}} ja existeix.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "S'ha detectat el camí del sistema de fitxers del model. És necessari un nom curt del model per a actualitzar, no es pot continuar.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "S'ha detectat el camí del sistema de fitxers del model. És necessari un nom curt del model per a actualitzar, no es pot continuar.",
"Model Name": "Nom del Model", "Model ID": "",
"Model not selected": "Model no seleccionat", "Model not selected": "Model no seleccionat",
"Model Tag Name": "Nom de l'Etiqueta del Model", "Model Params": "",
"Model Whitelisting": "Llista Blanca de Models", "Model Whitelisting": "Llista Blanca de Models",
"Model(s) Whitelisted": "Model(s) a la Llista Blanca", "Model(s) Whitelisted": "Model(s) a la Llista Blanca",
"Modelfile": "Fitxer de Model",
"Modelfile Advanced Settings": "Configuració Avançada de Fitxers de Model",
"Modelfile Content": "Contingut del Fitxer de Model", "Modelfile Content": "Contingut del Fitxer de Model",
"Modelfiles": "Fitxers de Model",
"Models": "Models", "Models": "Models",
"More": "Més", "More": "Més",
"Name": "Nom", "Name": "Nom",
"Name Tag": "Etiqueta de Nom", "Name Tag": "Etiqueta de Nom",
"Name your modelfile": "Nomena el teu fitxer de model", "Name your model": "",
"New Chat": "Xat Nou", "New Chat": "Xat Nou",
"New Password": "Nova Contrasenya", "New Password": "Nova Contrasenya",
"No results found": "No s'han trobat resultats", "No results found": "No s'han trobat resultats",
"No source available": "Sense font disponible", "No source available": "Sense font disponible",
"Not factually correct": "No està clarament correcte", "Not factually correct": "No està clarament correcte",
"Not sure what to add?": "No estàs segur del que afegir?",
"Not sure what to write? Switch to": "No estàs segur del que escriure? Canvia a",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si establiscs una puntuació mínima, la cerca només retornarà documents amb una puntuació major o igual a la puntuació mínima.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si establiscs una puntuació mínima, la cerca només retornarà documents amb una puntuació major o igual a la puntuació mínima.",
"Notifications": "Notificacions d'Escriptori", "Notifications": "Notificacions d'Escriptori",
"November": "Novembre", "November": "Novembre",
@ -322,7 +311,6 @@
"or": "o", "or": "o",
"Other": "Altres", "Other": "Altres",
"Overview": "Visió general", "Overview": "Visió general",
"Parameters": "Paràmetres",
"Password": "Contrasenya", "Password": "Contrasenya",
"PDF document (.pdf)": "Document PDF (.pdf)", "PDF document (.pdf)": "Document PDF (.pdf)",
"PDF Extract Images (OCR)": "Extreu Imatges de PDF (OCR)", "PDF Extract Images (OCR)": "Extreu Imatges de PDF (OCR)",
@ -342,10 +330,8 @@
"Prompts": "Prompts", "Prompts": "Prompts",
"Pull \"{{searchValue}}\" from Ollama.com": "Treu \"{{searchValue}}\" de Ollama.com", "Pull \"{{searchValue}}\" from Ollama.com": "Treu \"{{searchValue}}\" de Ollama.com",
"Pull a model from Ollama.com": "Treu un model d'Ollama.com", "Pull a model from Ollama.com": "Treu un model d'Ollama.com",
"Pull Progress": "Progrés de Tracció",
"Query Params": "Paràmetres de Consulta", "Query Params": "Paràmetres de Consulta",
"RAG Template": "Plantilla RAG", "RAG Template": "Plantilla RAG",
"Raw Format": "Format Brut",
"Read Aloud": "Llegiu al voltant", "Read Aloud": "Llegiu al voltant",
"Record voice": "Enregistra veu", "Record voice": "Enregistra veu",
"Redirecting you to OpenWebUI Community": "Redirigint-te a la Comunitat OpenWebUI", "Redirecting you to OpenWebUI Community": "Redirigint-te a la Comunitat OpenWebUI",
@ -356,7 +342,6 @@
"Remove Model": "Elimina Model", "Remove Model": "Elimina Model",
"Rename": "Canvia el nom", "Rename": "Canvia el nom",
"Repeat Last N": "Repeteix Últim N", "Repeat Last N": "Repeteix Últim N",
"Repeat Penalty": "Penalització de Repetició",
"Request Mode": "Mode de Sol·licitud", "Request Mode": "Mode de Sol·licitud",
"Reranking Model": "Model de Reranking desactivat", "Reranking Model": "Model de Reranking desactivat",
"Reranking model disabled": "Model de Reranking desactivat", "Reranking model disabled": "Model de Reranking desactivat",
@ -377,14 +362,17 @@
"Search": "Cerca", "Search": "Cerca",
"Search a model": "Cerca un model", "Search a model": "Cerca un model",
"Search Documents": "Cerca Documents", "Search Documents": "Cerca Documents",
"Search Models": "",
"Search Prompts": "Cerca Prompts", "Search Prompts": "Cerca Prompts",
"See readme.md for instructions": "Consulta el readme.md per a instruccions", "See readme.md for instructions": "Consulta el readme.md per a instruccions",
"See what's new": "Veure novetats", "See what's new": "Veure novetats",
"Seed": "Llavor", "Seed": "Llavor",
"Select a base model": "",
"Select a mode": "Selecciona un mode", "Select a mode": "Selecciona un mode",
"Select a model": "Selecciona un model", "Select a model": "Selecciona un model",
"Select an Ollama instance": "Selecciona una instància d'Ollama", "Select an Ollama instance": "Selecciona una instància d'Ollama",
"Select model": "Selecciona un model", "Select model": "Selecciona un model",
"Selected model(s) do not support image inputs": "",
"Send": "Envia", "Send": "Envia",
"Send a Message": "Envia un Missatge", "Send a Message": "Envia un Missatge",
"Send message": "Envia missatge", "Send message": "Envia missatge",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "Comparteix amb la Comunitat OpenWebUI", "Share to OpenWebUI Community": "Comparteix amb la Comunitat OpenWebUI",
"short-summary": "resum curt", "short-summary": "resum curt",
"Show": "Mostra", "Show": "Mostra",
"Show Additional Params": "Mostra Paràmetres Addicionals",
"Show shortcuts": "Mostra dreceres", "Show shortcuts": "Mostra dreceres",
"Showcased creativity": "Mostra la creativitat", "Showcased creativity": "Mostra la creativitat",
"sidebar": "barra lateral", "sidebar": "barra lateral",
@ -425,7 +412,6 @@
"Success": "Èxit", "Success": "Èxit",
"Successfully updated.": "Actualitzat amb èxit.", "Successfully updated.": "Actualitzat amb èxit.",
"Suggested": "Suggerit", "Suggested": "Suggerit",
"Sync All": "Sincronitza Tot",
"System": "Sistema", "System": "Sistema",
"System Prompt": "Prompt del Sistema", "System Prompt": "Prompt del Sistema",
"Tags": "Etiquetes", "Tags": "Etiquetes",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Escriu un resum en 50 paraules que resumeixi [tema o paraula clau].", "Write a summary in 50 words that summarizes [topic or keyword].": "Escriu un resum en 50 paraules que resumeixi [tema o paraula clau].",
"Yesterday": "Ayer", "Yesterday": "Ayer",
"You": "Tu", "You": "Tu",
"You cannot clone a base model": "",
"You have no archived conversations.": "No tens converses arxivades.", "You have no archived conversations.": "No tens converses arxivades.",
"You have shared this chat": "Has compartit aquest xat", "You have shared this chat": "Has compartit aquest xat",
"You're a helpful assistant.": "Ets un assistent útil.", "You're a helpful assistant.": "Ets un assistent útil.",

View File

@ -1,503 +1,490 @@
{ {
"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' para walay expiration.", "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' para walay expiration.",
"(Beta)": "(Beta)", "(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(pananglitan `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(pananglitan `sh webui.sh --api`)",
"(latest)": "", "(latest)": "",
"{{modelName}} is thinking...": "{{modelName}} hunahunaa...", "{{ models }}": "",
"{{user}}'s Chats": "", "{{ owner }}: You cannot delete a base model": "",
"{{webUIName}} Backend Required": "Backend {{webUIName}} gikinahanglan", "{{modelName}} is thinking...": "{{modelName}} hunahunaa...",
"a user": "usa ka user", "{{user}}'s Chats": "",
"About": "Mahitungod sa", "{{webUIName}} Backend Required": "Backend {{webUIName}} gikinahanglan",
"Account": "Account", "a user": "usa ka user",
"Accurate information": "", "About": "Mahitungod sa",
"Add": "", "Account": "Account",
"Add a model": "Pagdugang ug template", "Accurate information": "",
"Add a model tag name": "Pagdugang usa ka ngalan sa tag alang sa template", "Add": "",
"Add a short description about what this modelfile does": "Pagdugang usa ka mubo nga paghulagway kung unsa ang gibuhat sa kini nga template file", "Add a model id": "",
"Add a short title for this prompt": "Pagdugang og usa ka mubo nga titulo alang niini nga prompt", "Add a short description about what this model does": "",
"Add a tag": "Pagdugang og tag", "Add a short title for this prompt": "Pagdugang og usa ka mubo nga titulo alang niini nga prompt",
"Add custom prompt": "Pagdugang og custom prompt", "Add a tag": "Pagdugang og tag",
"Add Docs": "Pagdugang og mga dokumento", "Add custom prompt": "Pagdugang og custom prompt",
"Add Files": "Idugang ang mga file", "Add Docs": "Pagdugang og mga dokumento",
"Add Memory": "", "Add Files": "Idugang ang mga file",
"Add message": "Pagdugang og mensahe", "Add Memory": "",
"Add Model": "", "Add message": "Pagdugang og mensahe",
"Add Tags": "idugang ang mga tag", "Add Model": "",
"Add User": "", "Add Tags": "idugang ang mga tag",
"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.", "Add User": "",
"admin": "Administrator", "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.",
"Admin Panel": "Admin Panel", "admin": "Administrator",
"Admin Settings": "Mga setting sa administratibo", "Admin Panel": "Admin Panel",
"Advanced Parameters": "advanced settings", "Admin Settings": "Mga setting sa administratibo",
"all": "tanan", "Advanced Parameters": "advanced settings",
"All Documents": "", "Advanced Params": "",
"All Users": "Ang tanan nga mga tiggamit", "all": "tanan",
"Allow": "Sa pagtugot", "All Documents": "",
"Allow Chat Deletion": "Tugoti nga mapapas ang mga chat", "All Users": "Ang tanan nga mga tiggamit",
"alphanumeric characters and hyphens": "alphanumeric nga mga karakter ug hyphen", "Allow": "Sa pagtugot",
"Already have an account?": "Naa na kay account ?", "Allow Chat Deletion": "Tugoti nga mapapas ang mga chat",
"an assistant": "usa ka katabang", "alphanumeric characters and hyphens": "alphanumeric nga mga karakter ug hyphen",
"and": "Ug", "Already have an account?": "Naa na kay account ?",
"and create a new shared link.": "", "an assistant": "usa ka katabang",
"API Base URL": "API Base URL", "and": "Ug",
"API Key": "yawe sa API", "and create a new shared link.": "",
"API Key created.": "", "API Base URL": "API Base URL",
"API keys": "", "API Key": "yawe sa API",
"API RPM": "RPM API", "API Key created.": "",
"April": "", "API keys": "",
"Archive": "", "April": "",
"Archived Chats": "pagrekord sa chat", "Archive": "",
"are allowed - Activate this command by typing": "gitugotan - I-enable kini nga sugo pinaagi sa pag-type", "Archived Chats": "pagrekord sa chat",
"Are you sure?": "Sigurado ka ?", "are allowed - Activate this command by typing": "gitugotan - I-enable kini nga sugo pinaagi sa pag-type",
"Attach file": "Ilakip ang usa ka file", "Are you sure?": "Sigurado ka ?",
"Attention to detail": "Pagtagad sa mga detalye", "Attach file": "Ilakip ang usa ka file",
"Audio": "Audio", "Attention to detail": "Pagtagad sa mga detalye",
"August": "", "Audio": "Audio",
"Auto-playback response": "Autoplay nga tubag", "August": "",
"Auto-send input after 3 sec.": "Awtomatikong ipadala ang entry pagkahuman sa 3 segundos.", "Auto-playback response": "Autoplay nga tubag",
"AUTOMATIC1111 Base URL": "Base URL AUTOMATIC1111", "Auto-send input after 3 sec.": "Awtomatikong ipadala ang entry pagkahuman sa 3 segundos.",
"AUTOMATIC1111 Base URL is required.": "Ang AUTOMATIC1111 base URL gikinahanglan.", "AUTOMATIC1111 Base URL": "Base URL AUTOMATIC1111",
"available!": "magamit!", "AUTOMATIC1111 Base URL is required.": "Ang AUTOMATIC1111 base URL gikinahanglan.",
"Back": "Balik", "available!": "magamit!",
"Bad Response": "", "Back": "Balik",
"before": "", "Bad Response": "",
"Being lazy": "", "Base Model (From)": "",
"Builder Mode": "Mode sa Magtutukod", "before": "",
"Bypass SSL verification for Websites": "", "Being lazy": "",
"Cancel": "Pagkanselar", "Bypass SSL verification for Websites": "",
"Categories": "Mga kategoriya", "Cancel": "Pagkanselar",
"Change Password": "Usba ang password", "Capabilities": "",
"Chat": "Panaghisgot", "Change Password": "Usba ang password",
"Chat Bubble UI": "", "Chat": "Panaghisgot",
"Chat direction": "", "Chat Bubble UI": "",
"Chat History": "Kasaysayan sa chat", "Chat direction": "",
"Chat History is off for this browser.": "Ang kasaysayan sa chat gi-disable alang niini nga browser.", "Chat History": "Kasaysayan sa chat",
"Chats": "Mga panaghisgot", "Chat History is off for this browser.": "Ang kasaysayan sa chat gi-disable alang niini nga browser.",
"Check Again": "Susiha pag-usab", "Chats": "Mga panaghisgot",
"Check for updates": "Susiha ang mga update", "Check Again": "Susiha pag-usab",
"Checking for updates...": "Pagsusi alang sa mga update...", "Check for updates": "Susiha ang mga update",
"Choose a model before saving...": "Pagpili og template sa dili pa i-save...", "Checking for updates...": "Pagsusi alang sa mga update...",
"Chunk Overlap": "Block overlap", "Choose a model before saving...": "Pagpili og template sa dili pa i-save...",
"Chunk Params": "Mga Setting sa Block", "Chunk Overlap": "Block overlap",
"Chunk Size": "Gidak-on sa block", "Chunk Params": "Mga Setting sa Block",
"Citation": "Mga kinutlo", "Chunk Size": "Gidak-on sa block",
"Click here for help.": "I-klik dinhi alang sa tabang.", "Citation": "Mga kinutlo",
"Click here to": "", "Click here for help.": "I-klik dinhi alang sa tabang.",
"Click here to check other modelfiles.": "Pag-klik dinhi aron susihon ang ubang mga file sa template.", "Click here to": "",
"Click here to select": "I-klik dinhi aron makapili", "Click here to select": "I-klik dinhi aron makapili",
"Click here to select a csv file.": "", "Click here to select a csv file.": "",
"Click here to select documents.": "Pag-klik dinhi aron mapili ang mga dokumento.", "Click here to select documents.": "Pag-klik dinhi aron mapili ang mga dokumento.",
"click here.": "I-klik dinhi.", "click here.": "I-klik dinhi.",
"Click on the user role button to change a user's role.": "I-klik ang User Role button aron usbon ang role sa user.", "Click on the user role button to change a user's role.": "I-klik ang User Role button aron usbon ang role sa user.",
"Close": "Suod nga", "Close": "Suod nga",
"Collection": "Koleksyon", "Collection": "Koleksyon",
"ComfyUI": "", "ComfyUI": "",
"ComfyUI Base URL": "", "ComfyUI Base URL": "",
"ComfyUI Base URL is required.": "", "ComfyUI Base URL is required.": "",
"Command": "Pag-order", "Command": "Pag-order",
"Confirm Password": "Kumpirma ang password", "Confirm Password": "Kumpirma ang password",
"Connections": "Mga koneksyon", "Connections": "Mga koneksyon",
"Content": "Kontento", "Content": "Kontento",
"Context Length": "Ang gitas-on sa konteksto", "Context Length": "Ang gitas-on sa konteksto",
"Continue Response": "", "Continue Response": "",
"Conversation Mode": "Talk mode", "Conversation Mode": "Talk mode",
"Copied shared chat URL to clipboard!": "", "Copied shared chat URL to clipboard!": "",
"Copy": "", "Copy": "",
"Copy last code block": "Kopyaha ang katapusang bloke sa code", "Copy last code block": "Kopyaha ang katapusang bloke sa code",
"Copy last response": "Kopyaha ang kataposang tubag", "Copy last response": "Kopyaha ang kataposang tubag",
"Copy Link": "", "Copy Link": "",
"Copying to clipboard was successful!": "Ang pagkopya sa clipboard malampuson!", "Copying to clipboard was successful!": "Ang pagkopya sa clipboard malampuson!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Paghimo og mugbo nga 3-5 ka pulong nga sentence isip usa ka ulohan alang sa mosunod nga pangutana, hugot nga pagsunod sa 3-5 ka pulong nga limitasyon ug paglikay sa paggamit sa pulong nga 'titulo':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Paghimo og mugbo nga 3-5 ka pulong nga sentence isip usa ka ulohan alang sa mosunod nga pangutana, hugot nga pagsunod sa 3-5 ka pulong nga limitasyon ug paglikay sa paggamit sa pulong nga 'titulo':",
"Create a modelfile": "Paghimo ug template file", "Create a model": "",
"Create Account": "Paghimo og account", "Create Account": "Paghimo og account",
"Create new key": "", "Create new key": "",
"Create new secret key": "", "Create new secret key": "",
"Created at": "Gihimo ang", "Created at": "Gihimo ang",
"Created At": "", "Created At": "",
"Current Model": "Kasamtangang modelo", "Current Model": "Kasamtangang modelo",
"Current Password": "Kasamtangang Password", "Current Password": "Kasamtangang Password",
"Custom": "Custom", "Custom": "Custom",
"Customize Ollama models for a specific purpose": "Ipasibo ang mga template sa Ollama alang sa usa ka piho nga katuyoan", "Customize models for a specific purpose": "",
"Dark": "Ngitngit", "Dark": "Ngitngit",
"Dashboard": "", "Dashboard": "",
"Database": "Database", "Database": "Database",
"December": "", "December": "",
"Default": "Pinaagi sa default", "Default": "Pinaagi sa default",
"Default (Automatic1111)": "Default (Awtomatiko1111)", "Default (Automatic1111)": "Default (Awtomatiko1111)",
"Default (SentenceTransformers)": "", "Default (SentenceTransformers)": "",
"Default (Web API)": "Default (Web API)", "Default (Web API)": "Default (Web API)",
"Default model updated": "Gi-update nga default template", "Default model updated": "Gi-update nga default template",
"Default Prompt Suggestions": "Default nga prompt nga mga sugyot", "Default Prompt Suggestions": "Default nga prompt nga mga sugyot",
"Default User Role": "Default nga Papel sa Gumagamit", "Default User Role": "Default nga Papel sa Gumagamit",
"delete": "DELETE", "delete": "DELETE",
"Delete": "", "Delete": "",
"Delete a model": "Pagtangtang sa usa ka template", "Delete a model": "Pagtangtang sa usa ka template",
"Delete chat": "Pagtangtang sa panaghisgot", "Delete All Chats": "",
"Delete Chat": "", "Delete chat": "Pagtangtang sa panaghisgot",
"Delete Chats": "Pagtangtang sa mga chat", "Delete Chat": "",
"delete this link": "", "delete this link": "",
"Delete User": "", "Delete User": "",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} gipapas", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} gipapas",
"Deleted {{tagName}}": "", "Deleted {{name}}": "",
"Description": "Deskripsyon", "Description": "Deskripsyon",
"Didn't fully follow instructions": "", "Didn't fully follow instructions": "",
"Disabled": "Nabaldado", "Disabled": "Nabaldado",
"Discover a modelfile": "Pagdiskobre ug template file", "Discover a model": "",
"Discover a prompt": "Pagkaplag usa ka prompt", "Discover a prompt": "Pagkaplag usa ka prompt",
"Discover, download, and explore custom prompts": "Pagdiskubre, pag-download ug pagsuhid sa mga naandan nga pag-aghat", "Discover, download, and explore custom prompts": "Pagdiskubre, pag-download ug pagsuhid sa mga naandan nga pag-aghat",
"Discover, download, and explore model presets": "Pagdiskobre, pag-download, ug pagsuhid sa mga preset sa template", "Discover, download, and explore model presets": "Pagdiskobre, pag-download, ug pagsuhid sa mga preset sa template",
"Display the username instead of You in the Chat": "Ipakita ang username imbes nga 'Ikaw' sa Panaghisgutan", "Display the username instead of You in the Chat": "Ipakita ang username imbes nga 'Ikaw' sa Panaghisgutan",
"Document": "Dokumento", "Document": "Dokumento",
"Document Settings": "Mga Setting sa Dokumento", "Document Settings": "Mga Setting sa Dokumento",
"Documents": "Mga dokumento", "Documents": "Mga dokumento",
"does not make any external connections, and your data stays securely on your locally hosted server.": "wala maghimo ug eksternal nga koneksyon, ug ang imong data nagpabiling luwas sa imong lokal nga host server.", "does not make any external connections, and your data stays securely on your locally hosted server.": "wala maghimo ug eksternal nga koneksyon, ug ang imong data nagpabiling luwas sa imong lokal nga host server.",
"Don't Allow": "Dili tugotan", "Don't Allow": "Dili tugotan",
"Don't have an account?": "Wala kay account ?", "Don't have an account?": "Wala kay account ?",
"Don't like the style": "", "Don't like the style": "",
"Download": "", "Download": "",
"Download canceled": "", "Download canceled": "",
"Download Database": "I-download ang database", "Download Database": "I-download ang database",
"Drop any files here to add to the conversation": "Ihulog ang bisan unsang file dinhi aron idugang kini sa panag-istoryahanay", "Drop any files here to add to the conversation": "Ihulog ang bisan unsang file dinhi aron idugang kini sa panag-istoryahanay",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ",
"Edit": "", "Edit": "",
"Edit Doc": "I-edit ang dokumento", "Edit Doc": "I-edit ang dokumento",
"Edit User": "I-edit ang tiggamit", "Edit User": "I-edit ang tiggamit",
"Email": "E-mail", "Email": "E-mail",
"Embedding Model": "", "Embedding Model": "",
"Embedding Model Engine": "", "Embedding Model Engine": "",
"Embedding model set to \"{{embedding_model}}\"": "", "Embedding model set to \"{{embedding_model}}\"": "",
"Enable Chat History": "I-enable ang kasaysayan sa chat", "Enable Chat History": "I-enable ang kasaysayan sa chat",
"Enable New Sign Ups": "I-enable ang bag-ong mga rehistro", "Enable New Sign Ups": "I-enable ang bag-ong mga rehistro",
"Enabled": "Gipaandar", "Enabled": "Gipaandar",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Pagsulod sa mensahe {{role}} dinhi", "Enter {{role}} message here": "Pagsulod sa mensahe {{role}} dinhi",
"Enter a detail about yourself for your LLMs to recall": "", "Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "Pagsulod sa block overlap", "Enter Chunk Overlap": "Pagsulod sa block overlap",
"Enter Chunk Size": "Isulod ang block size", "Enter Chunk Size": "Isulod ang block size",
"Enter Image Size (e.g. 512x512)": "Pagsulod sa gidak-on sa hulagway (pananglitan 512x512)", "Enter Image Size (e.g. 512x512)": "Pagsulod sa gidak-on sa hulagway (pananglitan 512x512)",
"Enter language codes": "", "Enter language codes": "",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Pagsulod sa LiteLLM API base URL (litelm_params.api_base)", "Enter model tag (e.g. {{modelTag}})": "Pagsulod sa template tag (e.g. {{modelTag}})",
"Enter LiteLLM API Key (litellm_params.api_key)": "Isulod ang LiteLLM API key (litelm_params.api_key)", "Enter Number of Steps (e.g. 50)": "Pagsulod sa gidaghanon sa mga lakang (e.g. 50)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Isulod ang LiteLLM API RPM (litelm_params.rpm)", "Enter Score": "",
"Enter LiteLLM Model (litellm_params.model)": "Pagsulod sa LiteLLM nga modelo (litelm_params.model)", "Enter stop sequence": "Pagsulod sa katapusan nga han-ay",
"Enter Max Tokens (litellm_params.max_tokens)": "Pagsulod sa max nga gidaghanon sa mga token (litelm_params.max_tokens)", "Enter Top K": "Pagsulod sa Top K",
"Enter model tag (e.g. {{modelTag}})": "Pagsulod sa template tag (e.g. {{modelTag}})", "Enter URL (e.g. http://127.0.0.1:7860/)": "Pagsulod sa URL (e.g. http://127.0.0.1:7860/)",
"Enter Number of Steps (e.g. 50)": "Pagsulod sa gidaghanon sa mga lakang (e.g. 50)", "Enter URL (e.g. http://localhost:11434)": "",
"Enter Score": "", "Enter Your Email": "Pagsulod sa imong e-mail address",
"Enter stop sequence": "Pagsulod sa katapusan nga han-ay", "Enter Your Full Name": "Ibutang ang imong tibuok nga ngalan",
"Enter Top K": "Pagsulod sa Top K", "Enter Your Password": "Ibutang ang imong password",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Pagsulod sa URL (e.g. http://127.0.0.1:7860/)", "Enter Your Role": "",
"Enter URL (e.g. http://localhost:11434)": "", "Experimental": "Eksperimento",
"Enter Your Email": "Pagsulod sa imong e-mail address", "Export All Chats (All Users)": "I-export ang tanan nga mga chat (Tanan nga tiggamit)",
"Enter Your Full Name": "Ibutang ang imong tibuok nga ngalan", "Export Chats": "I-export ang mga chat",
"Enter Your Password": "Ibutang ang imong password", "Export Documents Mapping": "I-export ang pagmapa sa dokumento",
"Enter Your Role": "", "Export Models": "",
"Experimental": "Eksperimento", "Export Prompts": "Export prompts",
"Export All Chats (All Users)": "I-export ang tanan nga mga chat (Tanan nga tiggamit)", "Failed to create API Key.": "",
"Export Chats": "I-export ang mga chat", "Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard",
"Export Documents Mapping": "I-export ang pagmapa sa dokumento", "February": "",
"Export Modelfiles": "I-export ang mga file sa modelo", "Feel free to add specific details": "",
"Export Prompts": "Export prompts", "File Mode": "File mode",
"Failed to create API Key.": "", "File not found.": "Wala makit-an ang file.",
"Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "",
"February": "", "Fluidly stream large external response chunks": "Hapsay nga paghatud sa daghang mga tipik sa eksternal nga mga tubag",
"Feel free to add specific details": "", "Focus chat input": "Pag-focus sa entry sa diskusyon",
"File Mode": "File mode", "Followed instructions perfectly": "",
"File not found.": "Wala makit-an ang file.", "Format your variables using square brackets like this:": "I-format ang imong mga variable gamit ang square brackets sama niini:",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "", "Frequencey Penalty": "",
"Fluidly stream large external response chunks": "Hapsay nga paghatud sa daghang mga tipik sa eksternal nga mga tubag", "Full Screen Mode": "Full screen mode",
"Focus chat input": "Pag-focus sa entry sa diskusyon", "General": "Heneral",
"Followed instructions perfectly": "", "General Settings": "kinatibuk-ang mga setting",
"Format your variables using square brackets like this:": "I-format ang imong mga variable gamit ang square brackets sama niini:", "Generation Info": "",
"From (Base Model)": "Gikan sa (Basic nga modelo)", "Good Response": "",
"Full Screen Mode": "Full screen mode", "h:mm a": "",
"General": "Heneral", "has no conversations.": "",
"General Settings": "kinatibuk-ang mga setting", "Hello, {{name}}": "Maayong buntag, {{name}}",
"Generation Info": "", "Help": "",
"Good Response": "", "Hide": "Tagoa",
"h:mm a": "", "How can I help you today?": "Unsaon nako pagtabang kanimo karon?",
"has no conversations.": "", "Hybrid Search": "",
"Hello, {{name}}": "Maayong buntag, {{name}}", "Image Generation (Experimental)": "Pagmugna og hulagway (Eksperimento)",
"Help": "", "Image Generation Engine": "Makina sa paghimo og imahe",
"Hide": "Tagoa", "Image Settings": "Mga Setting sa Imahen",
"Hide Additional Params": "Tagoa ang dugang nga mga setting", "Images": "Mga hulagway",
"How can I help you today?": "Unsaon nako pagtabang kanimo karon?", "Import Chats": "Import nga mga chat",
"Hybrid Search": "", "Import Documents Mapping": "Import nga pagmapa sa dokumento",
"Image Generation (Experimental)": "Pagmugna og hulagway (Eksperimento)", "Import Models": "",
"Image Generation Engine": "Makina sa paghimo og imahe", "Import Prompts": "Import prompt",
"Image Settings": "Mga Setting sa Imahen", "Include `--api` flag when running stable-diffusion-webui": "Iapil ang `--api` nga bandila kung nagdagan nga stable-diffusion-webui",
"Images": "Mga hulagway", "Input commands": "Pagsulod sa input commands",
"Import Chats": "Import nga mga chat", "Interface": "Interface",
"Import Documents Mapping": "Import nga pagmapa sa dokumento", "Invalid Tag": "",
"Import Modelfiles": "Import nga mga file sa modelo", "January": "",
"Import Prompts": "Import prompt", "join our Discord for help.": "Apil sa among Discord alang sa tabang.",
"Include `--api` flag when running stable-diffusion-webui": "Iapil ang `--api` nga bandila kung nagdagan nga stable-diffusion-webui", "JSON": "JSON",
"Input commands": "Pagsulod sa input commands", "JSON Preview": "",
"Interface": "Interface", "July": "",
"Invalid Tag": "", "June": "",
"January": "", "JWT Expiration": "Pag-expire sa JWT",
"join our Discord for help.": "Apil sa among Discord alang sa tabang.", "JWT Token": "JWT token",
"JSON": "JSON", "Keep Alive": "Padayon nga aktibo",
"July": "", "Keyboard shortcuts": "Mga shortcut sa keyboard",
"June": "", "Language": "Pinulongan",
"JWT Expiration": "Pag-expire sa JWT", "Last Active": "",
"JWT Token": "JWT token", "Light": "Kahayag",
"Keep Alive": "Padayon nga aktibo", "Listening...": "Paminaw...",
"Keyboard shortcuts": "Mga shortcut sa keyboard", "LLMs can make mistakes. Verify important information.": "Ang mga LLM mahimong masayop. ",
"Language": "Pinulongan", "LTR": "",
"Last Active": "", "Made by OpenWebUI Community": "Gihimo sa komunidad sa OpenWebUI",
"Light": "Kahayag", "Make sure to enclose them with": "Siguruha nga palibutan sila",
"Listening...": "Paminaw...", "Manage Models": "Pagdumala sa mga templates",
"LLMs can make mistakes. Verify important information.": "Ang mga LLM mahimong masayop. ", "Manage Ollama Models": "Pagdumala sa mga modelo sa Ollama",
"LTR": "", "March": "",
"Made by OpenWebUI Community": "Gihimo sa komunidad sa OpenWebUI", "Max Tokens (num_predict)": "",
"Make sure to enclose them with": "Siguruha nga palibutan sila", "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. ",
"Manage LiteLLM Models": "Pagdumala sa mga modelo sa LiteLLM", "May": "",
"Manage Models": "Pagdumala sa mga templates", "Memories accessible by LLMs will be shown here.": "",
"Manage Ollama Models": "Pagdumala sa mga modelo sa Ollama", "Memory": "",
"March": "", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "",
"Max Tokens": "Maximum nga mga token", "Minimum Score": "",
"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. ", "Mirostat": "Mirostat",
"May": "", "Mirostat Eta": "Mirostat Eta",
"Memories accessible by LLMs will be shown here.": "", "Mirostat Tau": "Mirostat Tau",
"Memory": "", "MMMM DD, YYYY": "MMMM DD, YYYY",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "", "MMMM DD, YYYY HH:mm": "",
"Minimum Score": "", "Model '{{modelName}}' has been successfully downloaded.": "Ang modelo'{{modelName}}' malampuson nga na-download.",
"Mirostat": "Mirostat", "Model '{{modelTag}}' is already in queue for downloading.": "Ang modelo'{{modelTag}}' naa na sa pila para ma-download.",
"Mirostat Eta": "Mirostat Eta", "Model {{modelId}} not found": "Modelo {{modelId}} wala makit-an",
"Mirostat Tau": "Mirostat Tau", "Model {{modelName}} is not vision capable": "",
"MMMM DD, YYYY": "MMMM DD, YYYY", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "",
"MMMM DD, YYYY HH:mm": "", "Model ID": "",
"Model '{{modelName}}' has been successfully downloaded.": "Ang modelo'{{modelName}}' malampuson nga na-download.", "Model not selected": "Wala gipili ang modelo",
"Model '{{modelTag}}' is already in queue for downloading.": "Ang modelo'{{modelTag}}' naa na sa pila para ma-download.", "Model Params": "",
"Model {{modelId}} not found": "Modelo {{modelId}} wala makit-an", "Model Whitelisting": "Whitelist sa modelo",
"Model {{modelName}} already exists.": "Ang modelo {{modelName}} Anaa na.", "Model(s) Whitelisted": "Gi-whitelist nga (mga) modelo",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "", "Modelfile Content": "Mga sulod sa template file",
"Model Name": "Ngalan sa Modelo", "Models": "Mga modelo",
"Model not selected": "Wala gipili ang modelo", "More": "",
"Model Tag Name": "Ngalan sa tag sa modelo", "Name": "Ngalan",
"Model Whitelisting": "Whitelist sa modelo", "Name Tag": "Tag sa ngalan",
"Model(s) Whitelisted": "Gi-whitelist nga (mga) modelo", "Name your model": "",
"Modelfile": "File sa template", "New Chat": "Bag-ong diskusyon",
"Modelfile Advanced Settings": "Advanced nga template file setting", "New Password": "Bag-ong Password",
"Modelfile Content": "Mga sulod sa template file", "No results found": "",
"Modelfiles": "Mga file sa modelo", "No source available": "Walay tinubdan nga anaa",
"Models": "Mga modelo", "Not factually correct": "",
"More": "", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
"Name": "Ngalan", "Notifications": "Mga pahibalo sa desktop",
"Name Tag": "Tag sa ngalan", "November": "",
"Name your modelfile": "Ngalan ang imong template file", "October": "",
"New Chat": "Bag-ong diskusyon", "Off": "Napuo",
"New Password": "Bag-ong Password", "Okay, Let's Go!": "Okay, lakaw na!",
"No results found": "", "OLED Dark": "",
"No source available": "Walay tinubdan nga anaa", "Ollama": "",
"Not factually correct": "", "Ollama API": "",
"Not sure what to add?": "Dili sigurado kung unsa ang idugang?", "Ollama Version": "Ollama nga bersyon",
"Not sure what to write? Switch to": "Dili sigurado kung unsa ang isulat? ", "On": "Gipaandar",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "", "Only": "Lamang",
"Notifications": "Mga pahibalo sa desktop", "Only alphanumeric characters and hyphens are allowed in the command string.": "Ang alphanumeric nga mga karakter ug hyphen lang ang gitugotan sa command string.",
"November": "", "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! ",
"October": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! ",
"Off": "Napuo", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! ",
"Okay, Let's Go!": "Okay, lakaw na!", "Open": "Bukas",
"OLED Dark": "", "Open AI": "Buksan ang AI",
"Ollama": "", "Open AI (Dall-E)": "Buksan ang AI (Dall-E)",
"Ollama Base URL": "Ollama Base URL", "Open new chat": "Ablihi ang bag-ong diskusyon",
"Ollama Version": "Ollama nga bersyon", "OpenAI": "",
"On": "Gipaandar", "OpenAI API": "OpenAI API",
"Only": "Lamang", "OpenAI API Config": "",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Ang alphanumeric nga mga karakter ug hyphen lang ang gitugotan sa command string.", "OpenAI API Key is required.": "Ang yawe sa OpenAI API gikinahanglan.",
"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! ", "OpenAI URL/Key required.": "",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! ", "or": "O",
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! ", "Other": "",
"Open": "Bukas", "Overview": "",
"Open AI": "Buksan ang AI", "Password": "Password",
"Open AI (Dall-E)": "Buksan ang AI (Dall-E)", "PDF document (.pdf)": "",
"Open new chat": "Ablihi ang bag-ong diskusyon", "PDF Extract Images (OCR)": "PDF Image Extraction (OCR)",
"OpenAI": "", "pending": "gipugngan",
"OpenAI API": "OpenAI API", "Permission denied when accessing microphone: {{error}}": "Gidili ang pagtugot sa dihang nag-access sa mikropono: {{error}}",
"OpenAI API Config": "", "Personalization": "",
"OpenAI API Key is required.": "Ang yawe sa OpenAI API gikinahanglan.", "Plain text (.txt)": "",
"OpenAI URL/Key required.": "", "Playground": "Dulaanan",
"or": "O", "Positive attitude": "",
"Other": "", "Previous 30 days": "",
"Overview": "", "Previous 7 days": "",
"Parameters": "Mga setting", "Profile Image": "",
"Password": "Password", "Prompt": "",
"PDF document (.pdf)": "", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "",
"PDF Extract Images (OCR)": "PDF Image Extraction (OCR)", "Prompt Content": "Ang sulod sa prompt",
"pending": "gipugngan", "Prompt suggestions": "Maabtik nga mga Sugyot",
"Permission denied when accessing microphone: {{error}}": "Gidili ang pagtugot sa dihang nag-access sa mikropono: {{error}}", "Prompts": "Mga aghat",
"Personalization": "", "Pull \"{{searchValue}}\" from Ollama.com": "",
"Plain text (.txt)": "", "Pull a model from Ollama.com": "Pagkuha ug template gikan sa Ollama.com",
"Playground": "Dulaanan", "Query Params": "Mga parameter sa pangutana",
"Positive attitude": "", "RAG Template": "RAG nga modelo",
"Previous 30 days": "", "Read Aloud": "",
"Previous 7 days": "", "Record voice": "Irekord ang tingog",
"Profile Image": "", "Redirecting you to OpenWebUI Community": "Gi-redirect ka sa komunidad sa OpenWebUI",
"Prompt": "", "Refused when it shouldn't have": "",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "", "Regenerate": "",
"Prompt Content": "Ang sulod sa prompt", "Release Notes": "Release Notes",
"Prompt suggestions": "Maabtik nga mga Sugyot", "Remove": "",
"Prompts": "Mga aghat", "Remove Model": "",
"Pull \"{{searchValue}}\" from Ollama.com": "", "Rename": "",
"Pull a model from Ollama.com": "Pagkuha ug template gikan sa Ollama.com", "Repeat Last N": "Balika ang katapusang N",
"Pull Progress": "Pag-uswag sa pag-download", "Request Mode": "Query mode",
"Query Params": "Mga parameter sa pangutana", "Reranking Model": "",
"RAG Template": "RAG nga modelo", "Reranking model disabled": "",
"Raw Format": "Hilaw nga pormat", "Reranking model set to \"{{reranking_model}}\"": "",
"Read Aloud": "", "Reset Vector Storage": "I-reset ang pagtipig sa vector",
"Record voice": "Irekord ang tingog", "Response AutoCopy to Clipboard": "Awtomatikong kopya sa tubag sa clipboard",
"Redirecting you to OpenWebUI Community": "Gi-redirect ka sa komunidad sa OpenWebUI", "Role": "Papel",
"Refused when it shouldn't have": "", "Rosé Pine": "Rosé Pine",
"Regenerate": "", "Rosé Pine Dawn": "Aube Pine Rosé",
"Release Notes": "Release Notes", "RTL": "",
"Remove": "", "Save": "Tipigi",
"Remove Model": "", "Save & Create": "I-save ug Paghimo",
"Rename": "", "Save & Update": "I-save ug I-update",
"Repeat Last N": "Balika ang katapusang N", "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. ",
"Repeat Penalty": "Balika ang silot", "Scan": "Aron ma-scan",
"Request Mode": "Query mode", "Scan complete!": "Nakompleto ang pag-scan!",
"Reranking Model": "", "Scan for documents from {{path}}": "I-scan ang mga dokumento gikan sa {{path}}",
"Reranking model disabled": "", "Search": "Pagpanukiduki",
"Reranking model set to \"{{reranking_model}}\"": "", "Search a model": "",
"Reset Vector Storage": "I-reset ang pagtipig sa vector", "Search Documents": "Pangitaa ang mga dokumento",
"Response AutoCopy to Clipboard": "Awtomatikong kopya sa tubag sa clipboard", "Search Models": "",
"Role": "Papel", "Search Prompts": "Pangitaa ang mga prompt",
"Rosé Pine": "Rosé Pine", "See readme.md for instructions": "Tan-awa ang readme.md alang sa mga panudlo",
"Rosé Pine Dawn": "Aube Pine Rosé", "See what's new": "Tan-awa unsay bag-o",
"RTL": "", "Seed": "Binhi",
"Save": "Tipigi", "Select a base model": "",
"Save & Create": "I-save ug Paghimo", "Select a mode": "Pagpili og mode",
"Save & Update": "I-save ug I-update", "Select a model": "Pagpili og modelo",
"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. ", "Select an Ollama instance": "Pagpili usa ka pananglitan sa Ollama",
"Scan": "Aron ma-scan", "Select model": "Pagpili og modelo",
"Scan complete!": "Nakompleto ang pag-scan!", "Selected model(s) do not support image inputs": "",
"Scan for documents from {{path}}": "I-scan ang mga dokumento gikan sa {{path}}", "Send": "",
"Search": "Pagpanukiduki", "Send a Message": "Magpadala ug mensahe",
"Search a model": "", "Send message": "Magpadala ug mensahe",
"Search Documents": "Pangitaa ang mga dokumento", "September": "",
"Search Prompts": "Pangitaa ang mga prompt", "Server connection verified": "Gipamatud-an nga koneksyon sa server",
"See readme.md for instructions": "Tan-awa ang readme.md alang sa mga panudlo", "Set as default": "Define pinaagi sa default",
"See what's new": "Tan-awa unsay bag-o", "Set Default Model": "Ibutang ang default template",
"Seed": "Binhi", "Set embedding model (e.g. {{model}})": "",
"Select a mode": "Pagpili og mode", "Set Image Size": "Ibutang ang gidak-on sa hulagway",
"Select a model": "Pagpili og modelo", "Set Model": "I-configure ang template",
"Select an Ollama instance": "Pagpili usa ka pananglitan sa Ollama", "Set reranking model (e.g. {{model}})": "",
"Select model": "Pagpili og modelo", "Set Steps": "Ipasabot ang mga lakang",
"Send": "", "Set Title Auto-Generation Model": "Itakda ang awtomatik nga template sa paghimo sa titulo",
"Send a Message": "Magpadala ug mensahe", "Set Voice": "Ibutang ang tingog",
"Send message": "Magpadala ug mensahe", "Settings": "Mga setting",
"September": "", "Settings saved successfully!": "Malampuson nga na-save ang mga setting!",
"Server connection verified": "Gipamatud-an nga koneksyon sa server", "Share": "",
"Set as default": "Define pinaagi sa default", "Share Chat": "",
"Set Default Model": "Ibutang ang default template", "Share to OpenWebUI Community": "Ipakigbahin sa komunidad sa OpenWebUI",
"Set embedding model (e.g. {{model}})": "", "short-summary": "mubo nga summary",
"Set Image Size": "Ibutang ang gidak-on sa hulagway", "Show": "Pagpakita",
"Set Model": "I-configure ang template", "Show shortcuts": "Ipakita ang mga shortcut",
"Set reranking model (e.g. {{model}})": "", "Showcased creativity": "",
"Set Steps": "Ipasabot ang mga lakang", "sidebar": "lateral bar",
"Set Title Auto-Generation Model": "Itakda ang awtomatik nga template sa paghimo sa titulo", "Sign in": "Para maka log in",
"Set Voice": "Ibutang ang tingog", "Sign Out": "Pag-sign out",
"Settings": "Mga setting", "Sign up": "Pagrehistro",
"Settings saved successfully!": "Malampuson nga na-save ang mga setting!", "Signing in": "",
"Share": "", "Source": "Tinubdan",
"Share Chat": "", "Speech recognition error: {{error}}": "Sayop sa pag-ila sa tingog: {{error}}",
"Share to OpenWebUI Community": "Ipakigbahin sa komunidad sa OpenWebUI", "Speech-to-Text Engine": "Engine sa pag-ila sa tingog",
"short-summary": "mubo nga summary", "SpeechRecognition API is not supported in this browser.": "Ang SpeechRecognition API wala gisuportahan niini nga browser.",
"Show": "Pagpakita", "Stop Sequence": "Pagkasunod-sunod sa pagsira",
"Show Additional Params": "Ipakita ang dugang nga mga setting", "STT Settings": "Mga setting sa STT",
"Show shortcuts": "Ipakita ang mga shortcut", "Submit": "Isumite",
"Showcased creativity": "", "Subtitle (e.g. about the Roman Empire)": "",
"sidebar": "lateral bar", "Success": "Kalampusan",
"Sign in": "Para maka log in", "Successfully updated.": "Malampuson nga na-update.",
"Sign Out": "Pag-sign out", "Suggested": "",
"Sign up": "Pagrehistro", "System": "Sistema",
"Signing in": "", "System Prompt": "Madasig nga Sistema",
"Source": "Tinubdan", "Tags": "Mga tag",
"Speech recognition error: {{error}}": "Sayop sa pag-ila sa tingog: {{error}}", "Tell us more:": "",
"Speech-to-Text Engine": "Engine sa pag-ila sa tingog", "Temperature": "Temperatura",
"SpeechRecognition API is not supported in this browser.": "Ang SpeechRecognition API wala gisuportahan niini nga browser.", "Template": "Modelo",
"Stop Sequence": "Pagkasunod-sunod sa pagsira", "Text Completion": "Pagkompleto sa teksto",
"STT Settings": "Mga setting sa STT", "Text-to-Speech Engine": "Text-to-speech nga makina",
"Submit": "Isumite", "Tfs Z": "Tfs Z",
"Subtitle (e.g. about the Roman Empire)": "", "Thanks for your feedback!": "",
"Success": "Kalampusan", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "",
"Successfully updated.": "Malampuson nga na-update.", "Theme": "Tema",
"Suggested": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Kini nagsiguro nga ang imong bililhon nga mga panag-istoryahanay luwas nga natipig sa imong backend database. ",
"Sync All": "I-synchronize ang tanan", "This setting does not sync across browsers or devices.": "Kini nga setting wala mag-sync tali sa mga browser o device.",
"System": "Sistema", "Thorough explanation": "",
"System Prompt": "Madasig nga Sistema", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Sugyot: Pag-update sa daghang variable nga lokasyon nga sunud-sunod pinaagi sa pagpindot sa tab key sa chat entry pagkahuman sa matag puli.",
"Tags": "Mga tag", "Title": "Titulo",
"Tell us more:": "", "Title (e.g. Tell me a fun fact)": "",
"Temperature": "Temperatura", "Title Auto-Generation": "Awtomatikong paghimo sa titulo",
"Template": "Modelo", "Title cannot be an empty string.": "",
"Text Completion": "Pagkompleto sa teksto", "Title Generation Prompt": "Madasig nga henerasyon sa titulo",
"Text-to-Speech Engine": "Text-to-speech nga makina", "to": "adunay",
"Tfs Z": "Tfs Z", "To access the available model names for downloading,": "Aron ma-access ang mga ngalan sa modelo nga ma-download,",
"Thanks for your feedback!": "", "To access the GGUF models available for downloading,": "Aron ma-access ang mga modelo sa GGUF nga magamit alang sa pag-download,",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "", "to chat input.": "sa entrada sa iring.",
"Theme": "Tema", "Today": "",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Kini nagsiguro nga ang imong bililhon nga mga panag-istoryahanay luwas nga natipig sa imong backend database. ", "Toggle settings": "I-toggle ang mga setting",
"This setting does not sync across browsers or devices.": "Kini nga setting wala mag-sync tali sa mga browser o device.", "Toggle sidebar": "I-toggle ang sidebar",
"Thorough explanation": "", "Top K": "Top K",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Sugyot: Pag-update sa daghang variable nga lokasyon nga sunud-sunod pinaagi sa pagpindot sa tab key sa chat entry pagkahuman sa matag puli.", "Top P": "Ibabaw nga P",
"Title": "Titulo", "Trouble accessing Ollama?": "Adunay mga problema sa pag-access sa Ollama?",
"Title (e.g. Tell me a fun fact)": "", "TTS Settings": "Mga Setting sa TTS",
"Title Auto-Generation": "Awtomatikong paghimo sa titulo", "Type Hugging Face Resolve (Download) URL": "Pagsulod sa resolusyon (pag-download) URL Hugging Face",
"Title cannot be an empty string.": "", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! {{provider}}.",
"Title Generation Prompt": "Madasig nga henerasyon sa titulo", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Wala mailhi nga tipo sa file '{{file_type}}', apan gidawat ug gitratar ingon yano nga teksto",
"to": "adunay", "Update and Copy Link": "",
"To access the available model names for downloading,": "Aron ma-access ang mga ngalan sa modelo nga ma-download,", "Update password": "I-update ang password",
"To access the GGUF models available for downloading,": "Aron ma-access ang mga modelo sa GGUF nga magamit alang sa pag-download,", "Upload a GGUF model": "Pag-upload ug modelo sa GGUF",
"to chat input.": "sa entrada sa iring.", "Upload files": "Pag-upload og mga file",
"Today": "", "Upload Progress": "Pag-uswag sa Pag-upload",
"Toggle settings": "I-toggle ang mga setting", "URL Mode": "URL mode",
"Toggle sidebar": "I-toggle ang sidebar", "Use '#' in the prompt input to load and select your documents.": "Gamita ang '#' sa dali nga pagsulod aron makarga ug mapili ang imong mga dokumento.",
"Top K": "Top K", "Use Gravatar": "Paggamit sa Gravatar",
"Top P": "Ibabaw nga P", "Use Initials": "",
"Trouble accessing Ollama?": "Adunay mga problema sa pag-access sa Ollama?", "user": "tiggamit",
"TTS Settings": "Mga Setting sa TTS", "User Permissions": "Mga permiso sa tiggamit",
"Type Hugging Face Resolve (Download) URL": "Pagsulod sa resolusyon (pag-download) URL Hugging Face", "Users": "Mga tiggamit",
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! {{provider}}.", "Utilize": "Sa paggamit",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Wala mailhi nga tipo sa file '{{file_type}}', apan gidawat ug gitratar ingon yano nga teksto", "Valid time units:": "Balido nga mga yunit sa oras:",
"Update and Copy Link": "", "variable": "variable",
"Update password": "I-update ang password", "variable to have them replaced with clipboard content.": "variable aron pulihan kini sa mga sulud sa clipboard.",
"Upload a GGUF model": "Pag-upload ug modelo sa GGUF", "Version": "Bersyon",
"Upload files": "Pag-upload og mga file", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
"Upload Progress": "Pag-uswag sa Pag-upload", "Web": "Web",
"URL Mode": "URL mode", "Web Loader Settings": "",
"Use '#' in the prompt input to load and select your documents.": "Gamita ang '#' sa dali nga pagsulod aron makarga ug mapili ang imong mga dokumento.", "Web Params": "",
"Use Gravatar": "Paggamit sa Gravatar", "Webhook URL": "",
"Use Initials": "", "WebUI Add-ons": "Mga add-on sa WebUI",
"user": "tiggamit", "WebUI Settings": "Mga Setting sa WebUI",
"User Permissions": "Mga permiso sa tiggamit", "WebUI will make requests to": "Ang WebUI maghimo mga hangyo sa",
"Users": "Mga tiggamit", "Whats New in": "Unsay bag-o sa",
"Utilize": "Sa paggamit", "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Kung ang kasaysayan gipalong, ang mga bag-ong chat sa kini nga browser dili makita sa imong kasaysayan sa bisan unsang mga aparato.",
"Valid time units:": "Balido nga mga yunit sa oras:", "Whisper (Local)": "Whisper (Lokal)",
"variable": "variable", "Workspace": "",
"variable to have them replaced with clipboard content.": "variable aron pulihan kini sa mga sulud sa clipboard.", "Write a prompt suggestion (e.g. Who are you?)": "Pagsulat og gisugyot nga prompt (eg. Kinsa ka?)",
"Version": "Bersyon", "Write a summary in 50 words that summarizes [topic or keyword].": "Pagsulat og 50 ka pulong nga summary nga nagsumaryo [topic o keyword].",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Yesterday": "",
"Web": "Web", "You": "",
"Web Loader Settings": "", "You cannot clone a base model": "",
"Web Params": "", "You have no archived conversations.": "",
"Webhook URL": "", "You have shared this chat": "",
"WebUI Add-ons": "Mga add-on sa WebUI", "You're a helpful assistant.": "Usa ka ka mapuslanon nga katabang",
"WebUI Settings": "Mga Setting sa WebUI", "You're now logged in.": "Konektado ka na karon.",
"WebUI will make requests to": "Ang WebUI maghimo mga hangyo sa", "Youtube": "",
"Whats New in": "Unsay bag-o sa", "Youtube Loader Settings": ""
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Kung ang kasaysayan gipalong, ang mga bag-ong chat sa kini nga browser dili makita sa imong kasaysayan sa bisan unsang mga aparato.",
"Whisper (Local)": "Whisper (Lokal)",
"Workspace": "",
"Write a prompt suggestion (e.g. Who are you?)": "Pagsulat og gisugyot nga prompt (eg. Kinsa ka?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Pagsulat og 50 ka pulong nga summary nga nagsumaryo [topic o keyword].",
"Yesterday": "",
"You": "",
"You have no archived conversations.": "",
"You have shared this chat": "",
"You're a helpful assistant.": "Usa ka ka mapuslanon nga katabang",
"You're now logged in.": "Konektado ka na karon.",
"Youtube": "",
"Youtube Loader Settings": ""
} }

View File

@ -3,6 +3,8 @@
"(Beta)": "(Beta)", "(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(z.B. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(z.B. `sh webui.sh --api`)",
"(latest)": "(neueste)", "(latest)": "(neueste)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} denkt nach...", "{{modelName}} is thinking...": "{{modelName}} denkt nach...",
"{{user}}'s Chats": "{{user}}s Chats", "{{user}}'s Chats": "{{user}}s Chats",
"{{webUIName}} Backend Required": "{{webUIName}}-Backend erforderlich", "{{webUIName}} Backend Required": "{{webUIName}}-Backend erforderlich",
@ -11,9 +13,8 @@
"Account": "Account", "Account": "Account",
"Accurate information": "Genaue Information", "Accurate information": "Genaue Information",
"Add": "Hinzufügen", "Add": "Hinzufügen",
"Add a model": "Füge ein Modell hinzu", "Add a model id": "",
"Add a model tag name": "Benenne deinen Modell-Tag", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "Füge eine kurze Beschreibung hinzu, was dieses Modelfile kann",
"Add a short title for this prompt": "Füge einen kurzen Titel für diesen Prompt hinzu", "Add a short title for this prompt": "Füge einen kurzen Titel für diesen Prompt hinzu",
"Add a tag": "benenne", "Add a tag": "benenne",
"Add custom prompt": "Eigenen Prompt hinzufügen", "Add custom prompt": "Eigenen Prompt hinzufügen",
@ -29,6 +30,7 @@
"Admin Panel": "Admin Panel", "Admin Panel": "Admin Panel",
"Admin Settings": "Admin Einstellungen", "Admin Settings": "Admin Einstellungen",
"Advanced Parameters": "Erweiterte Parameter", "Advanced Parameters": "Erweiterte Parameter",
"Advanced Params": "",
"all": "Alle", "all": "Alle",
"All Documents": "Alle Dokumente", "All Documents": "Alle Dokumente",
"All Users": "Alle Benutzer", "All Users": "Alle Benutzer",
@ -43,7 +45,6 @@
"API Key": "API Key", "API Key": "API Key",
"API Key created.": "API Key erstellt", "API Key created.": "API Key erstellt",
"API keys": "API Schlüssel", "API keys": "API Schlüssel",
"API RPM": "API RPM",
"April": "April", "April": "April",
"Archive": "Archivieren", "Archive": "Archivieren",
"Archived Chats": "Archivierte Chats", "Archived Chats": "Archivierte Chats",
@ -60,12 +61,12 @@
"available!": "verfügbar!", "available!": "verfügbar!",
"Back": "Zurück", "Back": "Zurück",
"Bad Response": "Schlechte Antwort", "Bad Response": "Schlechte Antwort",
"Base Model (From)": "",
"before": "bereits geteilt", "before": "bereits geteilt",
"Being lazy": "Faul sein", "Being lazy": "Faul sein",
"Builder Mode": "Builder Modus",
"Bypass SSL verification for Websites": "Bypass SSL-Verifizierung für Websites", "Bypass SSL verification for Websites": "Bypass SSL-Verifizierung für Websites",
"Cancel": "Abbrechen", "Cancel": "Abbrechen",
"Categories": "Kategorien", "Capabilities": "",
"Change Password": "Passwort ändern", "Change Password": "Passwort ändern",
"Chat": "Chat", "Chat": "Chat",
"Chat Bubble UI": "Chat Bubble UI", "Chat Bubble UI": "Chat Bubble UI",
@ -83,7 +84,6 @@
"Citation": "Zitate", "Citation": "Zitate",
"Click here for help.": "Klicke hier für Hilfe.", "Click here for help.": "Klicke hier für Hilfe.",
"Click here to": "Klicke hier, um", "Click here to": "Klicke hier, um",
"Click here to check other modelfiles.": "Klicke hier, um andere Modelfiles zu überprüfen.",
"Click here to select": "Klicke hier um auszuwählen", "Click here to select": "Klicke hier um auszuwählen",
"Click here to select a csv file.": "Klicke hier um eine CSV-Datei auszuwählen.", "Click here to select a csv file.": "Klicke hier um eine CSV-Datei auszuwählen.",
"Click here to select documents.": "Klicke hier um Dokumente auszuwählen", "Click here to select documents.": "Klicke hier um Dokumente auszuwählen",
@ -108,7 +108,7 @@
"Copy Link": "Link kopieren", "Copy Link": "Link kopieren",
"Copying to clipboard was successful!": "Das Kopieren in die Zwischenablage war erfolgreich!", "Copying to clipboard was successful!": "Das Kopieren in die Zwischenablage war erfolgreich!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Erstelle einen prägnanten Satz mit 3-5 Wörtern als Überschrift für die folgende Abfrage. Halte dich dabei strikt an die 3-5-Wort-Grenze und vermeide die Verwendung des Wortes Titel:", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Erstelle einen prägnanten Satz mit 3-5 Wörtern als Überschrift für die folgende Abfrage. Halte dich dabei strikt an die 3-5-Wort-Grenze und vermeide die Verwendung des Wortes Titel:",
"Create a modelfile": "Modelfiles erstellen", "Create a model": "",
"Create Account": "Konto erstellen", "Create Account": "Konto erstellen",
"Create new key": "Neuen Schlüssel erstellen", "Create new key": "Neuen Schlüssel erstellen",
"Create new secret key": "Neuen API Schlüssel erstellen", "Create new secret key": "Neuen API Schlüssel erstellen",
@ -117,7 +117,7 @@
"Current Model": "Aktuelles Modell", "Current Model": "Aktuelles Modell",
"Current Password": "Aktuelles Passwort", "Current Password": "Aktuelles Passwort",
"Custom": "Benutzerdefiniert", "Custom": "Benutzerdefiniert",
"Customize Ollama models for a specific purpose": "Ollama-Modelle für einen bestimmten Zweck anpassen", "Customize models for a specific purpose": "",
"Dark": "Dunkel", "Dark": "Dunkel",
"Dashboard": "Dashboard", "Dashboard": "Dashboard",
"Database": "Datenbank", "Database": "Datenbank",
@ -132,17 +132,17 @@
"delete": "löschen", "delete": "löschen",
"Delete": "Löschen", "Delete": "Löschen",
"Delete a model": "Ein Modell löschen", "Delete a model": "Ein Modell löschen",
"Delete All Chats": "",
"Delete chat": "Chat löschen", "Delete chat": "Chat löschen",
"Delete Chat": "Chat löschen", "Delete Chat": "Chat löschen",
"Delete Chats": "Chats löschen",
"delete this link": "diesen Link zu löschen", "delete this link": "diesen Link zu löschen",
"Delete User": "Benutzer löschen", "Delete User": "Benutzer löschen",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} gelöscht", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} gelöscht",
"Deleted {{tagName}}": "{{tagName}} gelöscht", "Deleted {{name}}": "",
"Description": "Beschreibung", "Description": "Beschreibung",
"Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt", "Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt",
"Disabled": "Deaktiviert", "Disabled": "Deaktiviert",
"Discover a modelfile": "Ein Modelfile entdecken", "Discover a model": "",
"Discover a prompt": "Einen Prompt entdecken", "Discover a prompt": "Einen Prompt entdecken",
"Discover, download, and explore custom prompts": "Benutzerdefinierte Prompts entdecken, herunterladen und erkunden", "Discover, download, and explore custom prompts": "Benutzerdefinierte Prompts entdecken, herunterladen und erkunden",
"Discover, download, and explore model presets": "Modellvorgaben entdecken, herunterladen und erkunden", "Discover, download, and explore model presets": "Modellvorgaben entdecken, herunterladen und erkunden",
@ -176,11 +176,6 @@
"Enter Chunk Size": "Gib die Chunk Size ein", "Enter Chunk Size": "Gib die Chunk Size ein",
"Enter Image Size (e.g. 512x512)": "Gib die Bildgröße ein (z.B. 512x512)", "Enter Image Size (e.g. 512x512)": "Gib die Bildgröße ein (z.B. 512x512)",
"Enter language codes": "Geben Sie die Sprachcodes ein", "Enter language codes": "Geben Sie die Sprachcodes ein",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Gib die LiteLLM API BASE URL ein (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Gib den LiteLLM API Key ein (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Gib die LiteLLM API RPM ein (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Gib das LiteLLM Model ein (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Gib die maximalen Token ein (litellm_params.max_tokens) an",
"Enter model tag (e.g. {{modelTag}})": "Gib den Model-Tag ein", "Enter model tag (e.g. {{modelTag}})": "Gib den Model-Tag ein",
"Enter Number of Steps (e.g. 50)": "Gib die Anzahl an Schritten ein (z.B. 50)", "Enter Number of Steps (e.g. 50)": "Gib die Anzahl an Schritten ein (z.B. 50)",
"Enter Score": "Score eingeben", "Enter Score": "Score eingeben",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "Alle Chats exportieren (alle Benutzer)", "Export All Chats (All Users)": "Alle Chats exportieren (alle Benutzer)",
"Export Chats": "Chats exportieren", "Export Chats": "Chats exportieren",
"Export Documents Mapping": "Dokumentenmapping exportieren", "Export Documents Mapping": "Dokumentenmapping exportieren",
"Export Modelfiles": "Modelfiles exportieren", "Export Models": "",
"Export Prompts": "Prompts exportieren", "Export Prompts": "Prompts exportieren",
"Failed to create API Key.": "API Key erstellen fehlgeschlagen", "Failed to create API Key.": "API Key erstellen fehlgeschlagen",
"Failed to read clipboard contents": "Fehler beim Lesen des Zwischenablageninhalts", "Failed to read clipboard contents": "Fehler beim Lesen des Zwischenablageninhalts",
@ -209,7 +204,7 @@
"Focus chat input": "Chat-Eingabe fokussieren", "Focus chat input": "Chat-Eingabe fokussieren",
"Followed instructions perfectly": "Anweisungen perfekt befolgt", "Followed instructions perfectly": "Anweisungen perfekt befolgt",
"Format your variables using square brackets like this:": "Formatiere deine Variablen mit eckigen Klammern wie folgt:", "Format your variables using square brackets like this:": "Formatiere deine Variablen mit eckigen Klammern wie folgt:",
"From (Base Model)": "Von (Basismodell)", "Frequencey Penalty": "",
"Full Screen Mode": "Vollbildmodus", "Full Screen Mode": "Vollbildmodus",
"General": "Allgemein", "General": "Allgemein",
"General Settings": "Allgemeine Einstellungen", "General Settings": "Allgemeine Einstellungen",
@ -220,7 +215,6 @@
"Hello, {{name}}": "Hallo, {{name}}", "Hello, {{name}}": "Hallo, {{name}}",
"Help": "Hilfe", "Help": "Hilfe",
"Hide": "Verbergen", "Hide": "Verbergen",
"Hide Additional Params": "Verstecke zusätzliche Parameter",
"How can I help you today?": "Wie kann ich dir heute helfen?", "How can I help you today?": "Wie kann ich dir heute helfen?",
"Hybrid Search": "Hybride Suche", "Hybrid Search": "Hybride Suche",
"Image Generation (Experimental)": "Bildgenerierung (experimentell)", "Image Generation (Experimental)": "Bildgenerierung (experimentell)",
@ -229,7 +223,7 @@
"Images": "Bilder", "Images": "Bilder",
"Import Chats": "Chats importieren", "Import Chats": "Chats importieren",
"Import Documents Mapping": "Dokumentenmapping importieren", "Import Documents Mapping": "Dokumentenmapping importieren",
"Import Modelfiles": "Modelfiles importieren", "Import Models": "",
"Import Prompts": "Prompts importieren", "Import Prompts": "Prompts importieren",
"Include `--api` flag when running stable-diffusion-webui": "Füge das `--api`-Flag hinzu, wenn du stable-diffusion-webui nutzt", "Include `--api` flag when running stable-diffusion-webui": "Füge das `--api`-Flag hinzu, wenn du stable-diffusion-webui nutzt",
"Input commands": "Eingabebefehle", "Input commands": "Eingabebefehle",
@ -238,6 +232,7 @@
"January": "Januar", "January": "Januar",
"join our Discord for help.": "Trete unserem Discord bei, um Hilfe zu erhalten.", "join our Discord for help.": "Trete unserem Discord bei, um Hilfe zu erhalten.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "Juli", "July": "Juli",
"June": "Juni", "June": "Juni",
"JWT Expiration": "JWT-Ablauf", "JWT Expiration": "JWT-Ablauf",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "Von der OpenWebUI-Community", "Made by OpenWebUI Community": "Von der OpenWebUI-Community",
"Make sure to enclose them with": "Formatiere deine Variablen mit:", "Make sure to enclose them with": "Formatiere deine Variablen mit:",
"Manage LiteLLM Models": "LiteLLM-Modelle verwalten",
"Manage Models": "Modelle verwalten", "Manage Models": "Modelle verwalten",
"Manage Ollama Models": "Ollama-Modelle verwalten", "Manage Ollama Models": "Ollama-Modelle verwalten",
"March": "März", "March": "März",
"Max Tokens": "Maximale Tokens", "Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es können maximal 3 Modelle gleichzeitig heruntergeladen werden. Bitte versuche es später erneut.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es können maximal 3 Modelle gleichzeitig heruntergeladen werden. Bitte versuche es später erneut.",
"May": "Mai", "May": "Mai",
"Memories accessible by LLMs will be shown here.": "Memories, die von LLMs zugänglich sind, werden hier angezeigt.", "Memories accessible by LLMs will be shown here.": "Memories, die von LLMs zugänglich sind, werden hier angezeigt.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "Modell '{{modelName}}' wurde erfolgreich heruntergeladen.", "Model '{{modelName}}' has been successfully downloaded.": "Modell '{{modelName}}' wurde erfolgreich heruntergeladen.",
"Model '{{modelTag}}' is already in queue for downloading.": "Modell '{{modelTag}}' befindet sich bereits in der Warteschlange zum Herunterladen.", "Model '{{modelTag}}' is already in queue for downloading.": "Modell '{{modelTag}}' befindet sich bereits in der Warteschlange zum Herunterladen.",
"Model {{modelId}} not found": "Modell {{modelId}} nicht gefunden", "Model {{modelId}} not found": "Modell {{modelId}} nicht gefunden",
"Model {{modelName}} already exists.": "Modell {{modelName}} existiert bereits.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Modell-Dateisystempfad erkannt. Modellkurzname ist für das Update erforderlich, Fortsetzung nicht möglich.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Modell-Dateisystempfad erkannt. Modellkurzname ist für das Update erforderlich, Fortsetzung nicht möglich.",
"Model Name": "Modellname", "Model ID": "",
"Model not selected": "Modell nicht ausgewählt", "Model not selected": "Modell nicht ausgewählt",
"Model Tag Name": "Modell-Tag-Name", "Model Params": "",
"Model Whitelisting": "Modell-Whitelisting", "Model Whitelisting": "Modell-Whitelisting",
"Model(s) Whitelisted": "Modell(e) auf der Whitelist", "Model(s) Whitelisted": "Modell(e) auf der Whitelist",
"Modelfile": "Modelfiles",
"Modelfile Advanced Settings": "Erweiterte Modelfileseinstellungen",
"Modelfile Content": "Modelfile Content", "Modelfile Content": "Modelfile Content",
"Modelfiles": "Modelfiles",
"Models": "Modelle", "Models": "Modelle",
"More": "Mehr", "More": "Mehr",
"Name": "Name", "Name": "Name",
"Name Tag": "Namens-Tag", "Name Tag": "Namens-Tag",
"Name your modelfile": "Benenne dein modelfile", "Name your model": "",
"New Chat": "Neuer Chat", "New Chat": "Neuer Chat",
"New Password": "Neues Passwort", "New Password": "Neues Passwort",
"No results found": "Keine Ergebnisse gefunden", "No results found": "Keine Ergebnisse gefunden",
"No source available": "Keine Quelle verfügbar.", "No source available": "Keine Quelle verfügbar.",
"Not factually correct": "Nicht sachlich korrekt.", "Not factually correct": "Nicht sachlich korrekt.",
"Not sure what to add?": "Nicht sicher, was hinzugefügt werden soll?",
"Not sure what to write? Switch to": "Nicht sicher, was du schreiben sollst? Wechsel zu",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Hinweis: Wenn du einen Mindestscore festlegst, wird die Suche nur Dokumente zurückgeben, deren Score größer oder gleich dem Mindestscore ist.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Hinweis: Wenn du einen Mindestscore festlegst, wird die Suche nur Dokumente zurückgeben, deren Score größer oder gleich dem Mindestscore ist.",
"Notifications": "Desktop-Benachrichtigungen", "Notifications": "Desktop-Benachrichtigungen",
"November": "November", "November": "November",
@ -322,7 +311,6 @@
"or": "oder", "or": "oder",
"Other": "Andere", "Other": "Andere",
"Overview": "Übersicht", "Overview": "Übersicht",
"Parameters": "Parameter",
"Password": "Passwort", "Password": "Passwort",
"PDF document (.pdf)": "PDF-Dokument (.pdf)", "PDF document (.pdf)": "PDF-Dokument (.pdf)",
"PDF Extract Images (OCR)": "Text von Bildern aus PDFs extrahieren (OCR)", "PDF Extract Images (OCR)": "Text von Bildern aus PDFs extrahieren (OCR)",
@ -342,10 +330,8 @@
"Prompts": "Prompts", "Prompts": "Prompts",
"Pull \"{{searchValue}}\" from Ollama.com": "\"{{searchValue}}\" von Ollama.com herunterladen", "Pull \"{{searchValue}}\" from Ollama.com": "\"{{searchValue}}\" von Ollama.com herunterladen",
"Pull a model from Ollama.com": "Ein Modell von Ollama.com abrufen", "Pull a model from Ollama.com": "Ein Modell von Ollama.com abrufen",
"Pull Progress": "Fortschritt abrufen",
"Query Params": "Query Parameter", "Query Params": "Query Parameter",
"RAG Template": "RAG-Vorlage", "RAG Template": "RAG-Vorlage",
"Raw Format": "Rohformat",
"Read Aloud": "Vorlesen", "Read Aloud": "Vorlesen",
"Record voice": "Stimme aufnehmen", "Record voice": "Stimme aufnehmen",
"Redirecting you to OpenWebUI Community": "Du wirst zur OpenWebUI-Community weitergeleitet", "Redirecting you to OpenWebUI Community": "Du wirst zur OpenWebUI-Community weitergeleitet",
@ -356,7 +342,6 @@
"Remove Model": "Modell entfernen", "Remove Model": "Modell entfernen",
"Rename": "Umbenennen", "Rename": "Umbenennen",
"Repeat Last N": "Repeat Last N", "Repeat Last N": "Repeat Last N",
"Repeat Penalty": "Repeat Penalty",
"Request Mode": "Request-Modus", "Request Mode": "Request-Modus",
"Reranking Model": "Reranking Modell", "Reranking Model": "Reranking Modell",
"Reranking model disabled": "Rranking Modell deaktiviert", "Reranking model disabled": "Rranking Modell deaktiviert",
@ -377,14 +362,17 @@
"Search": "Suchen", "Search": "Suchen",
"Search a model": "Nach einem Modell suchen", "Search a model": "Nach einem Modell suchen",
"Search Documents": "Dokumente suchen", "Search Documents": "Dokumente suchen",
"Search Models": "",
"Search Prompts": "Prompts suchen", "Search Prompts": "Prompts suchen",
"See readme.md for instructions": "Anleitung in readme.md anzeigen", "See readme.md for instructions": "Anleitung in readme.md anzeigen",
"See what's new": "Was gibt's Neues", "See what's new": "Was gibt's Neues",
"Seed": "Seed", "Seed": "Seed",
"Select a base model": "",
"Select a mode": "Einen Modus auswählen", "Select a mode": "Einen Modus auswählen",
"Select a model": "Ein Modell auswählen", "Select a model": "Ein Modell auswählen",
"Select an Ollama instance": "Eine Ollama Instanz auswählen", "Select an Ollama instance": "Eine Ollama Instanz auswählen",
"Select model": "Modell auswählen", "Select model": "Modell auswählen",
"Selected model(s) do not support image inputs": "",
"Send": "Senden", "Send": "Senden",
"Send a Message": "Eine Nachricht senden", "Send a Message": "Eine Nachricht senden",
"Send message": "Nachricht senden", "Send message": "Nachricht senden",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "Mit OpenWebUI Community teilen", "Share to OpenWebUI Community": "Mit OpenWebUI Community teilen",
"short-summary": "kurze-zusammenfassung", "short-summary": "kurze-zusammenfassung",
"Show": "Anzeigen", "Show": "Anzeigen",
"Show Additional Params": "Zusätzliche Parameter anzeigen",
"Show shortcuts": "Verknüpfungen anzeigen", "Show shortcuts": "Verknüpfungen anzeigen",
"Showcased creativity": "Kreativität zur Schau gestellt", "Showcased creativity": "Kreativität zur Schau gestellt",
"sidebar": "Seitenleiste", "sidebar": "Seitenleiste",
@ -425,7 +412,6 @@
"Success": "Erfolg", "Success": "Erfolg",
"Successfully updated.": "Erfolgreich aktualisiert.", "Successfully updated.": "Erfolgreich aktualisiert.",
"Suggested": "Vorgeschlagen", "Suggested": "Vorgeschlagen",
"Sync All": "Alles synchronisieren",
"System": "System", "System": "System",
"System Prompt": "System-Prompt", "System Prompt": "System-Prompt",
"Tags": "Tags", "Tags": "Tags",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Schreibe eine kurze Zusammenfassung in 50 Wörtern, die [Thema oder Schlüsselwort] zusammenfasst.", "Write a summary in 50 words that summarizes [topic or keyword].": "Schreibe eine kurze Zusammenfassung in 50 Wörtern, die [Thema oder Schlüsselwort] zusammenfasst.",
"Yesterday": "Gestern", "Yesterday": "Gestern",
"You": "Du", "You": "Du",
"You cannot clone a base model": "",
"You have no archived conversations.": "Du hast keine archivierten Unterhaltungen.", "You have no archived conversations.": "Du hast keine archivierten Unterhaltungen.",
"You have shared this chat": "Du hast diesen Chat", "You have shared this chat": "Du hast diesen Chat",
"You're a helpful assistant.": "Du bist ein hilfreicher Assistent.", "You're a helpful assistant.": "Du bist ein hilfreicher Assistent.",

View File

@ -3,6 +3,8 @@
"(Beta)": "(Beta)", "(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(such e.g. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(such e.g. `sh webui.sh --api`)",
"(latest)": "(much latest)", "(latest)": "(much latest)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} is thinkin'...", "{{modelName}} is thinking...": "{{modelName}} is thinkin'...",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "{{webUIName}} Backend Much Required", "{{webUIName}} Backend Required": "{{webUIName}} Backend Much Required",
@ -11,9 +13,8 @@
"Account": "Account", "Account": "Account",
"Accurate information": "", "Accurate information": "",
"Add": "", "Add": "",
"Add a model": "Add a model", "Add a model id": "",
"Add a model tag name": "Add a model tag name", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "Add short description about what this modelfile does",
"Add a short title for this prompt": "Add short title for this prompt", "Add a short title for this prompt": "Add short title for this prompt",
"Add a tag": "Add such tag", "Add a tag": "Add such tag",
"Add custom prompt": "", "Add custom prompt": "",
@ -29,6 +30,7 @@
"Admin Panel": "Admin Panel", "Admin Panel": "Admin Panel",
"Admin Settings": "Admin Settings", "Admin Settings": "Admin Settings",
"Advanced Parameters": "Advanced Parameters", "Advanced Parameters": "Advanced Parameters",
"Advanced Params": "",
"all": "all", "all": "all",
"All Documents": "", "All Documents": "",
"All Users": "All Users", "All Users": "All Users",
@ -43,7 +45,6 @@
"API Key": "API Key", "API Key": "API Key",
"API Key created.": "", "API Key created.": "",
"API keys": "", "API keys": "",
"API RPM": "API RPM",
"April": "", "April": "",
"Archive": "", "Archive": "",
"Archived Chats": "", "Archived Chats": "",
@ -60,12 +61,12 @@
"available!": "available! So excite!", "available!": "available! So excite!",
"Back": "Back", "Back": "Back",
"Bad Response": "", "Bad Response": "",
"Base Model (From)": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Builder Mode": "Builder Mode",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "Cancel", "Cancel": "Cancel",
"Categories": "Categories", "Capabilities": "",
"Change Password": "Change Password", "Change Password": "Change Password",
"Chat": "Chat", "Chat": "Chat",
"Chat Bubble UI": "", "Chat Bubble UI": "",
@ -83,7 +84,6 @@
"Citation": "", "Citation": "",
"Click here for help.": "Click for help. Much assist.", "Click here for help.": "Click for help. Much assist.",
"Click here to": "", "Click here to": "",
"Click here to check other modelfiles.": "Click to check other modelfiles.",
"Click here to select": "Click to select", "Click here to select": "Click to select",
"Click here to select a csv file.": "", "Click here to select a csv file.": "",
"Click here to select documents.": "Click to select documents", "Click here to select documents.": "Click to select documents",
@ -108,7 +108,7 @@
"Copy Link": "", "Copy Link": "",
"Copying to clipboard was successful!": "Copying to clipboard was success! Very success!", "Copying to clipboard was successful!": "Copying to clipboard was success! Very success!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Create short phrase, 3-5 word, as header for query, much strict, avoid 'title':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Create short phrase, 3-5 word, as header for query, much strict, avoid 'title':",
"Create a modelfile": "Create modelfile", "Create a model": "",
"Create Account": "Create Account", "Create Account": "Create Account",
"Create new key": "", "Create new key": "",
"Create new secret key": "", "Create new secret key": "",
@ -117,7 +117,7 @@
"Current Model": "Current Model", "Current Model": "Current Model",
"Current Password": "Current Password", "Current Password": "Current Password",
"Custom": "Custom", "Custom": "Custom",
"Customize Ollama models for a specific purpose": "Customize Ollama models for purpose", "Customize models for a specific purpose": "",
"Dark": "Dark", "Dark": "Dark",
"Dashboard": "", "Dashboard": "",
"Database": "Database", "Database": "Database",
@ -132,17 +132,17 @@
"delete": "delete", "delete": "delete",
"Delete": "", "Delete": "",
"Delete a model": "Delete a model", "Delete a model": "Delete a model",
"Delete All Chats": "",
"Delete chat": "Delete chat", "Delete chat": "Delete chat",
"Delete Chat": "", "Delete Chat": "",
"Delete Chats": "Delete Chats",
"delete this link": "", "delete this link": "",
"Delete User": "", "Delete User": "",
"Deleted {{deleteModelTag}}": "Deleted {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "Deleted {{deleteModelTag}}",
"Deleted {{tagName}}": "", "Deleted {{name}}": "",
"Description": "Description", "Description": "Description",
"Didn't fully follow instructions": "", "Didn't fully follow instructions": "",
"Disabled": "Disabled", "Disabled": "Disabled",
"Discover a modelfile": "Discover modelfile", "Discover a model": "",
"Discover a prompt": "Discover a prompt", "Discover a prompt": "Discover a prompt",
"Discover, download, and explore custom prompts": "Discover, download, and explore custom prompts", "Discover, download, and explore custom prompts": "Discover, download, and explore custom prompts",
"Discover, download, and explore model presets": "Discover, download, and explore model presets", "Discover, download, and explore model presets": "Discover, download, and explore model presets",
@ -176,11 +176,6 @@
"Enter Chunk Size": "Enter Size of Chunk", "Enter Chunk Size": "Enter Size of Chunk",
"Enter Image Size (e.g. 512x512)": "Enter Size of Wow (e.g. 512x512)", "Enter Image Size (e.g. 512x512)": "Enter Size of Wow (e.g. 512x512)",
"Enter language codes": "", "Enter language codes": "",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Enter Base URL of LiteLLM API (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Enter API Bark of LiteLLM (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Enter RPM of LiteLLM API (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Enter Model of LiteLLM (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Enter Maximum Tokens (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Enter model doge tag (e.g. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Enter model doge tag (e.g. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Enter Number of Steps (e.g. 50)", "Enter Number of Steps (e.g. 50)": "Enter Number of Steps (e.g. 50)",
"Enter Score": "", "Enter Score": "",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "Export All Chats (All Doggos)", "Export All Chats (All Users)": "Export All Chats (All Doggos)",
"Export Chats": "Export Barks", "Export Chats": "Export Barks",
"Export Documents Mapping": "Export Mappings of Dogos", "Export Documents Mapping": "Export Mappings of Dogos",
"Export Modelfiles": "Export Modelfiles", "Export Models": "",
"Export Prompts": "Export Promptos", "Export Prompts": "Export Promptos",
"Failed to create API Key.": "", "Failed to create API Key.": "",
"Failed to read clipboard contents": "Failed to read clipboard borks", "Failed to read clipboard contents": "Failed to read clipboard borks",
@ -209,7 +204,7 @@
"Focus chat input": "Focus chat bork", "Focus chat input": "Focus chat bork",
"Followed instructions perfectly": "", "Followed instructions perfectly": "",
"Format your variables using square brackets like this:": "Format variables using square brackets like wow:", "Format your variables using square brackets like this:": "Format variables using square brackets like wow:",
"From (Base Model)": "From (Base Wow)", "Frequencey Penalty": "",
"Full Screen Mode": "Much Full Bark Mode", "Full Screen Mode": "Much Full Bark Mode",
"General": "Woweral", "General": "Woweral",
"General Settings": "General Doge Settings", "General Settings": "General Doge Settings",
@ -220,7 +215,6 @@
"Hello, {{name}}": "Much helo, {{name}}", "Hello, {{name}}": "Much helo, {{name}}",
"Help": "", "Help": "",
"Hide": "Hide", "Hide": "Hide",
"Hide Additional Params": "Hide Extra Barkos",
"How can I help you today?": "How can I halp u today?", "How can I help you today?": "How can I halp u today?",
"Hybrid Search": "", "Hybrid Search": "",
"Image Generation (Experimental)": "Image Wow (Much Experiment)", "Image Generation (Experimental)": "Image Wow (Much Experiment)",
@ -229,7 +223,7 @@
"Images": "Wowmages", "Images": "Wowmages",
"Import Chats": "Import Barks", "Import Chats": "Import Barks",
"Import Documents Mapping": "Import Doge Mapping", "Import Documents Mapping": "Import Doge Mapping",
"Import Modelfiles": "Import Modelfiles", "Import Models": "",
"Import Prompts": "Import Promptos", "Import Prompts": "Import Promptos",
"Include `--api` flag when running stable-diffusion-webui": "Include `--api` flag when running stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Include `--api` flag when running stable-diffusion-webui",
"Input commands": "Input commands", "Input commands": "Input commands",
@ -238,6 +232,7 @@
"January": "", "January": "",
"join our Discord for help.": "join our Discord for help.", "join our Discord for help.": "join our Discord for help.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "", "July": "",
"June": "", "June": "",
"JWT Expiration": "JWT Expire", "JWT Expiration": "JWT Expire",
@ -252,11 +247,10 @@
"LTR": "", "LTR": "",
"Made by OpenWebUI Community": "Made by OpenWebUI Community", "Made by OpenWebUI Community": "Made by OpenWebUI Community",
"Make sure to enclose them with": "Make sure to enclose them with", "Make sure to enclose them with": "Make sure to enclose them with",
"Manage LiteLLM Models": "Manage LiteLLM Models",
"Manage Models": "Manage Wowdels", "Manage Models": "Manage Wowdels",
"Manage Ollama Models": "Manage Ollama Wowdels", "Manage Ollama Models": "Manage Ollama Wowdels",
"March": "", "March": "",
"Max Tokens": "Max Tokens", "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.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maximum of 3 models can be downloaded simultaneously. Please try again later.",
"May": "", "May": "",
"Memories accessible by LLMs will be shown here.": "", "Memories accessible by LLMs will be shown here.": "",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' has been successfully downloaded.", "Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' has been successfully downloaded.",
"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' is already in queue for downloading.", "Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' is already in queue for downloading.",
"Model {{modelId}} not found": "Model {{modelId}} not found", "Model {{modelId}} not found": "Model {{modelId}} not found",
"Model {{modelName}} already exists.": "Model {{modelName}} already exists.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Model filesystem bark detected. Model shortname is required for update, cannot continue.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Model filesystem bark detected. Model shortname is required for update, cannot continue.",
"Model Name": "Wowdel Name", "Model ID": "",
"Model not selected": "Model not selected", "Model not selected": "Model not selected",
"Model Tag Name": "Wowdel Tag Name", "Model Params": "",
"Model Whitelisting": "Wowdel Whitelisting", "Model Whitelisting": "Wowdel Whitelisting",
"Model(s) Whitelisted": "Wowdel(s) Whitelisted", "Model(s) Whitelisted": "Wowdel(s) Whitelisted",
"Modelfile": "Modelfile",
"Modelfile Advanced Settings": "Modelfile Wow Settings",
"Modelfile Content": "Modelfile Content", "Modelfile Content": "Modelfile Content",
"Modelfiles": "Modelfiles",
"Models": "Wowdels", "Models": "Wowdels",
"More": "", "More": "",
"Name": "Name", "Name": "Name",
"Name Tag": "Name Tag", "Name Tag": "Name Tag",
"Name your modelfile": "Name your modelfile", "Name your model": "",
"New Chat": "New Bark", "New Chat": "New Bark",
"New Password": "New Barkword", "New Password": "New Barkword",
"No results found": "", "No results found": "",
"No source available": "No source available", "No source available": "No source available",
"Not factually correct": "", "Not factually correct": "",
"Not sure what to add?": "Not sure what to add?",
"Not sure what to write? Switch to": "Not sure what to write? Switch to",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
"Notifications": "Notifications", "Notifications": "Notifications",
"November": "", "November": "",
@ -322,7 +311,6 @@
"or": "or", "or": "or",
"Other": "", "Other": "",
"Overview": "", "Overview": "",
"Parameters": "Parametos",
"Password": "Barkword", "Password": "Barkword",
"PDF document (.pdf)": "", "PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "PDF Extract Wowmages (OCR)", "PDF Extract Images (OCR)": "PDF Extract Wowmages (OCR)",
@ -342,10 +330,8 @@
"Prompts": "Promptos", "Prompts": "Promptos",
"Pull \"{{searchValue}}\" from Ollama.com": "", "Pull \"{{searchValue}}\" from Ollama.com": "",
"Pull a model from Ollama.com": "Pull a wowdel from Ollama.com", "Pull a model from Ollama.com": "Pull a wowdel from Ollama.com",
"Pull Progress": "Pull Progress",
"Query Params": "Query Bark", "Query Params": "Query Bark",
"RAG Template": "RAG Template", "RAG Template": "RAG Template",
"Raw Format": "Raw Wowmat",
"Read Aloud": "", "Read Aloud": "",
"Record voice": "Record Bark", "Record voice": "Record Bark",
"Redirecting you to OpenWebUI Community": "Redirecting you to OpenWebUI Community", "Redirecting you to OpenWebUI Community": "Redirecting you to OpenWebUI Community",
@ -356,7 +342,6 @@
"Remove Model": "", "Remove Model": "",
"Rename": "", "Rename": "",
"Repeat Last N": "Repeat Last N", "Repeat Last N": "Repeat Last N",
"Repeat Penalty": "Repeat Penalty",
"Request Mode": "Request Bark", "Request Mode": "Request Bark",
"Reranking Model": "", "Reranking Model": "",
"Reranking model disabled": "", "Reranking model disabled": "",
@ -377,14 +362,17 @@
"Search": "Search very search", "Search": "Search very search",
"Search a model": "", "Search a model": "",
"Search Documents": "Search Documents much find", "Search Documents": "Search Documents much find",
"Search Models": "",
"Search Prompts": "Search Prompts much wow", "Search Prompts": "Search Prompts much wow",
"See readme.md for instructions": "See readme.md for instructions wow", "See readme.md for instructions": "See readme.md for instructions wow",
"See what's new": "See what's new so amaze", "See what's new": "See what's new so amaze",
"Seed": "Seed very plant", "Seed": "Seed very plant",
"Select a base model": "",
"Select a mode": "Select a mode very choose", "Select a mode": "Select a mode very choose",
"Select a model": "Select a model much choice", "Select a model": "Select a model much choice",
"Select an Ollama instance": "Select an Ollama instance very choose", "Select an Ollama instance": "Select an Ollama instance very choose",
"Select model": "Select model much choice", "Select model": "Select model much choice",
"Selected model(s) do not support image inputs": "",
"Send": "", "Send": "",
"Send a Message": "Send a Message much message", "Send a Message": "Send a Message much message",
"Send message": "Send message very send", "Send message": "Send message very send",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "Share to OpenWebUI Community much community", "Share to OpenWebUI Community": "Share to OpenWebUI Community much community",
"short-summary": "short-summary so short", "short-summary": "short-summary so short",
"Show": "Show much show", "Show": "Show much show",
"Show Additional Params": "Show Additional Params very many params",
"Show shortcuts": "Show shortcuts much shortcut", "Show shortcuts": "Show shortcuts much shortcut",
"Showcased creativity": "", "Showcased creativity": "",
"sidebar": "sidebar much side", "sidebar": "sidebar much side",
@ -425,7 +412,6 @@
"Success": "Success very success", "Success": "Success very success",
"Successfully updated.": "Successfully updated. Very updated.", "Successfully updated.": "Successfully updated. Very updated.",
"Suggested": "", "Suggested": "",
"Sync All": "Sync All much sync",
"System": "System very system", "System": "System very system",
"System Prompt": "System Prompt much prompt", "System Prompt": "System Prompt much prompt",
"Tags": "Tags very tags", "Tags": "Tags very tags",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Write a summary in 50 words that summarizes [topic or keyword]. Much summarize.", "Write a summary in 50 words that summarizes [topic or keyword].": "Write a summary in 50 words that summarizes [topic or keyword]. Much summarize.",
"Yesterday": "", "Yesterday": "",
"You": "", "You": "",
"You cannot clone a base model": "",
"You have no archived conversations.": "", "You have no archived conversations.": "",
"You have shared this chat": "", "You have shared this chat": "",
"You're a helpful assistant.": "You're a helpful assistant. Much helpful.", "You're a helpful assistant.": "You're a helpful assistant. Much helpful.",

View File

@ -3,6 +3,8 @@
"(Beta)": "", "(Beta)": "",
"(e.g. `sh webui.sh --api`)": "", "(e.g. `sh webui.sh --api`)": "",
"(latest)": "", "(latest)": "",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "", "{{modelName}} is thinking...": "",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "", "{{webUIName}} Backend Required": "",
@ -11,9 +13,8 @@
"Account": "", "Account": "",
"Accurate information": "", "Accurate information": "",
"Add": "", "Add": "",
"Add a model": "", "Add a model id": "",
"Add a model tag name": "", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "",
"Add a short title for this prompt": "", "Add a short title for this prompt": "",
"Add a tag": "", "Add a tag": "",
"Add custom prompt": "", "Add custom prompt": "",
@ -29,6 +30,7 @@
"Admin Panel": "", "Admin Panel": "",
"Admin Settings": "", "Admin Settings": "",
"Advanced Parameters": "", "Advanced Parameters": "",
"Advanced Params": "",
"all": "", "all": "",
"All Documents": "", "All Documents": "",
"All Users": "", "All Users": "",
@ -43,7 +45,6 @@
"API Key": "", "API Key": "",
"API Key created.": "", "API Key created.": "",
"API keys": "", "API keys": "",
"API RPM": "",
"April": "", "April": "",
"Archive": "", "Archive": "",
"Archived Chats": "", "Archived Chats": "",
@ -60,12 +61,12 @@
"available!": "", "available!": "",
"Back": "", "Back": "",
"Bad Response": "", "Bad Response": "",
"Base Model (From)": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Builder Mode": "",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "", "Cancel": "",
"Categories": "", "Capabilities": "",
"Change Password": "", "Change Password": "",
"Chat": "", "Chat": "",
"Chat Bubble UI": "", "Chat Bubble UI": "",
@ -83,7 +84,6 @@
"Citation": "", "Citation": "",
"Click here for help.": "", "Click here for help.": "",
"Click here to": "", "Click here to": "",
"Click here to check other modelfiles.": "",
"Click here to select": "", "Click here to select": "",
"Click here to select a csv file.": "", "Click here to select a csv file.": "",
"Click here to select documents.": "", "Click here to select documents.": "",
@ -108,7 +108,7 @@
"Copy Link": "", "Copy Link": "",
"Copying to clipboard was successful!": "", "Copying to clipboard was successful!": "",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "",
"Create a modelfile": "", "Create a model": "",
"Create Account": "", "Create Account": "",
"Create new key": "", "Create new key": "",
"Create new secret key": "", "Create new secret key": "",
@ -117,7 +117,7 @@
"Current Model": "", "Current Model": "",
"Current Password": "", "Current Password": "",
"Custom": "", "Custom": "",
"Customize Ollama models for a specific purpose": "", "Customize models for a specific purpose": "",
"Dark": "", "Dark": "",
"Dashboard": "", "Dashboard": "",
"Database": "", "Database": "",
@ -132,17 +132,17 @@
"delete": "", "delete": "",
"Delete": "", "Delete": "",
"Delete a model": "", "Delete a model": "",
"Delete All Chats": "",
"Delete chat": "", "Delete chat": "",
"Delete Chat": "", "Delete Chat": "",
"Delete Chats": "",
"delete this link": "", "delete this link": "",
"Delete User": "", "Delete User": "",
"Deleted {{deleteModelTag}}": "", "Deleted {{deleteModelTag}}": "",
"Deleted {{tagName}}": "", "Deleted {{name}}": "",
"Description": "", "Description": "",
"Didn't fully follow instructions": "", "Didn't fully follow instructions": "",
"Disabled": "", "Disabled": "",
"Discover a modelfile": "", "Discover a model": "",
"Discover a prompt": "", "Discover a prompt": "",
"Discover, download, and explore custom prompts": "", "Discover, download, and explore custom prompts": "",
"Discover, download, and explore model presets": "", "Discover, download, and explore model presets": "",
@ -176,11 +176,6 @@
"Enter Chunk Size": "", "Enter Chunk Size": "",
"Enter Image Size (e.g. 512x512)": "", "Enter Image Size (e.g. 512x512)": "",
"Enter language codes": "", "Enter language codes": "",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "",
"Enter LiteLLM API Key (litellm_params.api_key)": "",
"Enter LiteLLM API RPM (litellm_params.rpm)": "",
"Enter LiteLLM Model (litellm_params.model)": "",
"Enter Max Tokens (litellm_params.max_tokens)": "",
"Enter model tag (e.g. {{modelTag}})": "", "Enter model tag (e.g. {{modelTag}})": "",
"Enter Number of Steps (e.g. 50)": "", "Enter Number of Steps (e.g. 50)": "",
"Enter Score": "", "Enter Score": "",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "", "Export All Chats (All Users)": "",
"Export Chats": "", "Export Chats": "",
"Export Documents Mapping": "", "Export Documents Mapping": "",
"Export Modelfiles": "", "Export Models": "",
"Export Prompts": "", "Export Prompts": "",
"Failed to create API Key.": "", "Failed to create API Key.": "",
"Failed to read clipboard contents": "", "Failed to read clipboard contents": "",
@ -209,7 +204,7 @@
"Focus chat input": "", "Focus chat input": "",
"Followed instructions perfectly": "", "Followed instructions perfectly": "",
"Format your variables using square brackets like this:": "", "Format your variables using square brackets like this:": "",
"From (Base Model)": "", "Frequencey Penalty": "",
"Full Screen Mode": "", "Full Screen Mode": "",
"General": "", "General": "",
"General Settings": "", "General Settings": "",
@ -220,7 +215,6 @@
"Hello, {{name}}": "", "Hello, {{name}}": "",
"Help": "", "Help": "",
"Hide": "", "Hide": "",
"Hide Additional Params": "",
"How can I help you today?": "", "How can I help you today?": "",
"Hybrid Search": "", "Hybrid Search": "",
"Image Generation (Experimental)": "", "Image Generation (Experimental)": "",
@ -229,7 +223,7 @@
"Images": "", "Images": "",
"Import Chats": "", "Import Chats": "",
"Import Documents Mapping": "", "Import Documents Mapping": "",
"Import Modelfiles": "", "Import Models": "",
"Import Prompts": "", "Import Prompts": "",
"Include `--api` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "",
"Input commands": "", "Input commands": "",
@ -238,6 +232,7 @@
"January": "", "January": "",
"join our Discord for help.": "", "join our Discord for help.": "",
"JSON": "", "JSON": "",
"JSON Preview": "",
"July": "", "July": "",
"June": "", "June": "",
"JWT Expiration": "", "JWT Expiration": "",
@ -252,11 +247,10 @@
"LTR": "", "LTR": "",
"Made by OpenWebUI Community": "", "Made by OpenWebUI Community": "",
"Make sure to enclose them with": "", "Make sure to enclose them with": "",
"Manage LiteLLM Models": "",
"Manage Models": "", "Manage Models": "",
"Manage Ollama Models": "", "Manage Ollama Models": "",
"March": "", "March": "",
"Max Tokens": "", "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.": "",
"May": "", "May": "",
"Memories accessible by LLMs will be shown here.": "", "Memories accessible by LLMs will be shown here.": "",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "", "Model '{{modelName}}' has been successfully downloaded.": "",
"Model '{{modelTag}}' is already in queue for downloading.": "", "Model '{{modelTag}}' is already in queue for downloading.": "",
"Model {{modelId}} not found": "", "Model {{modelId}} not found": "",
"Model {{modelName}} already exists.": "", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "",
"Model Name": "", "Model ID": "",
"Model not selected": "", "Model not selected": "",
"Model Tag Name": "", "Model Params": "",
"Model Whitelisting": "", "Model Whitelisting": "",
"Model(s) Whitelisted": "", "Model(s) Whitelisted": "",
"Modelfile": "",
"Modelfile Advanced Settings": "",
"Modelfile Content": "", "Modelfile Content": "",
"Modelfiles": "",
"Models": "", "Models": "",
"More": "", "More": "",
"Name": "", "Name": "",
"Name Tag": "", "Name Tag": "",
"Name your modelfile": "", "Name your model": "",
"New Chat": "", "New Chat": "",
"New Password": "", "New Password": "",
"No results found": "", "No results found": "",
"No source available": "", "No source available": "",
"Not factually correct": "", "Not factually correct": "",
"Not sure what to add?": "",
"Not sure what to write? Switch to": "",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
"Notifications": "", "Notifications": "",
"November": "", "November": "",
@ -322,7 +311,6 @@
"or": "", "or": "",
"Other": "", "Other": "",
"Overview": "", "Overview": "",
"Parameters": "",
"Password": "", "Password": "",
"PDF document (.pdf)": "", "PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "", "PDF Extract Images (OCR)": "",
@ -342,10 +330,8 @@
"Prompts": "", "Prompts": "",
"Pull \"{{searchValue}}\" from Ollama.com": "", "Pull \"{{searchValue}}\" from Ollama.com": "",
"Pull a model from Ollama.com": "", "Pull a model from Ollama.com": "",
"Pull Progress": "",
"Query Params": "", "Query Params": "",
"RAG Template": "", "RAG Template": "",
"Raw Format": "",
"Read Aloud": "", "Read Aloud": "",
"Record voice": "", "Record voice": "",
"Redirecting you to OpenWebUI Community": "", "Redirecting you to OpenWebUI Community": "",
@ -356,7 +342,6 @@
"Remove Model": "", "Remove Model": "",
"Rename": "", "Rename": "",
"Repeat Last N": "", "Repeat Last N": "",
"Repeat Penalty": "",
"Request Mode": "", "Request Mode": "",
"Reranking Model": "", "Reranking Model": "",
"Reranking model disabled": "", "Reranking model disabled": "",
@ -377,14 +362,17 @@
"Search": "", "Search": "",
"Search a model": "", "Search a model": "",
"Search Documents": "", "Search Documents": "",
"Search Models": "",
"Search Prompts": "", "Search Prompts": "",
"See readme.md for instructions": "", "See readme.md for instructions": "",
"See what's new": "", "See what's new": "",
"Seed": "", "Seed": "",
"Select a base model": "",
"Select a mode": "", "Select a mode": "",
"Select a model": "", "Select a model": "",
"Select an Ollama instance": "", "Select an Ollama instance": "",
"Select model": "", "Select model": "",
"Selected model(s) do not support image inputs": "",
"Send": "", "Send": "",
"Send a Message": "", "Send a Message": "",
"Send message": "", "Send message": "",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "", "Share to OpenWebUI Community": "",
"short-summary": "", "short-summary": "",
"Show": "", "Show": "",
"Show Additional Params": "",
"Show shortcuts": "", "Show shortcuts": "",
"Showcased creativity": "", "Showcased creativity": "",
"sidebar": "", "sidebar": "",
@ -425,7 +412,6 @@
"Success": "", "Success": "",
"Successfully updated.": "", "Successfully updated.": "",
"Suggested": "", "Suggested": "",
"Sync All": "",
"System": "", "System": "",
"System Prompt": "", "System Prompt": "",
"Tags": "", "Tags": "",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "", "Write a summary in 50 words that summarizes [topic or keyword].": "",
"Yesterday": "", "Yesterday": "",
"You": "", "You": "",
"You cannot clone a base model": "",
"You have no archived conversations.": "", "You have no archived conversations.": "",
"You have shared this chat": "", "You have shared this chat": "",
"You're a helpful assistant.": "", "You're a helpful assistant.": "",

View File

@ -3,6 +3,8 @@
"(Beta)": "", "(Beta)": "",
"(e.g. `sh webui.sh --api`)": "", "(e.g. `sh webui.sh --api`)": "",
"(latest)": "", "(latest)": "",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "", "{{modelName}} is thinking...": "",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "", "{{webUIName}} Backend Required": "",
@ -11,9 +13,8 @@
"Account": "", "Account": "",
"Accurate information": "", "Accurate information": "",
"Add": "", "Add": "",
"Add a model": "", "Add a model id": "",
"Add a model tag name": "", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "",
"Add a short title for this prompt": "", "Add a short title for this prompt": "",
"Add a tag": "", "Add a tag": "",
"Add custom prompt": "", "Add custom prompt": "",
@ -29,6 +30,7 @@
"Admin Panel": "", "Admin Panel": "",
"Admin Settings": "", "Admin Settings": "",
"Advanced Parameters": "", "Advanced Parameters": "",
"Advanced Params": "",
"all": "", "all": "",
"All Documents": "", "All Documents": "",
"All Users": "", "All Users": "",
@ -43,7 +45,6 @@
"API Key": "", "API Key": "",
"API Key created.": "", "API Key created.": "",
"API keys": "", "API keys": "",
"API RPM": "",
"April": "", "April": "",
"Archive": "", "Archive": "",
"Archived Chats": "", "Archived Chats": "",
@ -60,12 +61,12 @@
"available!": "", "available!": "",
"Back": "", "Back": "",
"Bad Response": "", "Bad Response": "",
"Base Model (From)": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Builder Mode": "",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "", "Cancel": "",
"Categories": "", "Capabilities": "",
"Change Password": "", "Change Password": "",
"Chat": "", "Chat": "",
"Chat Bubble UI": "", "Chat Bubble UI": "",
@ -83,7 +84,6 @@
"Citation": "", "Citation": "",
"Click here for help.": "", "Click here for help.": "",
"Click here to": "", "Click here to": "",
"Click here to check other modelfiles.": "",
"Click here to select": "", "Click here to select": "",
"Click here to select a csv file.": "", "Click here to select a csv file.": "",
"Click here to select documents.": "", "Click here to select documents.": "",
@ -108,7 +108,7 @@
"Copy Link": "", "Copy Link": "",
"Copying to clipboard was successful!": "", "Copying to clipboard was successful!": "",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "",
"Create a modelfile": "", "Create a model": "",
"Create Account": "", "Create Account": "",
"Create new key": "", "Create new key": "",
"Create new secret key": "", "Create new secret key": "",
@ -117,7 +117,7 @@
"Current Model": "", "Current Model": "",
"Current Password": "", "Current Password": "",
"Custom": "", "Custom": "",
"Customize Ollama models for a specific purpose": "", "Customize models for a specific purpose": "",
"Dark": "", "Dark": "",
"Dashboard": "", "Dashboard": "",
"Database": "", "Database": "",
@ -132,17 +132,17 @@
"delete": "", "delete": "",
"Delete": "", "Delete": "",
"Delete a model": "", "Delete a model": "",
"Delete All Chats": "",
"Delete chat": "", "Delete chat": "",
"Delete Chat": "", "Delete Chat": "",
"Delete Chats": "",
"delete this link": "", "delete this link": "",
"Delete User": "", "Delete User": "",
"Deleted {{deleteModelTag}}": "", "Deleted {{deleteModelTag}}": "",
"Deleted {{tagName}}": "", "Deleted {{name}}": "",
"Description": "", "Description": "",
"Didn't fully follow instructions": "", "Didn't fully follow instructions": "",
"Disabled": "", "Disabled": "",
"Discover a modelfile": "", "Discover a model": "",
"Discover a prompt": "", "Discover a prompt": "",
"Discover, download, and explore custom prompts": "", "Discover, download, and explore custom prompts": "",
"Discover, download, and explore model presets": "", "Discover, download, and explore model presets": "",
@ -176,11 +176,6 @@
"Enter Chunk Size": "", "Enter Chunk Size": "",
"Enter Image Size (e.g. 512x512)": "", "Enter Image Size (e.g. 512x512)": "",
"Enter language codes": "", "Enter language codes": "",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "",
"Enter LiteLLM API Key (litellm_params.api_key)": "",
"Enter LiteLLM API RPM (litellm_params.rpm)": "",
"Enter LiteLLM Model (litellm_params.model)": "",
"Enter Max Tokens (litellm_params.max_tokens)": "",
"Enter model tag (e.g. {{modelTag}})": "", "Enter model tag (e.g. {{modelTag}})": "",
"Enter Number of Steps (e.g. 50)": "", "Enter Number of Steps (e.g. 50)": "",
"Enter Score": "", "Enter Score": "",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "", "Export All Chats (All Users)": "",
"Export Chats": "", "Export Chats": "",
"Export Documents Mapping": "", "Export Documents Mapping": "",
"Export Modelfiles": "", "Export Models": "",
"Export Prompts": "", "Export Prompts": "",
"Failed to create API Key.": "", "Failed to create API Key.": "",
"Failed to read clipboard contents": "", "Failed to read clipboard contents": "",
@ -209,7 +204,7 @@
"Focus chat input": "", "Focus chat input": "",
"Followed instructions perfectly": "", "Followed instructions perfectly": "",
"Format your variables using square brackets like this:": "", "Format your variables using square brackets like this:": "",
"From (Base Model)": "", "Frequencey Penalty": "",
"Full Screen Mode": "", "Full Screen Mode": "",
"General": "", "General": "",
"General Settings": "", "General Settings": "",
@ -220,7 +215,6 @@
"Hello, {{name}}": "", "Hello, {{name}}": "",
"Help": "", "Help": "",
"Hide": "", "Hide": "",
"Hide Additional Params": "",
"How can I help you today?": "", "How can I help you today?": "",
"Hybrid Search": "", "Hybrid Search": "",
"Image Generation (Experimental)": "", "Image Generation (Experimental)": "",
@ -229,7 +223,7 @@
"Images": "", "Images": "",
"Import Chats": "", "Import Chats": "",
"Import Documents Mapping": "", "Import Documents Mapping": "",
"Import Modelfiles": "", "Import Models": "",
"Import Prompts": "", "Import Prompts": "",
"Include `--api` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "",
"Input commands": "", "Input commands": "",
@ -238,6 +232,7 @@
"January": "", "January": "",
"join our Discord for help.": "", "join our Discord for help.": "",
"JSON": "", "JSON": "",
"JSON Preview": "",
"July": "", "July": "",
"June": "", "June": "",
"JWT Expiration": "", "JWT Expiration": "",
@ -252,11 +247,10 @@
"LTR": "", "LTR": "",
"Made by OpenWebUI Community": "", "Made by OpenWebUI Community": "",
"Make sure to enclose them with": "", "Make sure to enclose them with": "",
"Manage LiteLLM Models": "",
"Manage Models": "", "Manage Models": "",
"Manage Ollama Models": "", "Manage Ollama Models": "",
"March": "", "March": "",
"Max Tokens": "", "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.": "",
"May": "", "May": "",
"Memories accessible by LLMs will be shown here.": "", "Memories accessible by LLMs will be shown here.": "",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "", "Model '{{modelName}}' has been successfully downloaded.": "",
"Model '{{modelTag}}' is already in queue for downloading.": "", "Model '{{modelTag}}' is already in queue for downloading.": "",
"Model {{modelId}} not found": "", "Model {{modelId}} not found": "",
"Model {{modelName}} already exists.": "", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "",
"Model Name": "", "Model ID": "",
"Model not selected": "", "Model not selected": "",
"Model Tag Name": "", "Model Params": "",
"Model Whitelisting": "", "Model Whitelisting": "",
"Model(s) Whitelisted": "", "Model(s) Whitelisted": "",
"Modelfile": "",
"Modelfile Advanced Settings": "",
"Modelfile Content": "", "Modelfile Content": "",
"Modelfiles": "",
"Models": "", "Models": "",
"More": "", "More": "",
"Name": "", "Name": "",
"Name Tag": "", "Name Tag": "",
"Name your modelfile": "", "Name your model": "",
"New Chat": "", "New Chat": "",
"New Password": "", "New Password": "",
"No results found": "", "No results found": "",
"No source available": "", "No source available": "",
"Not factually correct": "", "Not factually correct": "",
"Not sure what to add?": "",
"Not sure what to write? Switch to": "",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
"Notifications": "", "Notifications": "",
"November": "", "November": "",
@ -322,7 +311,6 @@
"or": "", "or": "",
"Other": "", "Other": "",
"Overview": "", "Overview": "",
"Parameters": "",
"Password": "", "Password": "",
"PDF document (.pdf)": "", "PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "", "PDF Extract Images (OCR)": "",
@ -342,10 +330,8 @@
"Prompts": "", "Prompts": "",
"Pull \"{{searchValue}}\" from Ollama.com": "", "Pull \"{{searchValue}}\" from Ollama.com": "",
"Pull a model from Ollama.com": "", "Pull a model from Ollama.com": "",
"Pull Progress": "",
"Query Params": "", "Query Params": "",
"RAG Template": "", "RAG Template": "",
"Raw Format": "",
"Read Aloud": "", "Read Aloud": "",
"Record voice": "", "Record voice": "",
"Redirecting you to OpenWebUI Community": "", "Redirecting you to OpenWebUI Community": "",
@ -356,7 +342,6 @@
"Remove Model": "", "Remove Model": "",
"Rename": "", "Rename": "",
"Repeat Last N": "", "Repeat Last N": "",
"Repeat Penalty": "",
"Request Mode": "", "Request Mode": "",
"Reranking Model": "", "Reranking Model": "",
"Reranking model disabled": "", "Reranking model disabled": "",
@ -377,14 +362,17 @@
"Search": "", "Search": "",
"Search a model": "", "Search a model": "",
"Search Documents": "", "Search Documents": "",
"Search Models": "",
"Search Prompts": "", "Search Prompts": "",
"See readme.md for instructions": "", "See readme.md for instructions": "",
"See what's new": "", "See what's new": "",
"Seed": "", "Seed": "",
"Select a base model": "",
"Select a mode": "", "Select a mode": "",
"Select a model": "", "Select a model": "",
"Select an Ollama instance": "", "Select an Ollama instance": "",
"Select model": "", "Select model": "",
"Selected model(s) do not support image inputs": "",
"Send": "", "Send": "",
"Send a Message": "", "Send a Message": "",
"Send message": "", "Send message": "",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "", "Share to OpenWebUI Community": "",
"short-summary": "", "short-summary": "",
"Show": "", "Show": "",
"Show Additional Params": "",
"Show shortcuts": "", "Show shortcuts": "",
"Showcased creativity": "", "Showcased creativity": "",
"sidebar": "", "sidebar": "",
@ -425,7 +412,6 @@
"Success": "", "Success": "",
"Successfully updated.": "", "Successfully updated.": "",
"Suggested": "", "Suggested": "",
"Sync All": "",
"System": "", "System": "",
"System Prompt": "", "System Prompt": "",
"Tags": "", "Tags": "",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "", "Write a summary in 50 words that summarizes [topic or keyword].": "",
"Yesterday": "", "Yesterday": "",
"You": "", "You": "",
"You cannot clone a base model": "",
"You have no archived conversations.": "", "You have no archived conversations.": "",
"You have shared this chat": "", "You have shared this chat": "",
"You're a helpful assistant.": "", "You're a helpful assistant.": "",

View File

@ -3,6 +3,8 @@
"(Beta)": "(Beta)", "(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(p.ej. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(p.ej. `sh webui.sh --api`)",
"(latest)": "(latest)", "(latest)": "(latest)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} está pensando...", "{{modelName}} is thinking...": "{{modelName}} está pensando...",
"{{user}}'s Chats": "{{user}}'s Chats", "{{user}}'s Chats": "{{user}}'s Chats",
"{{webUIName}} Backend Required": "{{webUIName}} Servidor Requerido", "{{webUIName}} Backend Required": "{{webUIName}} Servidor Requerido",
@ -11,9 +13,8 @@
"Account": "Cuenta", "Account": "Cuenta",
"Accurate information": "Información precisa", "Accurate information": "Información precisa",
"Add": "Agregar", "Add": "Agregar",
"Add a model": "Agregar un modelo", "Add a model id": "",
"Add a model tag name": "Agregar un nombre de etiqueta de modelo", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "Agregue una descripción corta de lo que este modelfile hace",
"Add a short title for this prompt": "Agregue un título corto para este Prompt", "Add a short title for this prompt": "Agregue un título corto para este Prompt",
"Add a tag": "Agregar una etiqueta", "Add a tag": "Agregar una etiqueta",
"Add custom prompt": "Agregar un prompt personalizado", "Add custom prompt": "Agregar un prompt personalizado",
@ -29,6 +30,7 @@
"Admin Panel": "Panel de Administración", "Admin Panel": "Panel de Administración",
"Admin Settings": "Configuración de Administrador", "Admin Settings": "Configuración de Administrador",
"Advanced Parameters": "Parámetros Avanzados", "Advanced Parameters": "Parámetros Avanzados",
"Advanced Params": "",
"all": "todo", "all": "todo",
"All Documents": "Todos los Documentos", "All Documents": "Todos los Documentos",
"All Users": "Todos los Usuarios", "All Users": "Todos los Usuarios",
@ -43,7 +45,6 @@
"API Key": "Clave de la API ", "API Key": "Clave de la API ",
"API Key created.": "Clave de la API creada.", "API Key created.": "Clave de la API creada.",
"API keys": "Claves de la API", "API keys": "Claves de la API",
"API RPM": "RPM de la API",
"April": "Abril", "April": "Abril",
"Archive": "Archivar", "Archive": "Archivar",
"Archived Chats": "Chats archivados", "Archived Chats": "Chats archivados",
@ -60,12 +61,12 @@
"available!": "¡disponible!", "available!": "¡disponible!",
"Back": "Volver", "Back": "Volver",
"Bad Response": "Respuesta incorrecta", "Bad Response": "Respuesta incorrecta",
"Base Model (From)": "",
"before": "antes", "before": "antes",
"Being lazy": "Ser perezoso", "Being lazy": "Ser perezoso",
"Builder Mode": "Modo de Constructor",
"Bypass SSL verification for Websites": "Desactivar la verificación SSL para sitios web", "Bypass SSL verification for Websites": "Desactivar la verificación SSL para sitios web",
"Cancel": "Cancelar", "Cancel": "Cancelar",
"Categories": "Categorías", "Capabilities": "",
"Change Password": "Cambia la Contraseña", "Change Password": "Cambia la Contraseña",
"Chat": "Chat", "Chat": "Chat",
"Chat Bubble UI": "Burbuja de chat UI", "Chat Bubble UI": "Burbuja de chat UI",
@ -83,7 +84,6 @@
"Citation": "Cita", "Citation": "Cita",
"Click here for help.": "Presiona aquí para obtener ayuda.", "Click here for help.": "Presiona aquí para obtener ayuda.",
"Click here to": "Presiona aquí para", "Click here to": "Presiona aquí para",
"Click here to check other modelfiles.": "Presiona aquí para consultar otros modelfiles.",
"Click here to select": "Presiona aquí para seleccionar", "Click here to select": "Presiona aquí para seleccionar",
"Click here to select a csv file.": "Presiona aquí para seleccionar un archivo csv.", "Click here to select a csv file.": "Presiona aquí para seleccionar un archivo csv.",
"Click here to select documents.": "Presiona aquí para seleccionar documentos", "Click here to select documents.": "Presiona aquí para seleccionar documentos",
@ -108,7 +108,7 @@
"Copy Link": "Copiar enlace", "Copy Link": "Copiar enlace",
"Copying to clipboard was successful!": "¡La copia al portapapeles se ha realizado correctamente!", "Copying to clipboard was successful!": "¡La copia al portapapeles se ha realizado correctamente!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Cree una frase concisa de 3 a 5 palabras como encabezado para la siguiente consulta, respetando estrictamente el límite de 3 a 5 palabras y evitando el uso de la palabra 'título':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Cree una frase concisa de 3 a 5 palabras como encabezado para la siguiente consulta, respetando estrictamente el límite de 3 a 5 palabras y evitando el uso de la palabra 'título':",
"Create a modelfile": "Crea un modelfile", "Create a model": "",
"Create Account": "Crear una cuenta", "Create Account": "Crear una cuenta",
"Create new key": "Crear una nueva clave", "Create new key": "Crear una nueva clave",
"Create new secret key": "Crear una nueva clave secreta", "Create new secret key": "Crear una nueva clave secreta",
@ -117,7 +117,7 @@
"Current Model": "Modelo Actual", "Current Model": "Modelo Actual",
"Current Password": "Contraseña Actual", "Current Password": "Contraseña Actual",
"Custom": "Personalizado", "Custom": "Personalizado",
"Customize Ollama models for a specific purpose": "Personaliza los modelos de Ollama para un propósito específico", "Customize models for a specific purpose": "",
"Dark": "Oscuro", "Dark": "Oscuro",
"Dashboard": "Tablero", "Dashboard": "Tablero",
"Database": "Base de datos", "Database": "Base de datos",
@ -132,17 +132,17 @@
"delete": "borrar", "delete": "borrar",
"Delete": "Borrar", "Delete": "Borrar",
"Delete a model": "Borra un modelo", "Delete a model": "Borra un modelo",
"Delete All Chats": "",
"Delete chat": "Borrar chat", "Delete chat": "Borrar chat",
"Delete Chat": "Borrar Chat", "Delete Chat": "Borrar Chat",
"Delete Chats": "Borrar Chats",
"delete this link": "Borrar este enlace", "delete this link": "Borrar este enlace",
"Delete User": "Borrar Usuario", "Delete User": "Borrar Usuario",
"Deleted {{deleteModelTag}}": "Se borró {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "Se borró {{deleteModelTag}}",
"Deleted {{tagName}}": "Se borró {{tagName}}", "Deleted {{name}}": "",
"Description": "Descripción", "Description": "Descripción",
"Didn't fully follow instructions": "No siguió las instrucciones", "Didn't fully follow instructions": "No siguió las instrucciones",
"Disabled": "Desactivado", "Disabled": "Desactivado",
"Discover a modelfile": "Descubre un modelfile", "Discover a model": "",
"Discover a prompt": "Descubre un Prompt", "Discover a prompt": "Descubre un Prompt",
"Discover, download, and explore custom prompts": "Descubre, descarga, y explora Prompts personalizados", "Discover, download, and explore custom prompts": "Descubre, descarga, y explora Prompts personalizados",
"Discover, download, and explore model presets": "Descubre, descarga y explora ajustes preestablecidos de modelos", "Discover, download, and explore model presets": "Descubre, descarga y explora ajustes preestablecidos de modelos",
@ -176,11 +176,6 @@
"Enter Chunk Size": "Ingrese el tamaño del fragmento", "Enter Chunk Size": "Ingrese el tamaño del fragmento",
"Enter Image Size (e.g. 512x512)": "Ingrese el tamaño de la imagen (p.ej. 512x512)", "Enter Image Size (e.g. 512x512)": "Ingrese el tamaño de la imagen (p.ej. 512x512)",
"Enter language codes": "Ingrese códigos de idioma", "Enter language codes": "Ingrese códigos de idioma",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Ingrese la URL base de la API LiteLLM (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Ingrese la clave API LiteLLM (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Ingrese el RPM de la API LiteLLM (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Ingrese el modelo LiteLLM (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Ingrese tokens máximos (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Ingrese la etiqueta del modelo (p.ej. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Ingrese la etiqueta del modelo (p.ej. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Ingrese el número de pasos (p.ej., 50)", "Enter Number of Steps (e.g. 50)": "Ingrese el número de pasos (p.ej., 50)",
"Enter Score": "Ingrese la puntuación", "Enter Score": "Ingrese la puntuación",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "Exportar todos los chats (Todos los usuarios)", "Export All Chats (All Users)": "Exportar todos los chats (Todos los usuarios)",
"Export Chats": "Exportar Chats", "Export Chats": "Exportar Chats",
"Export Documents Mapping": "Exportar el mapeo de documentos", "Export Documents Mapping": "Exportar el mapeo de documentos",
"Export Modelfiles": "Exportar Modelfiles", "Export Models": "",
"Export Prompts": "Exportar Prompts", "Export Prompts": "Exportar Prompts",
"Failed to create API Key.": "No se pudo crear la clave API.", "Failed to create API Key.": "No se pudo crear la clave API.",
"Failed to read clipboard contents": "No se pudo leer el contenido del portapapeles", "Failed to read clipboard contents": "No se pudo leer el contenido del portapapeles",
@ -209,7 +204,7 @@
"Focus chat input": "Enfoca la entrada del chat", "Focus chat input": "Enfoca la entrada del chat",
"Followed instructions perfectly": "Siguió las instrucciones perfectamente", "Followed instructions perfectly": "Siguió las instrucciones perfectamente",
"Format your variables using square brackets like this:": "Formatea tus variables usando corchetes de la siguiente manera:", "Format your variables using square brackets like this:": "Formatea tus variables usando corchetes de la siguiente manera:",
"From (Base Model)": "Desde (Modelo Base)", "Frequencey Penalty": "",
"Full Screen Mode": "Modo de Pantalla Completa", "Full Screen Mode": "Modo de Pantalla Completa",
"General": "General", "General": "General",
"General Settings": "Opciones Generales", "General Settings": "Opciones Generales",
@ -220,7 +215,6 @@
"Hello, {{name}}": "Hola, {{name}}", "Hello, {{name}}": "Hola, {{name}}",
"Help": "Ayuda", "Help": "Ayuda",
"Hide": "Esconder", "Hide": "Esconder",
"Hide Additional Params": "Esconde los Parámetros Adicionales",
"How can I help you today?": "¿Cómo puedo ayudarte hoy?", "How can I help you today?": "¿Cómo puedo ayudarte hoy?",
"Hybrid Search": "Búsqueda Híbrida", "Hybrid Search": "Búsqueda Híbrida",
"Image Generation (Experimental)": "Generación de imágenes (experimental)", "Image Generation (Experimental)": "Generación de imágenes (experimental)",
@ -229,7 +223,7 @@
"Images": "Imágenes", "Images": "Imágenes",
"Import Chats": "Importar chats", "Import Chats": "Importar chats",
"Import Documents Mapping": "Importar Mapeo de Documentos", "Import Documents Mapping": "Importar Mapeo de Documentos",
"Import Modelfiles": "Importar Modelfiles", "Import Models": "",
"Import Prompts": "Importar Prompts", "Import Prompts": "Importar Prompts",
"Include `--api` flag when running stable-diffusion-webui": "Incluir el indicador `--api` al ejecutar stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Incluir el indicador `--api` al ejecutar stable-diffusion-webui",
"Input commands": "Ingresar comandos", "Input commands": "Ingresar comandos",
@ -238,6 +232,7 @@
"January": "Enero", "January": "Enero",
"join our Discord for help.": "Únase a nuestro Discord para obtener ayuda.", "join our Discord for help.": "Únase a nuestro Discord para obtener ayuda.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "Julio", "July": "Julio",
"June": "Junio", "June": "Junio",
"JWT Expiration": "Expiración del JWT", "JWT Expiration": "Expiración del JWT",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "Hecho por la comunidad de OpenWebUI", "Made by OpenWebUI Community": "Hecho por la comunidad de OpenWebUI",
"Make sure to enclose them with": "Asegúrese de adjuntarlos con", "Make sure to enclose them with": "Asegúrese de adjuntarlos con",
"Manage LiteLLM Models": "Administrar Modelos LiteLLM",
"Manage Models": "Administrar Modelos", "Manage Models": "Administrar Modelos",
"Manage Ollama Models": "Administrar Modelos Ollama", "Manage Ollama Models": "Administrar Modelos Ollama",
"March": "Marzo", "March": "Marzo",
"Max Tokens": "Máximo de Tokens", "Max Tokens (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.", "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.",
"May": "Mayo", "May": "Mayo",
"Memories accessible by LLMs will be shown here.": "Las memorias accesibles por los LLMs se mostrarán aquí.", "Memories accessible by LLMs will be shown here.": "Las memorias accesibles por los LLMs se mostrarán aquí.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "El modelo '{{modelName}}' se ha descargado correctamente.", "Model '{{modelName}}' has been successfully downloaded.": "El modelo '{{modelName}}' se ha descargado correctamente.",
"Model '{{modelTag}}' is already in queue for downloading.": "El modelo '{{modelTag}}' ya está en cola para descargar.", "Model '{{modelTag}}' is already in queue for downloading.": "El modelo '{{modelTag}}' ya está en cola para descargar.",
"Model {{modelId}} not found": "El modelo {{modelId}} no fue encontrado", "Model {{modelId}} not found": "El modelo {{modelId}} no fue encontrado",
"Model {{modelName}} already exists.": "El modelo {{modelName}} ya existe.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Se detectó la ruta del sistema de archivos del modelo. Se requiere el nombre corto del modelo para la actualización, no se puede continuar.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Se detectó la ruta del sistema de archivos del modelo. Se requiere el nombre corto del modelo para la actualización, no se puede continuar.",
"Model Name": "Nombre del modelo", "Model ID": "",
"Model not selected": "Modelo no seleccionado", "Model not selected": "Modelo no seleccionado",
"Model Tag Name": "Nombre de la etiqueta del modelo", "Model Params": "",
"Model Whitelisting": "Listado de Modelos habilitados", "Model Whitelisting": "Listado de Modelos habilitados",
"Model(s) Whitelisted": "Modelo(s) habilitados", "Model(s) Whitelisted": "Modelo(s) habilitados",
"Modelfile": "Modelfile",
"Modelfile Advanced Settings": "Opciones avanzadas del Modelfile",
"Modelfile Content": "Contenido del Modelfile", "Modelfile Content": "Contenido del Modelfile",
"Modelfiles": "Modelfiles",
"Models": "Modelos", "Models": "Modelos",
"More": "Más", "More": "Más",
"Name": "Nombre", "Name": "Nombre",
"Name Tag": "Nombre de etiqueta", "Name Tag": "Nombre de etiqueta",
"Name your modelfile": "Nombra tu modelfile", "Name your model": "",
"New Chat": "Nuevo Chat", "New Chat": "Nuevo Chat",
"New Password": "Nueva Contraseña", "New Password": "Nueva Contraseña",
"No results found": "No se han encontrado resultados", "No results found": "No se han encontrado resultados",
"No source available": "No hay fuente disponible", "No source available": "No hay fuente disponible",
"Not factually correct": "No es correcto en todos los aspectos", "Not factually correct": "No es correcto en todos los aspectos",
"Not sure what to add?": "¿No sabes qué añadir?",
"Not sure what to write? Switch to": "¿No sabes qué escribir? Cambia a",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si estableces una puntuación mínima, la búsqueda sólo devolverá documentos con una puntuación mayor o igual a la puntuación mínima.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si estableces una puntuación mínima, la búsqueda sólo devolverá documentos con una puntuación mayor o igual a la puntuación mínima.",
"Notifications": "Notificaciones", "Notifications": "Notificaciones",
"November": "Noviembre", "November": "Noviembre",
@ -322,7 +311,6 @@
"or": "o", "or": "o",
"Other": "Otro", "Other": "Otro",
"Overview": "Resumen", "Overview": "Resumen",
"Parameters": "Parámetros",
"Password": "Contraseña", "Password": "Contraseña",
"PDF document (.pdf)": "PDF document (.pdf)", "PDF document (.pdf)": "PDF document (.pdf)",
"PDF Extract Images (OCR)": "Extraer imágenes de PDF (OCR)", "PDF Extract Images (OCR)": "Extraer imágenes de PDF (OCR)",
@ -342,10 +330,8 @@
"Prompts": "Prompts", "Prompts": "Prompts",
"Pull \"{{searchValue}}\" from Ollama.com": "Extraer \"{{searchValue}}\" de Ollama.com", "Pull \"{{searchValue}}\" from Ollama.com": "Extraer \"{{searchValue}}\" de Ollama.com",
"Pull a model from Ollama.com": "Obtener un modelo de Ollama.com", "Pull a model from Ollama.com": "Obtener un modelo de Ollama.com",
"Pull Progress": "Progreso de extracción",
"Query Params": "Parámetros de consulta", "Query Params": "Parámetros de consulta",
"RAG Template": "Plantilla de RAG", "RAG Template": "Plantilla de RAG",
"Raw Format": "Formato sin procesar",
"Read Aloud": "Leer al oído", "Read Aloud": "Leer al oído",
"Record voice": "Grabar voz", "Record voice": "Grabar voz",
"Redirecting you to OpenWebUI Community": "Redireccionándote a la comunidad OpenWebUI", "Redirecting you to OpenWebUI Community": "Redireccionándote a la comunidad OpenWebUI",
@ -356,7 +342,6 @@
"Remove Model": "Eliminar modelo", "Remove Model": "Eliminar modelo",
"Rename": "Renombrar", "Rename": "Renombrar",
"Repeat Last N": "Repetir las últimas N", "Repeat Last N": "Repetir las últimas N",
"Repeat Penalty": "Penalidad de repetición",
"Request Mode": "Modo de petición", "Request Mode": "Modo de petición",
"Reranking Model": "Modelo de reranking", "Reranking Model": "Modelo de reranking",
"Reranking model disabled": "Modelo de reranking deshabilitado", "Reranking model disabled": "Modelo de reranking deshabilitado",
@ -377,14 +362,17 @@
"Search": "Buscar", "Search": "Buscar",
"Search a model": "Buscar un modelo", "Search a model": "Buscar un modelo",
"Search Documents": "Buscar Documentos", "Search Documents": "Buscar Documentos",
"Search Models": "",
"Search Prompts": "Buscar Prompts", "Search Prompts": "Buscar Prompts",
"See readme.md for instructions": "Vea el readme.md para instrucciones", "See readme.md for instructions": "Vea el readme.md para instrucciones",
"See what's new": "Ver las novedades", "See what's new": "Ver las novedades",
"Seed": "Seed", "Seed": "Seed",
"Select a base model": "",
"Select a mode": "Selecciona un modo", "Select a mode": "Selecciona un modo",
"Select a model": "Selecciona un modelo", "Select a model": "Selecciona un modelo",
"Select an Ollama instance": "Seleccione una instancia de Ollama", "Select an Ollama instance": "Seleccione una instancia de Ollama",
"Select model": "Selecciona un modelo", "Select model": "Selecciona un modelo",
"Selected model(s) do not support image inputs": "",
"Send": "Enviar", "Send": "Enviar",
"Send a Message": "Enviar un Mensaje", "Send a Message": "Enviar un Mensaje",
"Send message": "Enviar Mensaje", "Send message": "Enviar Mensaje",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "Compartir con la comunidad OpenWebUI", "Share to OpenWebUI Community": "Compartir con la comunidad OpenWebUI",
"short-summary": "resumen-corto", "short-summary": "resumen-corto",
"Show": "Mostrar", "Show": "Mostrar",
"Show Additional Params": "Mostrar parámetros adicionales",
"Show shortcuts": "Mostrar atajos", "Show shortcuts": "Mostrar atajos",
"Showcased creativity": "Mostrar creatividad", "Showcased creativity": "Mostrar creatividad",
"sidebar": "barra lateral", "sidebar": "barra lateral",
@ -425,7 +412,6 @@
"Success": "Éxito", "Success": "Éxito",
"Successfully updated.": "Actualizado exitosamente.", "Successfully updated.": "Actualizado exitosamente.",
"Suggested": "Sugerido", "Suggested": "Sugerido",
"Sync All": "Sincronizar todo",
"System": "Sistema", "System": "Sistema",
"System Prompt": "Prompt del sistema", "System Prompt": "Prompt del sistema",
"Tags": "Etiquetas", "Tags": "Etiquetas",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Escribe un resumen en 50 palabras que resuma [tema o palabra clave].", "Write a summary in 50 words that summarizes [topic or keyword].": "Escribe un resumen en 50 palabras que resuma [tema o palabra clave].",
"Yesterday": "Ayer", "Yesterday": "Ayer",
"You": "Usted", "You": "Usted",
"You cannot clone a base model": "",
"You have no archived conversations.": "No tiene conversaciones archivadas.", "You have no archived conversations.": "No tiene conversaciones archivadas.",
"You have shared this chat": "Usted ha compartido esta conversación", "You have shared this chat": "Usted ha compartido esta conversación",
"You're a helpful assistant.": "Usted es un asistente útil.", "You're a helpful assistant.": "Usted es un asistente útil.",

View File

@ -3,6 +3,8 @@
"(Beta)": "(بتا)", "(Beta)": "(بتا)",
"(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)",
"(latest)": "(آخرین)", "(latest)": "(آخرین)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} در حال فکر کردن است...", "{{modelName}} is thinking...": "{{modelName}} در حال فکر کردن است...",
"{{user}}'s Chats": "{{user}} چت ها", "{{user}}'s Chats": "{{user}} چت ها",
"{{webUIName}} Backend Required": "بکند {{webUIName}} نیاز است.", "{{webUIName}} Backend Required": "بکند {{webUIName}} نیاز است.",
@ -11,9 +13,8 @@
"Account": "حساب کاربری", "Account": "حساب کاربری",
"Accurate information": "اطلاعات دقیق", "Accurate information": "اطلاعات دقیق",
"Add": "اضافه کردن", "Add": "اضافه کردن",
"Add a model": "اضافه کردن یک مدل", "Add a model id": "",
"Add a model tag name": "اضافه کردن یک نام تگ برای مدل", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "توضیح کوتاهی در مورد کاری که این فایل\u200cمدل انجام می دهد اضافه کنید",
"Add a short title for this prompt": "یک عنوان کوتاه برای این درخواست اضافه کنید", "Add a short title for this prompt": "یک عنوان کوتاه برای این درخواست اضافه کنید",
"Add a tag": "اضافه کردن یک تگ", "Add a tag": "اضافه کردن یک تگ",
"Add custom prompt": "اضافه کردن یک درخواست سفارشی", "Add custom prompt": "اضافه کردن یک درخواست سفارشی",
@ -29,6 +30,7 @@
"Admin Panel": "پنل مدیریت", "Admin Panel": "پنل مدیریت",
"Admin Settings": "تنظیمات مدیریت", "Admin Settings": "تنظیمات مدیریت",
"Advanced Parameters": "پارامترهای پیشرفته", "Advanced Parameters": "پارامترهای پیشرفته",
"Advanced Params": "",
"all": "همه", "all": "همه",
"All Documents": "تمام سند ها", "All Documents": "تمام سند ها",
"All Users": "همه کاربران", "All Users": "همه کاربران",
@ -43,7 +45,6 @@
"API Key": "API Key", "API Key": "API Key",
"API Key created.": "API Key created.", "API Key created.": "API Key created.",
"API keys": "API keys", "API keys": "API keys",
"API RPM": "API RPM",
"April": "ژوئن", "April": "ژوئن",
"Archive": "آرشیو", "Archive": "آرشیو",
"Archived Chats": "آرشیو تاریخچه چت", "Archived Chats": "آرشیو تاریخچه چت",
@ -60,12 +61,12 @@
"available!": "در دسترس!", "available!": "در دسترس!",
"Back": "بازگشت", "Back": "بازگشت",
"Bad Response": "پاسخ خوب نیست", "Bad Response": "پاسخ خوب نیست",
"Base Model (From)": "",
"before": "قبل", "before": "قبل",
"Being lazy": "حالت سازنده", "Being lazy": "حالت سازنده",
"Builder Mode": "حالت سازنده",
"Bypass SSL verification for Websites": "عبور از تأیید SSL برای وب سایت ها", "Bypass SSL verification for Websites": "عبور از تأیید SSL برای وب سایت ها",
"Cancel": "لغو", "Cancel": "لغو",
"Categories": "دسته\u200cبندی\u200cها", "Capabilities": "",
"Change Password": "تغییر رمز عبور", "Change Password": "تغییر رمز عبور",
"Chat": "گپ", "Chat": "گپ",
"Chat Bubble UI": "UI\u200cی\u200c گفتگو\u200c", "Chat Bubble UI": "UI\u200cی\u200c گفتگو\u200c",
@ -83,7 +84,6 @@
"Citation": "استناد", "Citation": "استناد",
"Click here for help.": "برای کمک اینجا را کلیک کنید.", "Click here for help.": "برای کمک اینجا را کلیک کنید.",
"Click here to": "برای کمک اینجا را کلیک کنید.", "Click here to": "برای کمک اینجا را کلیک کنید.",
"Click here to check other modelfiles.": "برای بررسی سایر فایل\u200cهای مدل اینجا را کلیک کنید.",
"Click here to select": "برای انتخاب اینجا کلیک کنید", "Click here to select": "برای انتخاب اینجا کلیک کنید",
"Click here to select a csv file.": "برای انتخاب یک فایل csv اینجا را کلیک کنید.", "Click here to select a csv file.": "برای انتخاب یک فایل csv اینجا را کلیک کنید.",
"Click here to select documents.": "برای انتخاب اسناد اینجا را کلیک کنید.", "Click here to select documents.": "برای انتخاب اسناد اینجا را کلیک کنید.",
@ -108,7 +108,7 @@
"Copy Link": "کپی لینک", "Copy Link": "کپی لینک",
"Copying to clipboard was successful!": "کپی کردن در کلیپ بورد با موفقیت انجام شد!", "Copying to clipboard was successful!": "کپی کردن در کلیپ بورد با موفقیت انجام شد!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "یک عبارت مختصر و ۳ تا ۵ کلمه ای را به عنوان سرفصل برای پرس و جو زیر ایجاد کنید، به شدت محدودیت ۳-۵ کلمه را رعایت کنید و از استفاده از کلمه 'عنوان' خودداری کنید:", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "یک عبارت مختصر و ۳ تا ۵ کلمه ای را به عنوان سرفصل برای پرس و جو زیر ایجاد کنید، به شدت محدودیت ۳-۵ کلمه را رعایت کنید و از استفاده از کلمه 'عنوان' خودداری کنید:",
"Create a modelfile": "ایجاد یک فایل مدل", "Create a model": "",
"Create Account": "ساخت حساب کاربری", "Create Account": "ساخت حساب کاربری",
"Create new key": "ساخت کلید جدید", "Create new key": "ساخت کلید جدید",
"Create new secret key": "ساخت کلید gehez جدید", "Create new secret key": "ساخت کلید gehez جدید",
@ -117,7 +117,7 @@
"Current Model": "مدل فعلی", "Current Model": "مدل فعلی",
"Current Password": "رمز عبور فعلی", "Current Password": "رمز عبور فعلی",
"Custom": "دلخواه", "Custom": "دلخواه",
"Customize Ollama models for a specific purpose": "مدل های اولاما را برای یک هدف خاص سفارشی کنید", "Customize models for a specific purpose": "",
"Dark": "تیره", "Dark": "تیره",
"Dashboard": "داشبورد", "Dashboard": "داشبورد",
"Database": "پایگاه داده", "Database": "پایگاه داده",
@ -132,17 +132,17 @@
"delete": "حذف", "delete": "حذف",
"Delete": "حذف", "Delete": "حذف",
"Delete a model": "حذف یک مدل", "Delete a model": "حذف یک مدل",
"Delete All Chats": "",
"Delete chat": "حذف گپ", "Delete chat": "حذف گپ",
"Delete Chat": "حذف گپ", "Delete Chat": "حذف گپ",
"Delete Chats": "حذف گپ\u200cها",
"delete this link": "حذف این لینک", "delete this link": "حذف این لینک",
"Delete User": "حذف کاربر", "Delete User": "حذف کاربر",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} پاک شد", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} پاک شد",
"Deleted {{tagName}}": "{{tagName}} پاک شد", "Deleted {{name}}": "",
"Description": "توضیحات", "Description": "توضیحات",
"Didn't fully follow instructions": "نمی تواند دستورالعمل را کامل پیگیری کند", "Didn't fully follow instructions": "نمی تواند دستورالعمل را کامل پیگیری کند",
"Disabled": "غیرفعال", "Disabled": "غیرفعال",
"Discover a modelfile": "فایل مدل را کشف کنید", "Discover a model": "",
"Discover a prompt": "یک اعلان را کشف کنید", "Discover a prompt": "یک اعلان را کشف کنید",
"Discover, download, and explore custom prompts": "پرامپت\u200cهای سفارشی را کشف، دانلود و کاوش کنید", "Discover, download, and explore custom prompts": "پرامپت\u200cهای سفارشی را کشف، دانلود و کاوش کنید",
"Discover, download, and explore model presets": "پیش تنظیمات مدل را کشف، دانلود و کاوش کنید", "Discover, download, and explore model presets": "پیش تنظیمات مدل را کشف، دانلود و کاوش کنید",
@ -176,11 +176,6 @@
"Enter Chunk Size": "مقدار Chunk Size را وارد کنید", "Enter Chunk Size": "مقدار Chunk Size را وارد کنید",
"Enter Image Size (e.g. 512x512)": "اندازه تصویر را وارد کنید (مثال: 512x512)", "Enter Image Size (e.g. 512x512)": "اندازه تصویر را وارد کنید (مثال: 512x512)",
"Enter language codes": "کد زبان را وارد کنید", "Enter language codes": "کد زبان را وارد کنید",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "URL پایه مربوط به LiteLLM API را وارد کنید (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "کلید API مربوط به LiteLLM را وارد کنید (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "RPM API مربوط به LiteLLM را وارد کنید (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "مدل مربوط به LiteLLM را وارد کنید (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "حداکثر تعداد توکن را وارد کنید (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "تگ مدل را وارد کنید (مثلا {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "تگ مدل را وارد کنید (مثلا {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "تعداد گام ها را وارد کنید (مثال: 50)", "Enter Number of Steps (e.g. 50)": "تعداد گام ها را وارد کنید (مثال: 50)",
"Enter Score": "امتیاز را وارد کنید", "Enter Score": "امتیاز را وارد کنید",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "اکسپورت از همه گپ\u200cها(همه کاربران)", "Export All Chats (All Users)": "اکسپورت از همه گپ\u200cها(همه کاربران)",
"Export Chats": "اکسپورت از گپ\u200cها", "Export Chats": "اکسپورت از گپ\u200cها",
"Export Documents Mapping": "اکسپورت از نگاشت اسناد", "Export Documents Mapping": "اکسپورت از نگاشت اسناد",
"Export Modelfiles": "اکسپورت از فایل\u200cهای مدل", "Export Models": "",
"Export Prompts": "اکسپورت از پرامپت\u200cها", "Export Prompts": "اکسپورت از پرامپت\u200cها",
"Failed to create API Key.": "ایجاد کلید API با خطا مواجه شد.", "Failed to create API Key.": "ایجاد کلید API با خطا مواجه شد.",
"Failed to read clipboard contents": "خواندن محتوای کلیپ بورد ناموفق بود", "Failed to read clipboard contents": "خواندن محتوای کلیپ بورد ناموفق بود",
@ -209,7 +204,7 @@
"Focus chat input": "فوکوس کردن ورودی گپ", "Focus chat input": "فوکوس کردن ورودی گپ",
"Followed instructions perfectly": "دستورالعمل ها را کاملا دنبال کرد", "Followed instructions perfectly": "دستورالعمل ها را کاملا دنبال کرد",
"Format your variables using square brackets like this:": "متغیرهای خود را با استفاده از براکت مربع به شکل زیر قالب بندی کنید:", "Format your variables using square brackets like this:": "متغیرهای خود را با استفاده از براکت مربع به شکل زیر قالب بندی کنید:",
"From (Base Model)": "از (مدل پایه)", "Frequencey Penalty": "",
"Full Screen Mode": "حالت تمام صفحه", "Full Screen Mode": "حالت تمام صفحه",
"General": "عمومی", "General": "عمومی",
"General Settings": "تنظیمات عمومی", "General Settings": "تنظیمات عمومی",
@ -220,7 +215,6 @@
"Hello, {{name}}": "سلام، {{name}}", "Hello, {{name}}": "سلام، {{name}}",
"Help": "کمک", "Help": "کمک",
"Hide": "پنهان", "Hide": "پنهان",
"Hide Additional Params": "پنهان کردن پارامترهای اضافه",
"How can I help you today?": "امروز چطور می توانم کمک تان کنم؟", "How can I help you today?": "امروز چطور می توانم کمک تان کنم؟",
"Hybrid Search": "جستجوی همزمان", "Hybrid Search": "جستجوی همزمان",
"Image Generation (Experimental)": "تولید تصویر (آزمایشی)", "Image Generation (Experimental)": "تولید تصویر (آزمایشی)",
@ -229,7 +223,7 @@
"Images": "تصاویر", "Images": "تصاویر",
"Import Chats": "ایمپورت گپ\u200cها", "Import Chats": "ایمپورت گپ\u200cها",
"Import Documents Mapping": "ایمپورت نگاشت اسناد", "Import Documents Mapping": "ایمپورت نگاشت اسناد",
"Import Modelfiles": "ایمپورت فایل\u200cهای مدل", "Import Models": "",
"Import Prompts": "ایمپورت پرامپت\u200cها", "Import Prompts": "ایمپورت پرامپت\u200cها",
"Include `--api` flag when running stable-diffusion-webui": "فلگ `--api` را هنکام اجرای stable-diffusion-webui استفاده کنید.", "Include `--api` flag when running stable-diffusion-webui": "فلگ `--api` را هنکام اجرای stable-diffusion-webui استفاده کنید.",
"Input commands": "ورودی دستورات", "Input commands": "ورودی دستورات",
@ -238,6 +232,7 @@
"January": "ژانویه", "January": "ژانویه",
"join our Discord for help.": "برای کمک به دیسکورد ما بپیوندید.", "join our Discord for help.": "برای کمک به دیسکورد ما بپیوندید.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "ژوئن", "July": "ژوئن",
"June": "جولای", "June": "جولای",
"JWT Expiration": "JWT انقضای", "JWT Expiration": "JWT انقضای",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "ساخته شده توسط OpenWebUI Community", "Made by OpenWebUI Community": "ساخته شده توسط OpenWebUI Community",
"Make sure to enclose them with": "مطمئن شوید که آنها را با این محصور کنید:", "Make sure to enclose them with": "مطمئن شوید که آنها را با این محصور کنید:",
"Manage LiteLLM Models": "Manage LiteLLM Models",
"Manage Models": "مدیریت مدل\u200cها", "Manage Models": "مدیریت مدل\u200cها",
"Manage Ollama Models": "مدیریت مدل\u200cهای اولاما", "Manage Ollama Models": "مدیریت مدل\u200cهای اولاما",
"March": "مارچ", "March": "مارچ",
"Max Tokens": "حداکثر توکن", "Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "حداکثر 3 مدل را می توان به طور همزمان دانلود کرد. لطفاً بعداً دوباره امتحان کنید.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "حداکثر 3 مدل را می توان به طور همزمان دانلود کرد. لطفاً بعداً دوباره امتحان کنید.",
"May": "ماهی", "May": "ماهی",
"Memories accessible by LLMs will be shown here.": "حافظه های دسترسی به LLMs در اینجا نمایش داده می شوند.", "Memories accessible by LLMs will be shown here.": "حافظه های دسترسی به LLMs در اینجا نمایش داده می شوند.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "مدل '{{modelName}}' با موفقیت دانلود شد.", "Model '{{modelName}}' has been successfully downloaded.": "مدل '{{modelName}}' با موفقیت دانلود شد.",
"Model '{{modelTag}}' is already in queue for downloading.": "مدل '{{modelTag}}' در حال حاضر در صف برای دانلود است.", "Model '{{modelTag}}' is already in queue for downloading.": "مدل '{{modelTag}}' در حال حاضر در صف برای دانلود است.",
"Model {{modelId}} not found": "مدل {{modelId}} یافت نشد", "Model {{modelId}} not found": "مدل {{modelId}} یافت نشد",
"Model {{modelName}} already exists.": "مدل {{modelName}} در حال حاضر وجود دارد.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "مسیر فایل سیستم مدل یافت شد. برای بروزرسانی نیاز است نام کوتاه مدل وجود داشته باشد.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "مسیر فایل سیستم مدل یافت شد. برای بروزرسانی نیاز است نام کوتاه مدل وجود داشته باشد.",
"Model Name": "نام مدل", "Model ID": "",
"Model not selected": "مدل انتخاب نشده", "Model not selected": "مدل انتخاب نشده",
"Model Tag Name": "نام تگ مدل", "Model Params": "",
"Model Whitelisting": "لیست سفید مدل", "Model Whitelisting": "لیست سفید مدل",
"Model(s) Whitelisted": "مدل در لیست سفید ثبت شد", "Model(s) Whitelisted": "مدل در لیست سفید ثبت شد",
"Modelfile": "فایل مدل",
"Modelfile Advanced Settings": "تنظیمات پیشرفته فایل\u200cمدل",
"Modelfile Content": "محتویات فایل مدل", "Modelfile Content": "محتویات فایل مدل",
"Modelfiles": "فایل\u200cهای مدل",
"Models": "مدل\u200cها", "Models": "مدل\u200cها",
"More": "بیشتر", "More": "بیشتر",
"Name": "نام", "Name": "نام",
"Name Tag": "نام تگ", "Name Tag": "نام تگ",
"Name your modelfile": "فایل مدل را نام\u200cگذاری کنید", "Name your model": "",
"New Chat": "گپ جدید", "New Chat": "گپ جدید",
"New Password": "رمز عبور جدید", "New Password": "رمز عبور جدید",
"No results found": "نتیجه\u200cای یافت نشد", "No results found": "نتیجه\u200cای یافت نشد",
"No source available": "منبعی در دسترس نیست", "No source available": "منبعی در دسترس نیست",
"Not factually correct": "اشتباهی فکری نیست", "Not factually correct": "اشتباهی فکری نیست",
"Not sure what to add?": "مطمئن نیستید چه چیزی را اضافه کنید؟",
"Not sure what to write? Switch to": "مطمئن نیستید چه بنویسید؟ تغییر به",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "",
"Notifications": "اعلان", "Notifications": "اعلان",
"November": "نوامبر", "November": "نوامبر",
@ -322,7 +311,6 @@
"or": "روشن", "or": "روشن",
"Other": "دیگر", "Other": "دیگر",
"Overview": "نمای کلی", "Overview": "نمای کلی",
"Parameters": "پارامترها",
"Password": "رمز عبور", "Password": "رمز عبور",
"PDF document (.pdf)": "PDF سند (.pdf)", "PDF document (.pdf)": "PDF سند (.pdf)",
"PDF Extract Images (OCR)": "استخراج تصاویر از PDF (OCR)", "PDF Extract Images (OCR)": "استخراج تصاویر از PDF (OCR)",
@ -342,10 +330,8 @@
"Prompts": "پرامپت\u200cها", "Prompts": "پرامپت\u200cها",
"Pull \"{{searchValue}}\" from Ollama.com": "بازگرداندن \"{{searchValue}}\" از Ollama.com", "Pull \"{{searchValue}}\" from Ollama.com": "بازگرداندن \"{{searchValue}}\" از Ollama.com",
"Pull a model from Ollama.com": "دریافت یک مدل از Ollama.com", "Pull a model from Ollama.com": "دریافت یک مدل از Ollama.com",
"Pull Progress": "پیشرفت دریافت",
"Query Params": "پارامترهای پرس و جو", "Query Params": "پارامترهای پرس و جو",
"RAG Template": "RAG الگوی", "RAG Template": "RAG الگوی",
"Raw Format": "فرمت خام",
"Read Aloud": "خواندن به صورت صوتی", "Read Aloud": "خواندن به صورت صوتی",
"Record voice": "ضبط صدا", "Record voice": "ضبط صدا",
"Redirecting you to OpenWebUI Community": "در حال هدایت به OpenWebUI Community", "Redirecting you to OpenWebUI Community": "در حال هدایت به OpenWebUI Community",
@ -356,7 +342,6 @@
"Remove Model": "حذف مدل", "Remove Model": "حذف مدل",
"Rename": "تغییر نام", "Rename": "تغییر نام",
"Repeat Last N": "Repeat Last N", "Repeat Last N": "Repeat Last N",
"Repeat Penalty": "Repeat Penalty",
"Request Mode": "حالت درخواست", "Request Mode": "حالت درخواست",
"Reranking Model": "مدل ری\u200cشناسی مجدد غیرفعال است", "Reranking Model": "مدل ری\u200cشناسی مجدد غیرفعال است",
"Reranking model disabled": "مدل ری\u200cشناسی مجدد غیرفعال است", "Reranking model disabled": "مدل ری\u200cشناسی مجدد غیرفعال است",
@ -377,14 +362,17 @@
"Search": "جستجو", "Search": "جستجو",
"Search a model": "جستجوی مدل", "Search a model": "جستجوی مدل",
"Search Documents": "جستجوی اسناد", "Search Documents": "جستجوی اسناد",
"Search Models": "",
"Search Prompts": "جستجوی پرامپت\u200cها", "Search Prompts": "جستجوی پرامپت\u200cها",
"See readme.md for instructions": "برای مشاهده دستورالعمل\u200cها به readme.md مراجعه کنید", "See readme.md for instructions": "برای مشاهده دستورالعمل\u200cها به readme.md مراجعه کنید",
"See what's new": "ببینید موارد جدید چه بوده", "See what's new": "ببینید موارد جدید چه بوده",
"Seed": "Seed", "Seed": "Seed",
"Select a base model": "",
"Select a mode": "یک حالت انتخاب کنید", "Select a mode": "یک حالت انتخاب کنید",
"Select a model": "انتخاب یک مدل", "Select a model": "انتخاب یک مدل",
"Select an Ollama instance": "انتخاب یک نمونه از اولاما", "Select an Ollama instance": "انتخاب یک نمونه از اولاما",
"Select model": "انتخاب یک مدل", "Select model": "انتخاب یک مدل",
"Selected model(s) do not support image inputs": "",
"Send": "ارسال", "Send": "ارسال",
"Send a Message": "ارسال یک پیام", "Send a Message": "ارسال یک پیام",
"Send message": "ارسال پیام", "Send message": "ارسال پیام",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "اشتراک گذاری با OpenWebUI Community", "Share to OpenWebUI Community": "اشتراک گذاری با OpenWebUI Community",
"short-summary": "خلاصه کوتاه", "short-summary": "خلاصه کوتاه",
"Show": "نمایش", "Show": "نمایش",
"Show Additional Params": "نمایش پارامترهای اضافه",
"Show shortcuts": "نمایش میانبرها", "Show shortcuts": "نمایش میانبرها",
"Showcased creativity": "ایده\u200cآفرینی", "Showcased creativity": "ایده\u200cآفرینی",
"sidebar": "نوار کناری", "sidebar": "نوار کناری",
@ -425,7 +412,6 @@
"Success": "موفقیت", "Success": "موفقیت",
"Successfully updated.": "با موفقیت به روز شد", "Successfully updated.": "با موفقیت به روز شد",
"Suggested": "پیشنهادی", "Suggested": "پیشنهادی",
"Sync All": "همگام سازی همه",
"System": "سیستم", "System": "سیستم",
"System Prompt": "پرامپت سیستم", "System Prompt": "پرامپت سیستم",
"Tags": "تگ\u200cها", "Tags": "تگ\u200cها",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "خلاصه ای در 50 کلمه بنویسید که [موضوع یا کلمه کلیدی] را خلاصه کند.", "Write a summary in 50 words that summarizes [topic or keyword].": "خلاصه ای در 50 کلمه بنویسید که [موضوع یا کلمه کلیدی] را خلاصه کند.",
"Yesterday": "دیروز", "Yesterday": "دیروز",
"You": "شما", "You": "شما",
"You cannot clone a base model": "",
"You have no archived conversations.": "شما هیچ گفتگوی ذخیره شده ندارید.", "You have no archived conversations.": "شما هیچ گفتگوی ذخیره شده ندارید.",
"You have shared this chat": "شما این گفتگو را به اشتراک گذاشته اید", "You have shared this chat": "شما این گفتگو را به اشتراک گذاشته اید",
"You're a helpful assistant.": "تو یک دستیار سودمند هستی.", "You're a helpful assistant.": "تو یک دستیار سودمند هستی.",

View File

@ -3,6 +3,8 @@
"(Beta)": "(Beta)", "(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(esim. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(esim. `sh webui.sh --api`)",
"(latest)": "(uusin)", "(latest)": "(uusin)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} miettii...", "{{modelName}} is thinking...": "{{modelName}} miettii...",
"{{user}}'s Chats": "{{user}}:n keskustelut", "{{user}}'s Chats": "{{user}}:n keskustelut",
"{{webUIName}} Backend Required": "{{webUIName}} backend vaaditaan", "{{webUIName}} Backend Required": "{{webUIName}} backend vaaditaan",
@ -11,9 +13,8 @@
"Account": "Tili", "Account": "Tili",
"Accurate information": "Tarkkaa tietoa", "Accurate information": "Tarkkaa tietoa",
"Add": "Lisää", "Add": "Lisää",
"Add a model": "Lisää malli", "Add a model id": "",
"Add a model tag name": "Lisää mallitagi", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "Lisää lyhyt kuvaus siitä, mitä tämä mallitiedosto tekee",
"Add a short title for this prompt": "Lisää lyhyt otsikko tälle kehotteelle", "Add a short title for this prompt": "Lisää lyhyt otsikko tälle kehotteelle",
"Add a tag": "Lisää tagi", "Add a tag": "Lisää tagi",
"Add custom prompt": "Lisää mukautettu kehote", "Add custom prompt": "Lisää mukautettu kehote",
@ -29,6 +30,7 @@
"Admin Panel": "Hallintapaneeli", "Admin Panel": "Hallintapaneeli",
"Admin Settings": "Hallinta-asetukset", "Admin Settings": "Hallinta-asetukset",
"Advanced Parameters": "Edistyneet parametrit", "Advanced Parameters": "Edistyneet parametrit",
"Advanced Params": "",
"all": "kaikki", "all": "kaikki",
"All Documents": "Kaikki asiakirjat", "All Documents": "Kaikki asiakirjat",
"All Users": "Kaikki käyttäjät", "All Users": "Kaikki käyttäjät",
@ -43,7 +45,6 @@
"API Key": "API-avain", "API Key": "API-avain",
"API Key created.": "API-avain luotu.", "API Key created.": "API-avain luotu.",
"API keys": "API-avaimet", "API keys": "API-avaimet",
"API RPM": "API RPM",
"April": "huhtikuu", "April": "huhtikuu",
"Archive": "Arkisto", "Archive": "Arkisto",
"Archived Chats": "Arkistoidut keskustelut", "Archived Chats": "Arkistoidut keskustelut",
@ -60,12 +61,12 @@
"available!": "saatavilla!", "available!": "saatavilla!",
"Back": "Takaisin", "Back": "Takaisin",
"Bad Response": "Epäkelpo vastaus", "Bad Response": "Epäkelpo vastaus",
"Base Model (From)": "",
"before": "ennen", "before": "ennen",
"Being lazy": "Oli laiska", "Being lazy": "Oli laiska",
"Builder Mode": "Rakentajan tila",
"Bypass SSL verification for Websites": "Ohita SSL-varmennus verkkosivustoille", "Bypass SSL verification for Websites": "Ohita SSL-varmennus verkkosivustoille",
"Cancel": "Peruuta", "Cancel": "Peruuta",
"Categories": "Kategoriat", "Capabilities": "",
"Change Password": "Vaihda salasana", "Change Password": "Vaihda salasana",
"Chat": "Keskustelu", "Chat": "Keskustelu",
"Chat Bubble UI": "Keskustelu-pallojen käyttöliittymä", "Chat Bubble UI": "Keskustelu-pallojen käyttöliittymä",
@ -83,7 +84,6 @@
"Citation": "Sitaatti", "Citation": "Sitaatti",
"Click here for help.": "Klikkaa tästä saadaksesi apua.", "Click here for help.": "Klikkaa tästä saadaksesi apua.",
"Click here to": "Klikkaa tästä", "Click here to": "Klikkaa tästä",
"Click here to check other modelfiles.": "Klikkaa tästä nähdäksesi muita mallitiedostoja.",
"Click here to select": "Klikkaa tästä valitaksesi", "Click here to select": "Klikkaa tästä valitaksesi",
"Click here to select a csv file.": "Klikkaa tästä valitaksesi CSV-tiedosto.", "Click here to select a csv file.": "Klikkaa tästä valitaksesi CSV-tiedosto.",
"Click here to select documents.": "Klikkaa tästä valitaksesi asiakirjoja.", "Click here to select documents.": "Klikkaa tästä valitaksesi asiakirjoja.",
@ -108,7 +108,7 @@
"Copy Link": "Kopioi linkki", "Copy Link": "Kopioi linkki",
"Copying to clipboard was successful!": "Kopioiminen leikepöydälle onnistui!", "Copying to clipboard was successful!": "Kopioiminen leikepöydälle onnistui!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Luo tiivis, 3-5 sanan lause otsikoksi seuraavalle kyselylle, noudattaen tiukasti 3-5 sanan rajoitusta ja välttäen sanan 'otsikko' käyttöä:", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Luo tiivis, 3-5 sanan lause otsikoksi seuraavalle kyselylle, noudattaen tiukasti 3-5 sanan rajoitusta ja välttäen sanan 'otsikko' käyttöä:",
"Create a modelfile": "Luo mallitiedosto", "Create a model": "",
"Create Account": "Luo tili", "Create Account": "Luo tili",
"Create new key": "Luo uusi avain", "Create new key": "Luo uusi avain",
"Create new secret key": "Luo uusi salainen avain", "Create new secret key": "Luo uusi salainen avain",
@ -117,7 +117,7 @@
"Current Model": "Nykyinen malli", "Current Model": "Nykyinen malli",
"Current Password": "Nykyinen salasana", "Current Password": "Nykyinen salasana",
"Custom": "Mukautettu", "Custom": "Mukautettu",
"Customize Ollama models for a specific purpose": "Mukauta Ollama-malleja tiettyyn tarkoitukseen", "Customize models for a specific purpose": "",
"Dark": "Tumma", "Dark": "Tumma",
"Dashboard": "Kojelauta", "Dashboard": "Kojelauta",
"Database": "Tietokanta", "Database": "Tietokanta",
@ -132,17 +132,17 @@
"delete": "poista", "delete": "poista",
"Delete": "Poista", "Delete": "Poista",
"Delete a model": "Poista malli", "Delete a model": "Poista malli",
"Delete All Chats": "",
"Delete chat": "Poista keskustelu", "Delete chat": "Poista keskustelu",
"Delete Chat": "Poista keskustelu", "Delete Chat": "Poista keskustelu",
"Delete Chats": "Poista keskustelut",
"delete this link": "poista tämä linkki", "delete this link": "poista tämä linkki",
"Delete User": "Poista käyttäjä", "Delete User": "Poista käyttäjä",
"Deleted {{deleteModelTag}}": "Poistettu {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "Poistettu {{deleteModelTag}}",
"Deleted {{tagName}}": "Poistettu {{tagName}}", "Deleted {{name}}": "",
"Description": "Kuvaus", "Description": "Kuvaus",
"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin", "Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
"Disabled": "Poistettu käytöstä", "Disabled": "Poistettu käytöstä",
"Discover a modelfile": "Löydä mallitiedosto", "Discover a model": "",
"Discover a prompt": "Löydä kehote", "Discover a prompt": "Löydä kehote",
"Discover, download, and explore custom prompts": "Löydä ja lataa mukautettuja kehotteita", "Discover, download, and explore custom prompts": "Löydä ja lataa mukautettuja kehotteita",
"Discover, download, and explore model presets": "Löydä ja lataa mallien esiasetuksia", "Discover, download, and explore model presets": "Löydä ja lataa mallien esiasetuksia",
@ -176,11 +176,6 @@
"Enter Chunk Size": "Syötä osien koko", "Enter Chunk Size": "Syötä osien koko",
"Enter Image Size (e.g. 512x512)": "Syötä kuvan koko (esim. 512x512)", "Enter Image Size (e.g. 512x512)": "Syötä kuvan koko (esim. 512x512)",
"Enter language codes": "Syötä kielikoodit", "Enter language codes": "Syötä kielikoodit",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Syötä LiteLLM-APIn perus-URL (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Syötä LiteLLM-APIn avain (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Syötä LiteLLM-APIn RPM (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Syötä LiteLLM-malli (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Syötä maksimitokenit (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Syötä mallitagi (esim. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Syötä mallitagi (esim. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Syötä askelien määrä (esim. 50)", "Enter Number of Steps (e.g. 50)": "Syötä askelien määrä (esim. 50)",
"Enter Score": "Syötä pisteet", "Enter Score": "Syötä pisteet",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "Vie kaikki keskustelut (kaikki käyttäjät)", "Export All Chats (All Users)": "Vie kaikki keskustelut (kaikki käyttäjät)",
"Export Chats": "Vie keskustelut", "Export Chats": "Vie keskustelut",
"Export Documents Mapping": "Vie asiakirjakartoitus", "Export Documents Mapping": "Vie asiakirjakartoitus",
"Export Modelfiles": "Vie mallitiedostot", "Export Models": "",
"Export Prompts": "Vie kehotteet", "Export Prompts": "Vie kehotteet",
"Failed to create API Key.": "API-avaimen luonti epäonnistui.", "Failed to create API Key.": "API-avaimen luonti epäonnistui.",
"Failed to read clipboard contents": "Leikepöydän sisällön lukeminen epäonnistui", "Failed to read clipboard contents": "Leikepöydän sisällön lukeminen epäonnistui",
@ -209,7 +204,7 @@
"Focus chat input": "Fokusoi syöttökenttään", "Focus chat input": "Fokusoi syöttökenttään",
"Followed instructions perfectly": "Noudatti ohjeita täydellisesti", "Followed instructions perfectly": "Noudatti ohjeita täydellisesti",
"Format your variables using square brackets like this:": "Muotoile muuttujat hakasulkeilla näin:", "Format your variables using square brackets like this:": "Muotoile muuttujat hakasulkeilla näin:",
"From (Base Model)": "Lähde (perusmalli)", "Frequencey Penalty": "",
"Full Screen Mode": "Koko näytön tila", "Full Screen Mode": "Koko näytön tila",
"General": "Yleinen", "General": "Yleinen",
"General Settings": "Yleisasetukset", "General Settings": "Yleisasetukset",
@ -220,7 +215,6 @@
"Hello, {{name}}": "Terve, {{name}}", "Hello, {{name}}": "Terve, {{name}}",
"Help": "Apua", "Help": "Apua",
"Hide": "Piilota", "Hide": "Piilota",
"Hide Additional Params": "Piilota lisäparametrit",
"How can I help you today?": "Kuinka voin auttaa tänään?", "How can I help you today?": "Kuinka voin auttaa tänään?",
"Hybrid Search": "Hybridihaku", "Hybrid Search": "Hybridihaku",
"Image Generation (Experimental)": "Kuvagenerointi (kokeellinen)", "Image Generation (Experimental)": "Kuvagenerointi (kokeellinen)",
@ -229,7 +223,7 @@
"Images": "Kuvat", "Images": "Kuvat",
"Import Chats": "Tuo keskustelut", "Import Chats": "Tuo keskustelut",
"Import Documents Mapping": "Tuo asiakirjakartoitus", "Import Documents Mapping": "Tuo asiakirjakartoitus",
"Import Modelfiles": "Tuo mallitiedostoja", "Import Models": "",
"Import Prompts": "Tuo kehotteita", "Import Prompts": "Tuo kehotteita",
"Include `--api` flag when running stable-diffusion-webui": "Sisällytä `--api`-parametri suorittaessasi stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Sisällytä `--api`-parametri suorittaessasi stable-diffusion-webui",
"Input commands": "Syötä komennot", "Input commands": "Syötä komennot",
@ -238,6 +232,7 @@
"January": "tammikuu", "January": "tammikuu",
"join our Discord for help.": "liity Discordiimme saadaksesi apua.", "join our Discord for help.": "liity Discordiimme saadaksesi apua.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "heinäkuu", "July": "heinäkuu",
"June": "kesäkuu", "June": "kesäkuu",
"JWT Expiration": "JWT:n vanheneminen", "JWT Expiration": "JWT:n vanheneminen",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "Tehnyt OpenWebUI-yhteisö", "Made by OpenWebUI Community": "Tehnyt OpenWebUI-yhteisö",
"Make sure to enclose them with": "Varmista, että suljet ne", "Make sure to enclose them with": "Varmista, että suljet ne",
"Manage LiteLLM Models": "Hallitse LiteLLM-malleja",
"Manage Models": "Hallitse malleja", "Manage Models": "Hallitse malleja",
"Manage Ollama Models": "Hallitse Ollama-malleja", "Manage Ollama Models": "Hallitse Ollama-malleja",
"March": "maaliskuu", "March": "maaliskuu",
"Max Tokens": "Maksimitokenit", "Max Tokens (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.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Enintään 3 mallia voidaan ladata samanaikaisesti. Yritä myöhemmin uudelleen.",
"May": "toukokuu", "May": "toukokuu",
"Memories accessible by LLMs will be shown here.": "Muistitiedostot, joita LLM-ohjelmat käyttävät, näkyvät tässä.", "Memories accessible by LLMs will be shown here.": "Muistitiedostot, joita LLM-ohjelmat käyttävät, näkyvät tässä.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "Malli '{{modelName}}' ladattiin onnistuneesti.", "Model '{{modelName}}' has been successfully downloaded.": "Malli '{{modelName}}' ladattiin onnistuneesti.",
"Model '{{modelTag}}' is already in queue for downloading.": "Malli '{{modelTag}}' on jo jonossa ladattavaksi.", "Model '{{modelTag}}' is already in queue for downloading.": "Malli '{{modelTag}}' on jo jonossa ladattavaksi.",
"Model {{modelId}} not found": "Mallia {{modelId}} ei löytynyt", "Model {{modelId}} not found": "Mallia {{modelId}} ei löytynyt",
"Model {{modelName}} already exists.": "Malli {{modelName}} on jo olemassa.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Mallin tiedostojärjestelmäpolku havaittu. Mallin lyhytnimi vaaditaan päivitykseen, ei voi jatkaa.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Mallin tiedostojärjestelmäpolku havaittu. Mallin lyhytnimi vaaditaan päivitykseen, ei voi jatkaa.",
"Model Name": "Mallin nimi", "Model ID": "",
"Model not selected": "Mallia ei valittu", "Model not selected": "Mallia ei valittu",
"Model Tag Name": "Mallitagin nimi", "Model Params": "",
"Model Whitelisting": "Mallin sallimislista", "Model Whitelisting": "Mallin sallimislista",
"Model(s) Whitelisted": "Malli(t) sallittu", "Model(s) Whitelisted": "Malli(t) sallittu",
"Modelfile": "Mallitiedosto",
"Modelfile Advanced Settings": "Mallitiedoston edistyneet asetukset",
"Modelfile Content": "Mallitiedoston sisältö", "Modelfile Content": "Mallitiedoston sisältö",
"Modelfiles": "Mallitiedostot",
"Models": "Mallit", "Models": "Mallit",
"More": "Lisää", "More": "Lisää",
"Name": "Nimi", "Name": "Nimi",
"Name Tag": "Nimitagi", "Name Tag": "Nimitagi",
"Name your modelfile": "Nimeä mallitiedostosi", "Name your model": "",
"New Chat": "Uusi keskustelu", "New Chat": "Uusi keskustelu",
"New Password": "Uusi salasana", "New Password": "Uusi salasana",
"No results found": "Ei tuloksia", "No results found": "Ei tuloksia",
"No source available": "Ei lähdettä saatavilla", "No source available": "Ei lähdettä saatavilla",
"Not factually correct": "Ei faktisesti oikein", "Not factually correct": "Ei faktisesti oikein",
"Not sure what to add?": "Etkö ole varma, mitä lisätä?",
"Not sure what to write? Switch to": "Et ole varma, mitä kirjoittaa? Vaihda",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Huom: Jos asetat vähimmäispisteet, haku palauttaa vain asiakirjat, joiden pisteet ovat suurempia tai yhtä suuria kuin vähimmäispistemäärä.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Huom: Jos asetat vähimmäispisteet, haku palauttaa vain asiakirjat, joiden pisteet ovat suurempia tai yhtä suuria kuin vähimmäispistemäärä.",
"Notifications": "Ilmoitukset", "Notifications": "Ilmoitukset",
"November": "marraskuu", "November": "marraskuu",
@ -322,7 +311,6 @@
"or": "tai", "or": "tai",
"Other": "Muu", "Other": "Muu",
"Overview": "Yleiskatsaus", "Overview": "Yleiskatsaus",
"Parameters": "Parametrit",
"Password": "Salasana", "Password": "Salasana",
"PDF document (.pdf)": "PDF-tiedosto (.pdf)", "PDF document (.pdf)": "PDF-tiedosto (.pdf)",
"PDF Extract Images (OCR)": "PDF-tiedoston kuvien erottelu (OCR)", "PDF Extract Images (OCR)": "PDF-tiedoston kuvien erottelu (OCR)",
@ -342,10 +330,8 @@
"Prompts": "Kehotteet", "Prompts": "Kehotteet",
"Pull \"{{searchValue}}\" from Ollama.com": "Lataa \"{{searchValue}}\" Ollama.comista", "Pull \"{{searchValue}}\" from Ollama.com": "Lataa \"{{searchValue}}\" Ollama.comista",
"Pull a model from Ollama.com": "Lataa malli Ollama.comista", "Pull a model from Ollama.com": "Lataa malli Ollama.comista",
"Pull Progress": "Latauksen eteneminen",
"Query Params": "Kyselyparametrit", "Query Params": "Kyselyparametrit",
"RAG Template": "RAG-malline", "RAG Template": "RAG-malline",
"Raw Format": "Raaka muoto",
"Read Aloud": "Lue ääneen", "Read Aloud": "Lue ääneen",
"Record voice": "Nauhoita ääni", "Record voice": "Nauhoita ääni",
"Redirecting you to OpenWebUI Community": "Ohjataan sinut OpenWebUI-yhteisöön", "Redirecting you to OpenWebUI Community": "Ohjataan sinut OpenWebUI-yhteisöön",
@ -356,7 +342,6 @@
"Remove Model": "Poista malli", "Remove Model": "Poista malli",
"Rename": "Nimeä uudelleen", "Rename": "Nimeä uudelleen",
"Repeat Last N": "Viimeinen N -toisto", "Repeat Last N": "Viimeinen N -toisto",
"Repeat Penalty": "Toistosakko",
"Request Mode": "Pyyntötila", "Request Mode": "Pyyntötila",
"Reranking Model": "Uudelleenpisteytysmalli", "Reranking Model": "Uudelleenpisteytysmalli",
"Reranking model disabled": "Uudelleenpisteytysmalli poistettu käytöstä", "Reranking model disabled": "Uudelleenpisteytysmalli poistettu käytöstä",
@ -377,14 +362,17 @@
"Search": "Haku", "Search": "Haku",
"Search a model": "Hae mallia", "Search a model": "Hae mallia",
"Search Documents": "Hae asiakirjoja", "Search Documents": "Hae asiakirjoja",
"Search Models": "",
"Search Prompts": "Hae kehotteita", "Search Prompts": "Hae kehotteita",
"See readme.md for instructions": "Katso lisää ohjeita readme.md:stä", "See readme.md for instructions": "Katso lisää ohjeita readme.md:stä",
"See what's new": "Katso, mitä uutta", "See what's new": "Katso, mitä uutta",
"Seed": "Siemen", "Seed": "Siemen",
"Select a base model": "",
"Select a mode": "Valitse tila", "Select a mode": "Valitse tila",
"Select a model": "Valitse malli", "Select a model": "Valitse malli",
"Select an Ollama instance": "Valitse Ollama-instanssi", "Select an Ollama instance": "Valitse Ollama-instanssi",
"Select model": "Valitse malli", "Select model": "Valitse malli",
"Selected model(s) do not support image inputs": "",
"Send": "Lähetä", "Send": "Lähetä",
"Send a Message": "Lähetä viesti", "Send a Message": "Lähetä viesti",
"Send message": "Lähetä viesti", "Send message": "Lähetä viesti",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "Jaa OpenWebUI-yhteisöön", "Share to OpenWebUI Community": "Jaa OpenWebUI-yhteisöön",
"short-summary": "lyhyt-yhteenveto", "short-summary": "lyhyt-yhteenveto",
"Show": "Näytä", "Show": "Näytä",
"Show Additional Params": "Näytä lisäparametrit",
"Show shortcuts": "Näytä pikanäppäimet", "Show shortcuts": "Näytä pikanäppäimet",
"Showcased creativity": "Näytti luovuutta", "Showcased creativity": "Näytti luovuutta",
"sidebar": "sivupalkki", "sidebar": "sivupalkki",
@ -425,7 +412,6 @@
"Success": "Onnistui", "Success": "Onnistui",
"Successfully updated.": "Päivitetty onnistuneesti.", "Successfully updated.": "Päivitetty onnistuneesti.",
"Suggested": "Suositeltu", "Suggested": "Suositeltu",
"Sync All": "Synkronoi kaikki",
"System": "Järjestelmä", "System": "Järjestelmä",
"System Prompt": "Järjestelmäkehote", "System Prompt": "Järjestelmäkehote",
"Tags": "Tagit", "Tags": "Tagit",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Kirjoita 50 sanan yhteenveto, joka tiivistää [aihe tai avainsana].", "Write a summary in 50 words that summarizes [topic or keyword].": "Kirjoita 50 sanan yhteenveto, joka tiivistää [aihe tai avainsana].",
"Yesterday": "Eilen", "Yesterday": "Eilen",
"You": "Sinä", "You": "Sinä",
"You cannot clone a base model": "",
"You have no archived conversations.": "Sinulla ei ole arkistoituja keskusteluja.", "You have no archived conversations.": "Sinulla ei ole arkistoituja keskusteluja.",
"You have shared this chat": "Olet jakanut tämän keskustelun", "You have shared this chat": "Olet jakanut tämän keskustelun",
"You're a helpful assistant.": "Olet avulias apulainen.", "You're a helpful assistant.": "Olet avulias apulainen.",

View File

@ -3,6 +3,8 @@
"(Beta)": "(Bêta)", "(Beta)": "(Bêta)",
"(e.g. `sh webui.sh --api`)": "(par ex. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(par ex. `sh webui.sh --api`)",
"(latest)": "(dernière)", "(latest)": "(dernière)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} réfléchit...", "{{modelName}} is thinking...": "{{modelName}} réfléchit...",
"{{user}}'s Chats": "{{user}}'s Chats", "{{user}}'s Chats": "{{user}}'s Chats",
"{{webUIName}} Backend Required": "Backend {{webUIName}} requis", "{{webUIName}} Backend Required": "Backend {{webUIName}} requis",
@ -11,9 +13,8 @@
"Account": "Compte", "Account": "Compte",
"Accurate information": "Information précise", "Accurate information": "Information précise",
"Add": "Ajouter", "Add": "Ajouter",
"Add a model": "Ajouter un modèle", "Add a model id": "",
"Add a model tag name": "Ajouter un nom de tag pour le modèle", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "Ajouter une courte description de ce que fait ce fichier de modèle",
"Add a short title for this prompt": "Ajouter un court titre pour ce prompt", "Add a short title for this prompt": "Ajouter un court titre pour ce prompt",
"Add a tag": "Ajouter un tag", "Add a tag": "Ajouter un tag",
"Add custom prompt": "Ajouter un prompt personnalisé", "Add custom prompt": "Ajouter un prompt personnalisé",
@ -29,6 +30,7 @@
"Admin Panel": "Panneau d'administration", "Admin Panel": "Panneau d'administration",
"Admin Settings": "Paramètres d'administration", "Admin Settings": "Paramètres d'administration",
"Advanced Parameters": "Paramètres avancés", "Advanced Parameters": "Paramètres avancés",
"Advanced Params": "",
"all": "tous", "all": "tous",
"All Documents": "Tous les documents", "All Documents": "Tous les documents",
"All Users": "Tous les utilisateurs", "All Users": "Tous les utilisateurs",
@ -43,7 +45,6 @@
"API Key": "Clé API", "API Key": "Clé API",
"API Key created.": "Clé API créée.", "API Key created.": "Clé API créée.",
"API keys": "Clés API", "API keys": "Clés API",
"API RPM": "RPM API",
"April": "Avril", "April": "Avril",
"Archive": "Archiver", "Archive": "Archiver",
"Archived Chats": "enregistrement du chat", "Archived Chats": "enregistrement du chat",
@ -60,12 +61,12 @@
"available!": "disponible !", "available!": "disponible !",
"Back": "Retour", "Back": "Retour",
"Bad Response": "Mauvaise réponse", "Bad Response": "Mauvaise réponse",
"Base Model (From)": "",
"before": "avant", "before": "avant",
"Being lazy": "En manque de temps", "Being lazy": "En manque de temps",
"Builder Mode": "Mode Constructeur",
"Bypass SSL verification for Websites": "Parcourir la vérification SSL pour les sites Web", "Bypass SSL verification for Websites": "Parcourir la vérification SSL pour les sites Web",
"Cancel": "Annuler", "Cancel": "Annuler",
"Categories": "Catégories", "Capabilities": "",
"Change Password": "Changer le mot de passe", "Change Password": "Changer le mot de passe",
"Chat": "Discussion", "Chat": "Discussion",
"Chat Bubble UI": "Bubble UI de discussion", "Chat Bubble UI": "Bubble UI de discussion",
@ -83,7 +84,6 @@
"Citation": "Citations", "Citation": "Citations",
"Click here for help.": "Cliquez ici pour de l'aide.", "Click here for help.": "Cliquez ici pour de l'aide.",
"Click here to": "Cliquez ici pour", "Click here to": "Cliquez ici pour",
"Click here to check other modelfiles.": "Cliquez ici pour vérifier d'autres fichiers de modèle.",
"Click here to select": "Cliquez ici pour sélectionner", "Click here to select": "Cliquez ici pour sélectionner",
"Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier csv.", "Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier csv.",
"Click here to select documents.": "Cliquez ici pour sélectionner des documents.", "Click here to select documents.": "Cliquez ici pour sélectionner des documents.",
@ -108,7 +108,7 @@
"Copy Link": "Copier le lien", "Copy Link": "Copier le lien",
"Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !", "Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Créez une phrase concise de 3 à 5 mots comme en-tête pour la requête suivante, en respectant strictement la limite de 3 à 5 mots et en évitant l'utilisation du mot 'titre' :", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Créez une phrase concise de 3 à 5 mots comme en-tête pour la requête suivante, en respectant strictement la limite de 3 à 5 mots et en évitant l'utilisation du mot 'titre' :",
"Create a modelfile": "Créer un fichier de modèle", "Create a model": "",
"Create Account": "Créer un compte", "Create Account": "Créer un compte",
"Create new key": "Créer une nouvelle clé", "Create new key": "Créer une nouvelle clé",
"Create new secret key": "Créer une nouvelle clé secrète", "Create new secret key": "Créer une nouvelle clé secrète",
@ -117,7 +117,7 @@
"Current Model": "Modèle actuel", "Current Model": "Modèle actuel",
"Current Password": "Mot de passe actuel", "Current Password": "Mot de passe actuel",
"Custom": "Personnalisé", "Custom": "Personnalisé",
"Customize Ollama models for a specific purpose": "Personnaliser les modèles Ollama pour un objectif spécifique", "Customize models for a specific purpose": "",
"Dark": "Sombre", "Dark": "Sombre",
"Dashboard": "Tableau de bord", "Dashboard": "Tableau de bord",
"Database": "Base de données", "Database": "Base de données",
@ -132,17 +132,17 @@
"delete": "supprimer", "delete": "supprimer",
"Delete": "Supprimer", "Delete": "Supprimer",
"Delete a model": "Supprimer un modèle", "Delete a model": "Supprimer un modèle",
"Delete All Chats": "",
"Delete chat": "Supprimer la discussion", "Delete chat": "Supprimer la discussion",
"Delete Chat": "Supprimer la discussion", "Delete Chat": "Supprimer la discussion",
"Delete Chats": "Supprimer les discussions",
"delete this link": "supprimer ce lien", "delete this link": "supprimer ce lien",
"Delete User": "Supprimer l'utilisateur", "Delete User": "Supprimer l'utilisateur",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé",
"Deleted {{tagName}}": "{{tagName}} supprimé", "Deleted {{name}}": "",
"Description": "Description", "Description": "Description",
"Didn't fully follow instructions": "Ne suit pas les instructions", "Didn't fully follow instructions": "Ne suit pas les instructions",
"Disabled": "Désactivé", "Disabled": "Désactivé",
"Discover a modelfile": "Découvrir un fichier de modèle", "Discover a model": "",
"Discover a prompt": "Découvrir un prompt", "Discover a prompt": "Découvrir un prompt",
"Discover, download, and explore custom prompts": "Découvrir, télécharger et explorer des prompts personnalisés", "Discover, download, and explore custom prompts": "Découvrir, télécharger et explorer des prompts personnalisés",
"Discover, download, and explore model presets": "Découvrir, télécharger et explorer des préconfigurations de modèles", "Discover, download, and explore model presets": "Découvrir, télécharger et explorer des préconfigurations de modèles",
@ -176,11 +176,6 @@
"Enter Chunk Size": "Entrez la taille du bloc", "Enter Chunk Size": "Entrez la taille du bloc",
"Enter Image Size (e.g. 512x512)": "Entrez la taille de l'image (p. ex. 512x512)", "Enter Image Size (e.g. 512x512)": "Entrez la taille de l'image (p. ex. 512x512)",
"Enter language codes": "Entrez les codes de langue", "Enter language codes": "Entrez les codes de langue",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Entrez l'URL de base de l'API LiteLLM (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Entrez la clé API LiteLLM (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Entrez le RPM de l'API LiteLLM (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Entrez le modèle LiteLLM (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Entrez le nombre max de tokens (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Entrez le tag du modèle (p. ex. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Entrez le tag du modèle (p. ex. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Entrez le nombre d'étapes (p. ex. 50)", "Enter Number of Steps (e.g. 50)": "Entrez le nombre d'étapes (p. ex. 50)",
"Enter Score": "Entrez le score", "Enter Score": "Entrez le score",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "Exporter toutes les discussions (Tous les utilisateurs)", "Export All Chats (All Users)": "Exporter toutes les discussions (Tous les utilisateurs)",
"Export Chats": "Exporter les discussions", "Export Chats": "Exporter les discussions",
"Export Documents Mapping": "Exporter le mappage des documents", "Export Documents Mapping": "Exporter le mappage des documents",
"Export Modelfiles": "Exporter les fichiers de modèle", "Export Models": "",
"Export Prompts": "Exporter les prompts", "Export Prompts": "Exporter les prompts",
"Failed to create API Key.": "Impossible de créer la clé API.", "Failed to create API Key.": "Impossible de créer la clé API.",
"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers", "Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
@ -209,7 +204,7 @@
"Focus chat input": "Se concentrer sur l'entrée de la discussion", "Focus chat input": "Se concentrer sur l'entrée de la discussion",
"Followed instructions perfectly": "Suivi des instructions parfaitement", "Followed instructions perfectly": "Suivi des instructions parfaitement",
"Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :",
"From (Base Model)": "De (Modèle de base)", "Frequencey Penalty": "",
"Full Screen Mode": "Mode plein écran", "Full Screen Mode": "Mode plein écran",
"General": "Général", "General": "Général",
"General Settings": "Paramètres généraux", "General Settings": "Paramètres généraux",
@ -220,7 +215,6 @@
"Hello, {{name}}": "Bonjour, {{name}}", "Hello, {{name}}": "Bonjour, {{name}}",
"Help": "Aide", "Help": "Aide",
"Hide": "Cacher", "Hide": "Cacher",
"Hide Additional Params": "Cacher les paramètres supplémentaires",
"How can I help you today?": "Comment puis-je vous aider aujourd'hui ?", "How can I help you today?": "Comment puis-je vous aider aujourd'hui ?",
"Hybrid Search": "Recherche hybride", "Hybrid Search": "Recherche hybride",
"Image Generation (Experimental)": "Génération d'image (Expérimental)", "Image Generation (Experimental)": "Génération d'image (Expérimental)",
@ -229,7 +223,7 @@
"Images": "Images", "Images": "Images",
"Import Chats": "Importer les discussions", "Import Chats": "Importer les discussions",
"Import Documents Mapping": "Importer le mappage des documents", "Import Documents Mapping": "Importer le mappage des documents",
"Import Modelfiles": "Importer les fichiers de modèle", "Import Models": "",
"Import Prompts": "Importer les prompts", "Import Prompts": "Importer les prompts",
"Include `--api` flag when running stable-diffusion-webui": "Inclure l'indicateur `--api` lors de l'exécution de stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Inclure l'indicateur `--api` lors de l'exécution de stable-diffusion-webui",
"Input commands": "Entrez des commandes d'entrée", "Input commands": "Entrez des commandes d'entrée",
@ -238,6 +232,7 @@
"January": "Janvier", "January": "Janvier",
"join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.", "join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "Juillet", "July": "Juillet",
"June": "Juin", "June": "Juin",
"JWT Expiration": "Expiration du JWT", "JWT Expiration": "Expiration du JWT",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "Réalisé par la communauté OpenWebUI", "Made by OpenWebUI Community": "Réalisé par la communauté OpenWebUI",
"Make sure to enclose them with": "Assurez-vous de les entourer avec", "Make sure to enclose them with": "Assurez-vous de les entourer avec",
"Manage LiteLLM Models": "Gérer les modèles LiteLLM",
"Manage Models": "Gérer les modèles", "Manage Models": "Gérer les modèles",
"Manage Ollama Models": "Gérer les modèles Ollama", "Manage Ollama Models": "Gérer les modèles Ollama",
"March": "Mars", "March": "Mars",
"Max Tokens": "Tokens maximaux", "Max Tokens (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é simultanément. Veuillez réessayer plus tard.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Un maximum de 3 modèles peut être téléchargé simultanément. Veuillez réessayer plus tard.",
"May": "Mai", "May": "Mai",
"Memories accessible by LLMs will be shown here.": "Les mémoires accessibles par les LLM seront affichées ici.", "Memories accessible by LLMs will be shown here.": "Les mémoires accessibles par les LLM seront affichées ici.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "Le modèle '{{modelName}}' a été téléchargé avec succès.", "Model '{{modelName}}' has been successfully downloaded.": "Le modèle '{{modelName}}' a été téléchargé avec succès.",
"Model '{{modelTag}}' is already in queue for downloading.": "Le modèle '{{modelTag}}' est déjà dans la file d'attente pour le téléchargement.", "Model '{{modelTag}}' is already in queue for downloading.": "Le modèle '{{modelTag}}' est déjà dans la file d'attente pour le téléchargement.",
"Model {{modelId}} not found": "Modèle {{modelId}} non trouvé", "Model {{modelId}} not found": "Modèle {{modelId}} non trouvé",
"Model {{modelName}} already exists.": "Le modèle {{modelName}} existe déjà.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Le chemin du système de fichiers du modèle a été détecté. Le nom court du modèle est nécessaire pour la mise à jour, impossible de continuer.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Le chemin du système de fichiers du modèle a été détecté. Le nom court du modèle est nécessaire pour la mise à jour, impossible de continuer.",
"Model Name": "Nom du modèle", "Model ID": "",
"Model not selected": "Modèle non sélectionné", "Model not selected": "Modèle non sélectionné",
"Model Tag Name": "Nom de tag du modèle", "Model Params": "",
"Model Whitelisting": "Liste blanche de modèle", "Model Whitelisting": "Liste blanche de modèle",
"Model(s) Whitelisted": "Modèle(s) sur liste blanche", "Model(s) Whitelisted": "Modèle(s) sur liste blanche",
"Modelfile": "Fichier de modèle",
"Modelfile Advanced Settings": "Paramètres avancés du fichier de modèle",
"Modelfile Content": "Contenu du fichier de modèle", "Modelfile Content": "Contenu du fichier de modèle",
"Modelfiles": "Fichiers de modèle",
"Models": "Modèles", "Models": "Modèles",
"More": "Plus", "More": "Plus",
"Name": "Nom", "Name": "Nom",
"Name Tag": "Tag de nom", "Name Tag": "Tag de nom",
"Name your modelfile": "Nommez votre fichier de modèle", "Name your model": "",
"New Chat": "Nouvelle discussion", "New Chat": "Nouvelle discussion",
"New Password": "Nouveau mot de passe", "New Password": "Nouveau mot de passe",
"No results found": "Aucun résultat trouvé", "No results found": "Aucun résultat trouvé",
"No source available": "Aucune source disponible", "No source available": "Aucune source disponible",
"Not factually correct": "Non, pas exactement correct", "Not factually correct": "Non, pas exactement correct",
"Not sure what to add?": "Pas sûr de quoi ajouter ?",
"Not sure what to write? Switch to": "Pas sûr de quoi écrire ? Changez pour",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Note: Si vous définissez un score minimum, la recherche ne retournera que les documents avec un score supérieur ou égal au score minimum.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Note: Si vous définissez un score minimum, la recherche ne retournera que les documents avec un score supérieur ou égal au score minimum.",
"Notifications": "Notifications de bureau", "Notifications": "Notifications de bureau",
"November": "Novembre", "November": "Novembre",
@ -322,7 +311,6 @@
"or": "ou", "or": "ou",
"Other": "Autre", "Other": "Autre",
"Overview": "Aperçu", "Overview": "Aperçu",
"Parameters": "Paramètres",
"Password": "Mot de passe", "Password": "Mot de passe",
"PDF document (.pdf)": "Document PDF (.pdf)", "PDF document (.pdf)": "Document PDF (.pdf)",
"PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)", "PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)",
@ -342,10 +330,8 @@
"Prompts": "Prompts", "Prompts": "Prompts",
"Pull \"{{searchValue}}\" from Ollama.com": "Tirer \"{{searchValue}}\" de Ollama.com", "Pull \"{{searchValue}}\" from Ollama.com": "Tirer \"{{searchValue}}\" de Ollama.com",
"Pull a model from Ollama.com": "Tirer un modèle de Ollama.com", "Pull a model from Ollama.com": "Tirer un modèle de Ollama.com",
"Pull Progress": "Progression du téléchargement",
"Query Params": "Paramètres de requête", "Query Params": "Paramètres de requête",
"RAG Template": "Modèle RAG", "RAG Template": "Modèle RAG",
"Raw Format": "Format brut",
"Read Aloud": "Lire à l'échelle", "Read Aloud": "Lire à l'échelle",
"Record voice": "Enregistrer la voix", "Record voice": "Enregistrer la voix",
"Redirecting you to OpenWebUI Community": "Vous redirige vers la communauté OpenWebUI", "Redirecting you to OpenWebUI Community": "Vous redirige vers la communauté OpenWebUI",
@ -356,7 +342,6 @@
"Remove Model": "Supprimer le modèle", "Remove Model": "Supprimer le modèle",
"Rename": "Renommer", "Rename": "Renommer",
"Repeat Last N": "Répéter les N derniers", "Repeat Last N": "Répéter les N derniers",
"Repeat Penalty": "Pénalité de répétition",
"Request Mode": "Mode de requête", "Request Mode": "Mode de requête",
"Reranking Model": "Modèle de reranking", "Reranking Model": "Modèle de reranking",
"Reranking model disabled": "Modèle de reranking désactivé", "Reranking model disabled": "Modèle de reranking désactivé",
@ -377,14 +362,17 @@
"Search": "Recherche", "Search": "Recherche",
"Search a model": "Rechercher un modèle", "Search a model": "Rechercher un modèle",
"Search Documents": "Rechercher des documents", "Search Documents": "Rechercher des documents",
"Search Models": "",
"Search Prompts": "Rechercher des prompts", "Search Prompts": "Rechercher des prompts",
"See readme.md for instructions": "Voir readme.md pour les instructions", "See readme.md for instructions": "Voir readme.md pour les instructions",
"See what's new": "Voir les nouveautés", "See what's new": "Voir les nouveautés",
"Seed": "Graine", "Seed": "Graine",
"Select a base model": "",
"Select a mode": "Sélectionnez un mode", "Select a mode": "Sélectionnez un mode",
"Select a model": "Sélectionnez un modèle", "Select a model": "Sélectionnez un modèle",
"Select an Ollama instance": "Sélectionner une instance Ollama", "Select an Ollama instance": "Sélectionner une instance Ollama",
"Select model": "Sélectionnez un modèle", "Select model": "Sélectionnez un modèle",
"Selected model(s) do not support image inputs": "",
"Send": "Envoyer", "Send": "Envoyer",
"Send a Message": "Envoyer un message", "Send a Message": "Envoyer un message",
"Send message": "Envoyer un message", "Send message": "Envoyer un message",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "Partager avec la communauté OpenWebUI", "Share to OpenWebUI Community": "Partager avec la communauté OpenWebUI",
"short-summary": "résumé court", "short-summary": "résumé court",
"Show": "Afficher", "Show": "Afficher",
"Show Additional Params": "Afficher les paramètres supplémentaires",
"Show shortcuts": "Afficher les raccourcis", "Show shortcuts": "Afficher les raccourcis",
"Showcased creativity": "Créativité affichée", "Showcased creativity": "Créativité affichée",
"sidebar": "barre latérale", "sidebar": "barre latérale",
@ -425,7 +412,6 @@
"Success": "Succès", "Success": "Succès",
"Successfully updated.": "Mis à jour avec succès.", "Successfully updated.": "Mis à jour avec succès.",
"Suggested": "Suggéré", "Suggested": "Suggéré",
"Sync All": "Synchroniser tout",
"System": "Système", "System": "Système",
"System Prompt": "Prompt Système", "System Prompt": "Prompt Système",
"Tags": "Tags", "Tags": "Tags",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Rédigez un résumé en 50 mots qui résume [sujet ou mot-clé].", "Write a summary in 50 words that summarizes [topic or keyword].": "Rédigez un résumé en 50 mots qui résume [sujet ou mot-clé].",
"Yesterday": "hier", "Yesterday": "hier",
"You": "Vous", "You": "Vous",
"You cannot clone a base model": "",
"You have no archived conversations.": "Vous n'avez aucune conversation archivée.", "You have no archived conversations.": "Vous n'avez aucune conversation archivée.",
"You have shared this chat": "Vous avez partagé cette conversation", "You have shared this chat": "Vous avez partagé cette conversation",
"You're a helpful assistant.": "Vous êtes un assistant utile", "You're a helpful assistant.": "Vous êtes un assistant utile",

View File

@ -2,36 +2,38 @@
"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ou '-1' pour aucune expiration.", "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ou '-1' pour aucune expiration.",
"(Beta)": "(Bêta)", "(Beta)": "(Bêta)",
"(e.g. `sh webui.sh --api`)": "(par ex. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(par ex. `sh webui.sh --api`)",
"(latest)": "(dernière)", "(latest)": "(plus récent)",
"{{ models }}": "{{ models }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}: Vous ne pouvez pas supprimer un modèle de base",
"{{modelName}} is thinking...": "{{modelName}} réfléchit...", "{{modelName}} is thinking...": "{{modelName}} réfléchit...",
"{{user}}'s Chats": "{{user}}'s Chats", "{{user}}'s Chats": "Chats de {{user}}",
"{{webUIName}} Backend Required": "Backend {{webUIName}} requis", "{{webUIName}} Backend Required": "Backend {{webUIName}} requis",
"a user": "un utilisateur", "a user": "un utilisateur",
"About": propos", "About": Propos",
"Account": "Compte", "Account": "Compte",
"Accurate information": "Information précise", "Accurate information": "Information précise",
"Add": "Ajouter", "Add": "Ajouter",
"Add a model": "Ajouter un modèle", "Add a model id": "Ajouter un identifiant modèle",
"Add a model tag name": "Ajouter un nom de tag pour le modèle", "Add a short description about what this model does": "Ajouter une courte description de ce que fait ce modèle",
"Add a short description about what this modelfile does": "Ajouter une courte description de ce que fait ce fichier de modèle",
"Add a short title for this prompt": "Ajouter un court titre pour ce prompt", "Add a short title for this prompt": "Ajouter un court titre pour ce prompt",
"Add a tag": "Ajouter un tag", "Add a tag": "Ajouter un tag",
"Add custom prompt": "Ajouter un prompt personnalisé", "Add custom prompt": "Ajouter un prompt personnalisé",
"Add Docs": "Ajouter des documents", "Add Docs": "Ajouter des Documents",
"Add Files": "Ajouter des fichiers", "Add Files": "Ajouter des Fichiers",
"Add Memory": "Ajouter une mémoire", "Add Memory": "Ajouter de la Mémoire",
"Add message": "Ajouter un message", "Add message": "Ajouter un message",
"Add Model": "Ajouter un modèle", "Add Model": "Ajouter un Modèle",
"Add Tags": "ajouter des tags", "Add Tags": "Ajouter des Tags",
"Add User": "Ajouter un utilisateur", "Add User": "Ajouter un Utilisateur",
"Adjusting these settings will apply changes universally to all users.": "L'ajustement de ces paramètres appliquera les changements à tous les utilisateurs.", "Adjusting these settings will apply changes universally to all users.": "L'ajustement de ces paramètres appliquera les changements à tous les utilisateurs.",
"admin": "Administrateur", "admin": "admin",
"Admin Panel": "Panneau d'administration", "Admin Panel": "Panneau d'Administration",
"Admin Settings": "Paramètres d'administration", "Admin Settings": "Paramètres d'Administration",
"Advanced Parameters": "Paramètres avancés", "Advanced Parameters": "Paramètres Avancés",
"Advanced Params": "Params Avancés",
"all": "tous", "all": "tous",
"All Documents": "Tous les documents", "All Documents": "Tous les Documents",
"All Users": "Tous les utilisateurs", "All Users": "Tous les Utilisateurs",
"Allow": "Autoriser", "Allow": "Autoriser",
"Allow Chat Deletion": "Autoriser la suppression du chat", "Allow Chat Deletion": "Autoriser la suppression du chat",
"alphanumeric characters and hyphens": "caractères alphanumériques et tirets", "alphanumeric characters and hyphens": "caractères alphanumériques et tirets",
@ -41,12 +43,11 @@
"and create a new shared link.": "et créer un nouveau lien partagé.", "and create a new shared link.": "et créer un nouveau lien partagé.",
"API Base URL": "URL de base de l'API", "API Base URL": "URL de base de l'API",
"API Key": "Clé API", "API Key": "Clé API",
"API Key created.": "Clé API créée.", "API Key created.": "Clé d'API créée.",
"API keys": "Clés API", "API keys": "Clés API",
"API RPM": "RPM API",
"April": "Avril", "April": "Avril",
"Archive": "Archiver", "Archive": "Archiver",
"Archived Chats": "enregistrement du chat", "Archived Chats": "Chats Archivés",
"are allowed - Activate this command by typing": "sont autorisés - Activez cette commande en tapant", "are allowed - Activate this command by typing": "sont autorisés - Activez cette commande en tapant",
"Are you sure?": "Êtes-vous sûr ?", "Are you sure?": "Êtes-vous sûr ?",
"Attach file": "Joindre un fichier", "Attach file": "Joindre un fichier",
@ -59,16 +60,16 @@
"AUTOMATIC1111 Base URL is required.": "L'URL de base AUTOMATIC1111 est requise.", "AUTOMATIC1111 Base URL is required.": "L'URL de base AUTOMATIC1111 est requise.",
"available!": "disponible !", "available!": "disponible !",
"Back": "Retour", "Back": "Retour",
"Bad Response": "Mauvaise réponse", "Bad Response": "Mauvaise Réponse",
"Base Model (From)": "Modèle de Base (De)",
"before": "avant", "before": "avant",
"Being lazy": "En manque de temps", "Being lazy": "Est paresseux",
"Builder Mode": "Mode Constructeur", "Bypass SSL verification for Websites": "Contourner la vérification SSL pour les sites Web.",
"Bypass SSL verification for Websites": "Parcourir la vérification SSL pour les sites Web",
"Cancel": "Annuler", "Cancel": "Annuler",
"Categories": "Cagories", "Capabilities": "Capacités",
"Change Password": "Changer le mot de passe", "Change Password": "Changer le mot de passe",
"Chat": "Chat", "Chat": "Chat",
"Chat Bubble UI": "Chat Bubble UI", "Chat Bubble UI": "UI Bulles de Chat",
"Chat direction": "Direction du chat", "Chat direction": "Direction du chat",
"Chat History": "Historique du chat", "Chat History": "Historique du chat",
"Chat History is off for this browser.": "L'historique du chat est désactivé pour ce navigateur.", "Chat History is off for this browser.": "L'historique du chat est désactivé pour ce navigateur.",
@ -80,10 +81,9 @@
"Chunk Overlap": "Chevauchement de bloc", "Chunk Overlap": "Chevauchement de bloc",
"Chunk Params": "Paramètres de bloc", "Chunk Params": "Paramètres de bloc",
"Chunk Size": "Taille de bloc", "Chunk Size": "Taille de bloc",
"Citation": "Citations", "Citation": "Citation",
"Click here for help.": "Cliquez ici pour de l'aide.", "Click here for help.": "Cliquez ici pour de l'aide.",
"Click here to": "Cliquez ici pour", "Click here to": "Cliquez ici pour",
"Click here to check other modelfiles.": "Cliquez ici pour vérifier d'autres fichiers de modèle.",
"Click here to select": "Cliquez ici pour sélectionner", "Click here to select": "Cliquez ici pour sélectionner",
"Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier csv.", "Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier csv.",
"Click here to select documents.": "Cliquez ici pour sélectionner des documents.", "Click here to select documents.": "Cliquez ici pour sélectionner des documents.",
@ -92,32 +92,32 @@
"Close": "Fermer", "Close": "Fermer",
"Collection": "Collection", "Collection": "Collection",
"ComfyUI": "ComfyUI", "ComfyUI": "ComfyUI",
"ComfyUI Base URL": "ComfyUI Base URL", "ComfyUI Base URL": "URL de base ComfyUI",
"ComfyUI Base URL is required.": "ComfyUI Base URL est requis.", "ComfyUI Base URL is required.": "L'URL de base ComfyUI est requise.",
"Command": "Commande", "Command": "Commande",
"Confirm Password": "Confirmer le mot de passe", "Confirm Password": "Confirmer le mot de passe",
"Connections": "Connexions", "Connections": "Connexions",
"Content": "Contenu", "Content": "Contenu",
"Context Length": "Longueur du contexte", "Context Length": "Longueur du contexte",
"Continue Response": "Continuer la réponse", "Continue Response": "Continuer la Réponse",
"Conversation Mode": "Mode de conversation", "Conversation Mode": "Mode de conversation",
"Copied shared chat URL to clipboard!": "URL de chat partagé copié dans le presse-papier !", "Copied shared chat URL to clipboard!": "URL du chat copié dans le presse-papiers !",
"Copy": "Copier", "Copy": "Copier",
"Copy last code block": "Copier le dernier bloc de code", "Copy last code block": "Copier le dernier bloc de code",
"Copy last response": "Copier la dernière réponse", "Copy last response": "Copier la dernière réponse",
"Copy Link": "Copier le lien", "Copy Link": "Copier le Lien",
"Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !", "Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Créez une phrase concise de 3-5 mots comme en-tête pour la requête suivante, en respectant strictement la limite de 3-5 mots et en évitant l'utilisation du mot 'titre' :", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Créez une phrase concise de 3-5 mots comme en-tête pour la requête suivante, en respectant strictement la limite de 3-5 mots et en évitant l'utilisation du mot 'titre' :",
"Create a modelfile": "Créer un fichier de modèle", "Create a model": "Créer un modèle",
"Create Account": "Créer un compte", "Create Account": "Créer un compte",
"Create new key": "Créer une nouvelle clé", "Create new key": "Créer une nouvelle clé",
"Create new secret key": "Créer une nouvelle clé secrète", "Create new secret key": "Créer une nouvelle clé secrète",
"Created at": "Créé le", "Created at": "Créé le",
"Created At": "Créé le", "Created At": "Crée Le",
"Current Model": "Modèle actuel", "Current Model": "Modèle actuel",
"Current Password": "Mot de passe actuel", "Current Password": "Mot de passe actuel",
"Custom": "Personnalisé", "Custom": "Personnalisé",
"Customize Ollama models for a specific purpose": "Personnaliser les modèles Ollama pour un objectif spécifique", "Customize models for a specific purpose": "Personnaliser les modèles pour un objectif spécifique",
"Dark": "Sombre", "Dark": "Sombre",
"Dashboard": "Tableau de bord", "Dashboard": "Tableau de bord",
"Database": "Base de données", "Database": "Base de données",
@ -132,17 +132,17 @@
"delete": "supprimer", "delete": "supprimer",
"Delete": "Supprimer", "Delete": "Supprimer",
"Delete a model": "Supprimer un modèle", "Delete a model": "Supprimer un modèle",
"Delete All Chats": "",
"Delete chat": "Supprimer le chat", "Delete chat": "Supprimer le chat",
"Delete Chat": "Supprimer le chat", "Delete Chat": "Supprimer le Chat",
"Delete Chats": "Supprimer les chats",
"delete this link": "supprimer ce lien", "delete this link": "supprimer ce lien",
"Delete User": "Supprimer l'utilisateur", "Delete User": "Supprimer l'Utilisateur",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé",
"Deleted {{tagName}}": "{{tagName}} supprimé", "Deleted {{name}}": "{{name}} supprimé",
"Description": "Description", "Description": "Description",
"Didn't fully follow instructions": "Ne suit pas les instructions", "Didn't fully follow instructions": "N'a pas suivi entièrement les instructions",
"Disabled": "Désactivé", "Disabled": "Désactivé",
"Discover a modelfile": "Découvrir un fichier de modèle", "Discover a model": "Découvrir un modèle",
"Discover a prompt": "Découvrir un prompt", "Discover a prompt": "Découvrir un prompt",
"Discover, download, and explore custom prompts": "Découvrir, télécharger et explorer des prompts personnalisés", "Discover, download, and explore custom prompts": "Découvrir, télécharger et explorer des prompts personnalisés",
"Discover, download, and explore model presets": "Découvrir, télécharger et explorer des préconfigurations de modèles", "Discover, download, and explore model presets": "Découvrir, télécharger et explorer des préconfigurations de modèles",
@ -153,7 +153,7 @@
"does not make any external connections, and your data stays securely on your locally hosted server.": "ne fait aucune connexion externe, et vos données restent en sécurité sur votre serveur hébergé localement.", "does not make any external connections, and your data stays securely on your locally hosted server.": "ne fait aucune connexion externe, et vos données restent en sécurité sur votre serveur hébergé localement.",
"Don't Allow": "Ne pas autoriser", "Don't Allow": "Ne pas autoriser",
"Don't have an account?": "Vous n'avez pas de compte ?", "Don't have an account?": "Vous n'avez pas de compte ?",
"Don't like the style": "Vous n'aimez pas le style ?", "Don't like the style": "N'aime pas le style",
"Download": "Télécharger", "Download": "Télécharger",
"Download canceled": "Téléchargement annulé", "Download canceled": "Téléchargement annulé",
"Download Database": "Télécharger la base de données", "Download Database": "Télécharger la base de données",
@ -163,106 +163,100 @@
"Edit Doc": "Éditer le document", "Edit Doc": "Éditer le document",
"Edit User": "Éditer l'utilisateur", "Edit User": "Éditer l'utilisateur",
"Email": "Email", "Email": "Email",
"Embedding Model": "Modèle d'embedding", "Embedding Model": "Modèle pour l'Embedding",
"Embedding Model Engine": "Moteur du modèle d'embedding", "Embedding Model Engine": "Moteur du Modèle d'Embedding",
"Embedding model set to \"{{embedding_model}}\"": "Modèle d'embedding défini sur \"{{embedding_model}}\"", "Embedding model set to \"{{embedding_model}}\"": "Modèle d'embedding défini sur \"{{embedding_model}}\"",
"Enable Chat History": "Activer l'historique du chat", "Enable Chat History": "Activer l'historique du chat",
"Enable New Sign Ups": "Activer les nouvelles inscriptions", "Enable New Sign Ups": "Activer les nouvelles inscriptions",
"Enabled": "Activé", "Enabled": "Activé",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assurez-vous que votre fichier CSV inclut 4 colonnes dans cet ordre : Nom, Email, Mot de passe, Rôle.", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que le fichier CSV contienne 4 colonnes dans cet ordre : Name (Nom), Email, Password (Mot de passe), Role (Rôle).",
"Enter {{role}} message here": "Entrez le message {{role}} ici", "Enter {{role}} message here": "Entrez le message {{role}} ici",
"Enter a detail about yourself for your LLMs to recall": "Entrez un détail sur vous pour que vos LLM puissent le rappeler", "Enter a detail about yourself for your LLMs to recall": "Saisissez une donnée vous concernant pour que vos LLMs s'en souviennent",
"Enter Chunk Overlap": "Entrez le chevauchement de bloc", "Enter Chunk Overlap": "Entrez le chevauchement de bloc",
"Enter Chunk Size": "Entrez la taille du bloc", "Enter Chunk Size": "Entrez la taille du bloc",
"Enter Image Size (e.g. 512x512)": "Entrez la taille de l'image (p. ex. 512x512)", "Enter Image Size (e.g. 512x512)": "Entrez la taille de l'image (p. ex. 512x512)",
"Enter language codes": "Entrez les codes de langue", "Enter language codes": "Entrez les codes du language",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Entrez l'URL de base de l'API LiteLLM (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Entrez la clé API LiteLLM (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Entrez le RPM de l'API LiteLLM (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Entrez le modèle LiteLLM (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Entrez le nombre max de tokens (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Entrez le tag du modèle (p. ex. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Entrez le tag du modèle (p. ex. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Entrez le nombre d'étapes (p. ex. 50)", "Enter Number of Steps (e.g. 50)": "Entrez le nombre d'étapes (p. ex. 50)",
"Enter Score": "Entrez le score", "Enter Score": "Entrez le Score",
"Enter stop sequence": "Entrez la séquence de fin", "Enter stop sequence": "Entrez la séquence de fin",
"Enter Top K": "Entrez Top K", "Enter Top K": "Entrez Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Entrez l'URL (p. ex. http://127.0.0.1:7860/)", "Enter URL (e.g. http://127.0.0.1:7860/)": "Entrez l'URL (p. ex. http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "Entrez l'URL (p. ex. http://localhost:11434)", "Enter URL (e.g. http://localhost:11434)": "Entrez l'URL (p. ex. http://localhost:11434)",
"Enter Your Email": "Entrez votre email", "Enter Your Email": "Entrez Votre Email",
"Enter Your Full Name": "Entrez votre nom complet", "Enter Your Full Name": "Entrez Votre Nom Complet",
"Enter Your Password": "Entrez votre mot de passe", "Enter Your Password": "Entrez Votre Mot De Passe",
"Enter Your Role": "Entrez votre rôle", "Enter Your Role": "Entrez Votre Rôle",
"Experimental": "Expérimental", "Experimental": "Expérimental",
"Export All Chats (All Users)": "Exporter tous les chats (tous les utilisateurs)", "Export All Chats (All Users)": "Exporter Tous les Chats (Tous les Utilisateurs)",
"Export Chats": "Exporter les chats", "Export Chats": "Exporter les Chats",
"Export Documents Mapping": "Exporter la correspondance des documents", "Export Documents Mapping": "Exporter la Correspondance des Documents",
"Export Modelfiles": "Exporter les fichiers de modèle", "Export Models": "Exporter les Modèles",
"Export Prompts": "Exporter les prompts", "Export Prompts": "Exporter les Prompts",
"Failed to create API Key.": "Impossible de créer la clé API.", "Failed to create API Key.": "Échec de la création de la clé d'API.",
"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers", "Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
"February": "Février", "February": "Février",
"Feel free to add specific details": "Vous pouvez ajouter des détails spécifiques", "Feel free to add specific details": "N'hésitez pas à ajouter des détails spécifiques",
"File Mode": "Mode fichier", "File Mode": "Mode Fichier",
"File not found.": "Fichier non trouvé.", "File not found.": "Fichier non trouvé.",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Détection de falsification de empreinte digitale\u00a0: impossible d'utiliser les initiales comme avatar. Par défaut, l'image de profil par défaut est utilisée.", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Usurpation d'empreinte digitale détectée : Impossible d'utiliser les initiales comme avatar. L'image de profil par défaut sera utilisée.",
"Fluidly stream large external response chunks": "Diffusez de manière fluide de gros morceaux de réponses externes", "Fluidly stream large external response chunks": "Diffusez de manière fluide de gros morceaux de réponses externes",
"Focus chat input": "Concentrer sur l'entrée du chat", "Focus chat input": "Concentrer sur l'entrée du chat",
"Followed instructions perfectly": "Suivi des instructions parfaitement", "Followed instructions perfectly": "A suivi les instructions parfaitement",
"Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :",
"From (Base Model)": "De (Modèle de base)", "Frequencey Penalty": "Pénalité de Fréquence",
"Full Screen Mode": "Mode plein écran", "Full Screen Mode": "Mode plein écran",
"General": "Général", "General": "Général",
"General Settings": "Paramètres généraux", "General Settings": "Paramètres Généraux",
"Generation Info": "Informations de génération", "Generation Info": "Informations de la Génération",
"Good Response": "Bonne réponse", "Good Response": "Bonne Réponse",
"h:mm a": "h:mm a", "h:mm a": "h:mm a",
"has no conversations.": "n'a pas de conversations.", "has no conversations.": "n'a pas de conversations.",
"Hello, {{name}}": "Bonjour, {{name}}", "Hello, {{name}}": "Bonjour, {{name}}",
"Help": "Aide", "Help": "Aide",
"Hide": "Cacher", "Hide": "Cacher",
"Hide Additional Params": "Hide additional params",
"How can I help you today?": "Comment puis-je vous aider aujourd'hui ?", "How can I help you today?": "Comment puis-je vous aider aujourd'hui ?",
"Hybrid Search": "Recherche hybride", "Hybrid Search": "Recherche Hybride",
"Image Generation (Experimental)": "Génération d'image (Expérimental)", "Image Generation (Experimental)": "Génération d'Image (Expérimental)",
"Image Generation Engine": "Moteur de génération d'image", "Image Generation Engine": "Moteur de Génération d'Image",
"Image Settings": "Paramètres d'image", "Image Settings": "Paramètres d'Image",
"Images": "Images", "Images": "Images",
"Import Chats": "Importer les chats", "Import Chats": "Importer les Chats",
"Import Documents Mapping": "Importer la correspondance des documents", "Import Documents Mapping": "Importer la Correspondance des Documents",
"Import Modelfiles": "Importer les fichiers de modèle", "Import Models": "Importer des Modèles",
"Import Prompts": "Importer les prompts", "Import Prompts": "Importer des Prompts",
"Include `--api` flag when running stable-diffusion-webui": "Inclure le drapeau `--api` lors de l'exécution de stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Inclure le drapeau `--api` lors de l'exécution de stable-diffusion-webui",
"Input commands": "Entrez les commandes d'entrée", "Input commands": "Entrez les commandes d'entrée",
"Interface": "Interface", "Interface": "Interface",
"Invalid Tag": "Tag invalide", "Invalid Tag": "Tag Invalide",
"January": "Janvier", "January": "Janvier",
"join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.", "join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "Aperçu JSON",
"July": "Juillet", "July": "Juillet",
"June": "Juin", "June": "Juin",
"JWT Expiration": "Expiration JWT", "JWT Expiration": "Expiration JWT",
"JWT Token": "Jeton JWT", "JWT Token": "Jeton JWT",
"Keep Alive": "Garder en vie", "Keep Alive": "Rester en vie",
"Keyboard shortcuts": "Raccourcis clavier", "Keyboard shortcuts": "Raccourcis clavier",
"Language": "Langue", "Language": "Langue",
"Last Active": "Dernière activité", "Last Active": "Dernier Activité",
"Light": "Clair", "Light": "Clair",
"Listening...": "Écoute...", "Listening...": "Écoute...",
"LLMs can make mistakes. Verify important information.": "Les LLMs peuvent faire des erreurs. Vérifiez les informations importantes.", "LLMs can make mistakes. Verify important information.": "Les LLMs peuvent faire des erreurs. Vérifiez les informations importantes.",
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "Réalisé par la communauté OpenWebUI", "Made by OpenWebUI Community": "Réalisé par la communauté OpenWebUI",
"Make sure to enclose them with": "Assurez-vous de les entourer avec", "Make sure to enclose them with": "Assurez-vous de les entourer avec",
"Manage LiteLLM Models": "Gérer les modèles LiteLLM",
"Manage Models": "Gérer les modèles", "Manage Models": "Gérer les modèles",
"Manage Ollama Models": "Gérer les modèles Ollama", "Manage Ollama Models": "Gérer les modèles Ollama",
"March": "Mars", "March": "Mars",
"Max Tokens": "Tokens maximaux", "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é simultanément. Veuillez réessayer plus tard.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Un maximum de 3 modèles peut être téléchargé simultanément. Veuillez réessayer plus tard.",
"May": "Mai", "May": "Mai",
"Memories accessible by LLMs will be shown here.": "Les mémoires accessibles par les LLM seront affichées ici.", "Memories accessible by LLMs will be shown here.": "Les Mémoires des LLMs apparaîtront ici.",
"Memory": "Mémoire", "Memory": "Mémoire",
"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 la création de votre lien ne seront pas partagés. Les utilisateurs avec l'URL pourront voir le chat partagé.", "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 envoyéz après la création du lien ne seront pas partagés. Les utilisateurs disposant de l'URL pourront voir le chat partagé.",
"Minimum Score": "Score minimum", "Minimum Score": "Score Minimum",
"Mirostat": "Mirostat", "Mirostat": "Mirostat",
"Mirostat Eta": "Mirostat Eta", "Mirostat Eta": "Mirostat Eta",
"Mirostat Tau": "Mirostat Tau", "Mirostat Tau": "Mirostat Tau",
@ -271,98 +265,89 @@
"Model '{{modelName}}' has been successfully downloaded.": "Le modèle '{{modelName}}' a été téléchargé avec succès.", "Model '{{modelName}}' has been successfully downloaded.": "Le modèle '{{modelName}}' a été téléchargé avec succès.",
"Model '{{modelTag}}' is already in queue for downloading.": "Le modèle '{{modelTag}}' est déjà dans la file d'attente pour le téléchargement.", "Model '{{modelTag}}' is already in queue for downloading.": "Le modèle '{{modelTag}}' est déjà dans la file d'attente pour le téléchargement.",
"Model {{modelId}} not found": "Modèle {{modelId}} non trouvé", "Model {{modelId}} not found": "Modèle {{modelId}} non trouvé",
"Model {{modelName}} already exists.": "Le modèle {{modelName}} existe déjà.", "Model {{modelName}} is not vision capable": "Modèle {{modelName}} n'est pas capable de voir",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Le chemin du système de fichiers du modèle a été détecté. Le nom court du modèle est nécessaire pour la mise à jour, impossible de continuer.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Chemin du système de fichier du modèle détecté. Le nom court du modèle est requis pour la mise à jour, ne peut pas continuer.",
"Model Name": "Nom du modèle", "Model ID": "ID du Modèle",
"Model not selected": "Modèle non sélectionné", "Model not selected": "Modèle non sélectionné",
"Model Tag Name": "Nom de tag du modèle", "Model Params": "Paramètres du Modèle",
"Model Whitelisting": "Liste blanche de modèle", "Model Whitelisting": "Liste Blanche de Modèle",
"Model(s) Whitelisted": "Modèle(s) sur liste blanche", "Model(s) Whitelisted": "Modèle(s) sur Liste Blanche",
"Modelfile": "Fichier de modèle", "Modelfile Content": "Contenu du Fichier de Modèle",
"Modelfile Advanced Settings": "Paramètres avancés du fichier de modèle",
"Modelfile Content": "Contenu du fichier de modèle",
"Modelfiles": "Fichiers de modèle",
"Models": "Modèles", "Models": "Modèles",
"More": "Plus", "More": "Plus",
"Name": "Nom", "Name": "Nom",
"Name Tag": "Tag de nom", "Name Tag": "Tag de Nom",
"Name your modelfile": "Nommez votre fichier de modèle", "Name your model": "Nommez votre modèle",
"New Chat": "Nouveau chat", "New Chat": "Nouveau chat",
"New Password": "Nouveau mot de passe", "New Password": "Nouveau mot de passe",
"No results found": "Aucun résultat trouvé", "No results found": "Aucun résultat",
"No source available": "Aucune source disponible", "No source available": "Aucune source disponible",
"Not factually correct": "Non, pas exactement correct", "Not factually correct": "Faits incorrects",
"Not sure what to add?": "Vous ne savez pas quoi ajouter ?", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Note : Si vous définissez un score minimum, la recherche ne renverra que les documents ayant un score supérieur ou égal au score minimum.",
"Not sure what to write? Switch to": "Vous ne savez pas quoi écrire ? Basculer vers",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Note: Si vous définissez un score minimum, la recherche ne retournera que les documents avec un score supérieur ou égal au score minimum.",
"Notifications": "Notifications de bureau", "Notifications": "Notifications de bureau",
"November": "Novembre", "November": "Novembre",
"October": "Octobre", "October": "Octobre",
"Off": "Désactivé", "Off": "Désactivé",
"Okay, Let's Go!": "D'accord, allons-y !", "Okay, Let's Go!": "D'accord, allons-y !",
"OLED Dark": "OLED Sombre", "OLED Dark": "Sombre OLED",
"Ollama": "Ollama", "Ollama": "Ollama",
"Ollama API": "", "Ollama API": "API Ollama",
"Ollama Version": "Version Ollama", "Ollama Version": "Version Ollama",
"On": "Activé", "On": "Activé",
"Only": "Seulement", "Only": "Seulement",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.", "Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.",
"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.": "Oups ! Tenez bon ! Vos fichiers sont encore dans le four. Nous les cuisinons à la perfection. Soyez patient et nous vous informerons dès qu'ils seront prêts.", "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.": "Oups ! Tenez bon ! Vos fichiers sont encore dans le four. Nous les cuisinons à la perfection. Soyez patient et nous vous informerons dès qu'ils seront prêts.",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Looks like the URL is invalid. Please double-check and try again.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oups ! On dirait que l'URL est invalide. Vérifiez et réessayez.",
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oups ! Vous utilisez une méthode non-supportée (frontend uniquement). Veuillez également servir WebUI depuis le backend.",
"Open": "Ouvrir", "Open": "Ouvrir",
"Open AI": "Open AI", "Open AI": "Open AI",
"Open AI (Dall-E)": "Open AI (Dall-E)", "Open AI (Dall-E)": "Open AI (Dall-E)",
"Open new chat": "Ouvrir un nouveau chat", "Open new chat": "Ouvrir un nouveau chat",
"OpenAI": "OpenAI", "OpenAI": "OpenAI",
"OpenAI API": "API OpenAI", "OpenAI API": "API OpenAI",
"OpenAI API Config": "Configuration API OpenAI", "OpenAI API Config": "Config API OpenAI",
"OpenAI API Key is required.": "La clé API OpenAI est requise.", "OpenAI API Key is required.": "La clé d'API OpenAI est requise.",
"OpenAI URL/Key required.": "L'URL/Clé OpenAI est requise.", "OpenAI URL/Key required.": "URL/Clé OpenAI requise.",
"or": "ou", "or": "ou",
"Other": "Autre", "Other": "Autre",
"Overview": "Aperçu", "Overview": "Aperçu",
"Parameters": "Paramètres",
"Password": "Mot de passe", "Password": "Mot de passe",
"PDF document (.pdf)": "Document PDF (.pdf)", "PDF document (.pdf)": "Document PDF (.pdf)",
"PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)", "PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)",
"pending": "en attente", "pending": "en attente",
"Permission denied when accessing microphone: {{error}}": "Permission refusée lors de l'accès au microphone : {{error}}", "Permission denied when accessing microphone: {{error}}": "Permission refusée lors de l'accès au microphone : {{error}}",
"Personalization": "Personnalisation", "Personalization": "Personnalisation",
"Plain text (.txt)": "Texte brut (.txt)", "Plain text (.txt)": "Texte Brute (.txt)",
"Playground": "Aire de jeu", "Playground": "Aire de jeu",
"Positive attitude": "Attitude positive", "Positive attitude": "Attitude Positive",
"Previous 30 days": "30 derniers jours", "Previous 30 days": "30 jours précédents",
"Previous 7 days": "7 derniers jours", "Previous 7 days": "7 jours précédents",
"Profile Image": "Image de profil", "Profile Image": "Image du Profil",
"Prompt": "Prompt", "Prompt": "Prompt",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (par exemple, Dites-moi un fait amusant sur l'Imperium romain)", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (p. ex. Raconte moi un fait amusant sur l'Empire Romain)",
"Prompt Content": "Contenu du prompt", "Prompt Content": "Contenu du prompt",
"Prompt suggestions": "Suggestions de prompt", "Prompt suggestions": "Suggestions de prompt",
"Prompts": "Prompts", "Prompts": "Prompts",
"Pull \"{{searchValue}}\" from Ollama.com": "Tirer \"{{searchValue}}\" de Ollama.com", "Pull \"{{searchValue}}\" from Ollama.com": "Récupérer \"{{searchValue}}\" de Ollama.com",
"Pull a model from Ollama.com": "Tirer un modèle de Ollama.com", "Pull a model from Ollama.com": "Récupérer un modèle de Ollama.com",
"Pull Progress": "Progression du tirage", "Query Params": "Paramètres de Requête",
"Query Params": "Paramètres de requête",
"RAG Template": "Modèle RAG", "RAG Template": "Modèle RAG",
"Raw Format": "Format brut", "Read Aloud": "Lire à Voix Haute",
"Read Aloud": "Lire à l'oreille",
"Record voice": "Enregistrer la voix", "Record voice": "Enregistrer la voix",
"Redirecting you to OpenWebUI Community": "Vous redirige vers la communauté OpenWebUI", "Redirecting you to OpenWebUI Community": "Redirection vers la communauté OpenWebUI",
"Refused when it shouldn't have": "Refusé quand il ne devrait pas l'être", "Refused when it shouldn't have": "Refuse quand il ne devrait pas",
"Regenerate": "Régénérer", "Regenerate": "Regénérer",
"Release Notes": "Notes de version", "Release Notes": "Notes de Version",
"Remove": "Supprimer", "Remove": "Retirer",
"Remove Model": "Supprimer le modèle", "Remove Model": "Retirer le Modèle",
"Rename": "Renommer", "Rename": "Renommer",
"Repeat Last N": "Répéter les derniers N", "Repeat Last N": "Répéter les Derniers N",
"Repeat Penalty": "Pénalité de répétition", "Request Mode": "Mode de Demande",
"Request Mode": "Mode de demande", "Reranking Model": "Modèle de Reclassement",
"Reranking Model": "Modèle de reranking", "Reranking model disabled": "Modèle de Reclassement Désactivé",
"Reranking model disabled": "Modèle de reranking désactivé", "Reranking model set to \"{{reranking_model}}\"": "Modèle de reclassement défini sur \"{{reranking_model}}\"",
"Reranking model set to \"{{reranking_model}}\"": "Modèle de reranking défini sur \"{{reranking_model}}\"", "Reset Vector Storage": "Réinitialiser le Stockage de Vecteur",
"Reset Vector Storage": "Réinitialiser le stockage de vecteur", "Response AutoCopy to Clipboard": "Copie Automatique de la Réponse dans le Presse-papiers",
"Response AutoCopy to Clipboard": "Copie automatique de la réponse dans le presse-papiers",
"Role": "Rôle", "Role": "Rôle",
"Rosé Pine": "Pin Rosé", "Rosé Pine": "Pin Rosé",
"Rosé Pine Dawn": "Aube Pin Rosé", "Rosé Pine Dawn": "Aube Pin Rosé",
@ -376,37 +361,39 @@
"Scan for documents from {{path}}": "Scanner des documents depuis {{path}}", "Scan for documents from {{path}}": "Scanner des documents depuis {{path}}",
"Search": "Recherche", "Search": "Recherche",
"Search a model": "Rechercher un modèle", "Search a model": "Rechercher un modèle",
"Search Documents": "Rechercher des documents", "Search Documents": "Rechercher des Documents",
"Search Prompts": "Rechercher des prompts", "Search Models": "",
"Search Prompts": "Rechercher des Prompts",
"See readme.md for instructions": "Voir readme.md pour les instructions", "See readme.md for instructions": "Voir readme.md pour les instructions",
"See what's new": "Voir les nouveautés", "See what's new": "Voir les nouveautés",
"Seed": "Graine", "Seed": "Graine",
"Select a mode": "Sélectionnez un mode", "Select a base model": "Sélectionner un modèle de base",
"Select a mode": "Sélectionner un mode",
"Select a model": "Sélectionner un modèle", "Select a model": "Sélectionner un modèle",
"Select an Ollama instance": "Sélectionner une instance Ollama", "Select an Ollama instance": "Sélectionner une instance Ollama",
"Select model": "Sélectionner un modèle", "Select model": "Sélectionner un modèle",
"Selected model(s) do not support image inputs": "Modèle(s) séléctionés ne supportent pas les entrées images",
"Send": "Envoyer", "Send": "Envoyer",
"Send a Message": "Envoyer un message", "Send a Message": "Envoyer un message",
"Send message": "Envoyer un message", "Send message": "Envoyer un message",
"September": "Septembre", "September": "Septembre",
"Server connection verified": "Connexion au serveur vérifiée", "Server connection verified": "Connexion au serveur vérifiée",
"Set as default": "Définir par défaut", "Set as default": "Définir par défaut",
"Set Default Model": "Définir le modèle par défaut", "Set Default Model": "Définir le Modèle par Défaut",
"Set embedding model (e.g. {{model}})": "Définir le modèle d'embedding (par exemple {{model}})", "Set embedding model (e.g. {{model}})": "Définir le modèle d'embedding (p. ex. {{model}})",
"Set Image Size": "Définir la taille de l'image", "Set Image Size": "Définir la Taille de l'Image",
"Set Model": "Définir le modèle", "Set Model": "Définir le Modèle",
"Set reranking model (e.g. {{model}})": "Définir le modèle de reranking (par exemple {{model}})", "Set reranking model (e.g. {{model}})": "Définir le modèle de reclassement (p. ex. {{model}})",
"Set Steps": "Définir les étapes", "Set Steps": "Définir les Étapes",
"Set Title Auto-Generation Model": "Définir le modèle de génération automatique de titre", "Set Title Auto-Generation Model": "Définir le Modèle de Génération Automatique de Titre",
"Set Voice": "Définir la voix", "Set Voice": "Définir la Voix",
"Settings": "Paramètres", "Settings": "Paramètres",
"Settings saved successfully!": "Paramètres enregistrés avec succès !", "Settings saved successfully!": "Paramètres enregistrés avec succès !",
"Share": "Partager", "Share": "Partager",
"Share Chat": "Partager le chat", "Share Chat": "Partager le Chat",
"Share to OpenWebUI Community": "Partager avec la communauté OpenWebUI", "Share to OpenWebUI Community": "Partager avec la communauté OpenWebUI",
"short-summary": "résumé court", "short-summary": "résumé court",
"Show": "Montrer", "Show": "Montrer",
"Show Additional Params": "Afficher les paramètres supplémentaires",
"Show shortcuts": "Afficher les raccourcis", "Show shortcuts": "Afficher les raccourcis",
"Showcased creativity": "Créativité affichée", "Showcased creativity": "Créativité affichée",
"sidebar": "barre latérale", "sidebar": "barre latérale",
@ -416,37 +403,36 @@
"Signing in": "Connexion en cours", "Signing in": "Connexion en cours",
"Source": "Source", "Source": "Source",
"Speech recognition error: {{error}}": "Erreur de reconnaissance vocale : {{error}}", "Speech recognition error: {{error}}": "Erreur de reconnaissance vocale : {{error}}",
"Speech-to-Text Engine": "Moteur de reconnaissance vocale", "Speech-to-Text Engine": "Moteur de Reconnaissance Vocale",
"SpeechRecognition API is not supported in this browser.": "L'API SpeechRecognition n'est pas prise en charge dans ce navigateur.", "SpeechRecognition API is not supported in this browser.": "L'API SpeechRecognition n'est pas prise en charge dans ce navigateur.",
"Stop Sequence": "Séquence d'arrêt", "Stop Sequence": "Séquence d'Arrêt",
"STT Settings": "Paramètres STT", "STT Settings": "Paramètres STT",
"Submit": "Soumettre", "Submit": "Envoyer",
"Subtitle (e.g. about the Roman Empire)": "Sous-titre (par exemple, sur l'empire romain)", "Subtitle (e.g. about the Roman Empire)": "Sous-Titres (p. ex. à propos de l'Empire Romain)",
"Success": "Succès", "Success": "Succès",
"Successfully updated.": "Mis à jour avec succès.", "Successfully updated.": "Mis à jour avec succès.",
"Suggested": "Suggéré", "Suggested": "Suggéré",
"Sync All": "Synchroniser tout",
"System": "Système", "System": "Système",
"System Prompt": "Invite de système", "System Prompt": "Prompt du Système",
"Tags": "Tags", "Tags": "Tags",
"Tell us more:": "Donnez-nous plus:", "Tell us more:": "Dites-nous en plus :",
"Temperature": "Température", "Temperature": "Température",
"Template": "Modèle", "Template": "Modèle",
"Text Completion": "Complétion de texte", "Text Completion": "Complétion de Texte",
"Text-to-Speech Engine": "Moteur de synthèse vocale", "Text-to-Speech Engine": "Moteur de Synthèse Vocale",
"Tfs Z": "Tfs Z", "Tfs Z": "Tfs Z",
"Thanks for your feedback!": "Merci pour votre feedback!", "Thanks for your feedback!": "Merci pour votre avis !",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Le score doit être une valeur comprise entre 0.0 (0%) et 1.0 (100%).", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Le score devrait avoir une valeur entre 0.0 (0%) et 1.0 (100%).",
"Theme": "Thème", "Theme": "Thème",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cela garantit que vos précieuses conversations sont en sécurité dans votre base de données. Merci !", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cela garantit que vos précieuses conversations sont en sécurité dans votre base de données. Merci !",
"This setting does not sync across browsers or devices.": "Ce paramètre ne se synchronise pas entre les navigateurs ou les appareils.", "This setting does not sync across browsers or devices.": "Ce paramètre ne se synchronise pas entre les navigateurs ou les appareils.",
"Thorough explanation": "Explication approfondie", "Thorough explanation": "Explication détaillée",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Conseil : Mettez à jour plusieurs emplacements de variables consécutivement en appuyant sur la touche tab dans l'entrée de chat après chaque remplacement",
"Title": "Titre", "Title": "Titre",
"Title (e.g. Tell me a fun fact)": "Titre (par exemple, Dites-moi un fait amusant)", "Title (e.g. Tell me a fun fact)": "Titre (p. ex. Donne moi un fait amusant)",
"Title Auto-Generation": "Génération automatique de titre", "Title Auto-Generation": "Génération Automatique du Titre",
"Title cannot be an empty string.": "Le titre ne peut pas être une chaîne vide.", "Title cannot be an empty string.": "Le Titre ne peut pas être vide.",
"Title Generation Prompt": "Prompt de génération de titre", "Title Generation Prompt": "Prompt de Génération du Titre",
"to": "à", "to": "à",
"To access the available model names for downloading,": "Pour accéder aux noms de modèles disponibles pour le téléchargement,", "To access the available model names for downloading,": "Pour accéder aux noms de modèles disponibles pour le téléchargement,",
"To access the GGUF models available for downloading,": "Pour accéder aux modèles GGUF disponibles pour le téléchargement,", "To access the GGUF models available for downloading,": "Pour accéder aux modèles GGUF disponibles pour le téléchargement,",
@ -458,11 +444,11 @@
"Top P": "Top P", "Top P": "Top P",
"Trouble accessing Ollama?": "Problèmes d'accès à Ollama ?", "Trouble accessing Ollama?": "Problèmes d'accès à Ollama ?",
"TTS Settings": "Paramètres TTS", "TTS Settings": "Paramètres TTS",
"Type Hugging Face Resolve (Download) URL": "Entrez l'URL de résolution (téléchargement) Hugging Face", "Type Hugging Face Resolve (Download) URL": "Entrez l'URL de Résolution (Téléchargement) Hugging Face",
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh ! Il y a eu un problème de connexion à {{provider}}.", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh ! Il y a eu un problème de connexion à {{provider}}.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Type de fichier inconnu '{{file_type}}', mais accepté et traité comme du texte brut", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Type de Fichier Inconnu '{{file_type}}', mais accepté et traité comme du texte brut",
"Update and Copy Link": "Mettre à jour et copier le lien", "Update and Copy Link": "Mettre à Jour et Copier le Lien",
"Update password": "Mettre à jour le mot de passe", "Update password": "Mettre à Jour le Mot de Passe",
"Upload a GGUF model": "Téléverser un modèle GGUF", "Upload a GGUF model": "Téléverser un modèle GGUF",
"Upload files": "Téléverser des fichiers", "Upload files": "Téléverser des fichiers",
"Upload Progress": "Progression du Téléversement", "Upload Progress": "Progression du Téléversement",
@ -478,26 +464,27 @@
"variable": "variable", "variable": "variable",
"variable to have them replaced with clipboard content.": "variable pour les remplacer par le contenu du presse-papiers.", "variable to have them replaced with clipboard content.": "variable pour les remplacer par le contenu du presse-papiers.",
"Version": "Version", "Version": "Version",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Attention : Si vous mettez à jour ou changez votre modèle d'intégration, vous devrez réimporter tous les documents.", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avertissement : Si vous mettez à jour ou modifier votre modèle d'embedding, vous devrez réimporter tous les documents.",
"Web": "Web", "Web": "Web",
"Web Loader Settings": "Paramètres du chargeur Web", "Web Loader Settings": "Paramètres du Chargeur Web",
"Web Params": "Paramètres Web", "Web Params": "Paramètres Web",
"Webhook URL": "URL Webhook", "Webhook URL": "URL du Webhook",
"WebUI Add-ons": "Add-ons WebUI", "WebUI Add-ons": "Add-ons WebUI",
"WebUI Settings": "Paramètres WebUI", "WebUI Settings": "Paramètres WebUI",
"WebUI will make requests to": "WebUI effectuera des demandes à", "WebUI will make requests to": "WebUI effectuera des demandes à",
"Whats New in": "Quoi de neuf dans", "Whats New in": "Quoi de neuf dans",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Lorsque l'historique est désactivé, les nouveaux chats sur ce navigateur n'apparaîtront pas dans votre historique sur aucun de vos appareils.", "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Lorsque l'historique est désactivé, les nouveaux chats sur ce navigateur n'apparaîtront pas dans votre historique sur aucun de vos appareils.",
"Whisper (Local)": "Whisper (Local)", "Whisper (Local)": "Whisper (Local)",
"Workspace": "Espace de travail", "Workspace": "Espace de Travail",
"Write a prompt suggestion (e.g. Who are you?)": "Écrivez un prompt (e.x. Qui est-tu ?)", "Write a prompt suggestion (e.g. Who are you?)": "Écrivez une suggestion de prompt (e.x. Qui est-tu ?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Ecrivez un résumé en 50 mots [sujet ou mot-clé]", "Write a summary in 50 words that summarizes [topic or keyword].": "Ecrivez un résumé en 50 mots qui résume [sujet ou mot-clé]",
"Yesterday": "hier", "Yesterday": "Hier",
"You": "Vous", "You": "Vous",
"You have no archived conversations.": "Vous n'avez aucune conversation archivée.", "You cannot clone a base model": "Vous ne pouvez pas cloner un modèle de base",
"You have shared this chat": "Vous avez partagé cette conversation.", "You have no archived conversations.": "Vous n'avez pas de conversations archivées",
"You're a helpful assistant.": "Vous êtes un assistant utile", "You have shared this chat": "Vous avez partagé ce chat",
"You're a helpful assistant.": "Vous êtes un assistant utile.",
"You're now logged in.": "Vous êtes maintenant connecté.", "You're now logged in.": "Vous êtes maintenant connecté.",
"Youtube": "Youtube", "Youtube": "Youtube",
"Youtube Loader Settings": "Paramètres du chargeur de Youtube" "Youtube Loader Settings": "Paramètres du Chargeur YouTube"
} }

View File

@ -3,6 +3,8 @@
"(Beta)": "(בטא)", "(Beta)": "(בטא)",
"(e.g. `sh webui.sh --api`)": "(למשל `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(למשל `sh webui.sh --api`)",
"(latest)": "(האחרון)", "(latest)": "(האחרון)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} חושב...", "{{modelName}} is thinking...": "{{modelName}} חושב...",
"{{user}}'s Chats": "צ'אטים של {{user}}", "{{user}}'s Chats": "צ'אטים של {{user}}",
"{{webUIName}} Backend Required": "נדרש Backend של {{webUIName}}", "{{webUIName}} Backend Required": "נדרש Backend של {{webUIName}}",
@ -11,9 +13,8 @@
"Account": "חשבון", "Account": "חשבון",
"Accurate information": "מידע מדויק", "Accurate information": "מידע מדויק",
"Add": "הוסף", "Add": "הוסף",
"Add a model": "הוסף מודל", "Add a model id": "",
"Add a model tag name": "הוסף שם תג למודל", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "הוסף תיאור קצר על מה שהקובץ מודל עושה",
"Add a short title for this prompt": "הוסף כותרת קצרה לפקודה זו", "Add a short title for this prompt": "הוסף כותרת קצרה לפקודה זו",
"Add a tag": "הוסף תג", "Add a tag": "הוסף תג",
"Add custom prompt": "הוסף פקודה מותאמת אישית", "Add custom prompt": "הוסף פקודה מותאמת אישית",
@ -29,6 +30,7 @@
"Admin Panel": "לוח בקרה למנהל", "Admin Panel": "לוח בקרה למנהל",
"Admin Settings": "הגדרות מנהל", "Admin Settings": "הגדרות מנהל",
"Advanced Parameters": "פרמטרים מתקדמים", "Advanced Parameters": "פרמטרים מתקדמים",
"Advanced Params": "",
"all": "הכל", "all": "הכל",
"All Documents": "כל המסמכים", "All Documents": "כל המסמכים",
"All Users": "כל המשתמשים", "All Users": "כל המשתמשים",
@ -43,7 +45,6 @@
"API Key": "מפתח API", "API Key": "מפתח API",
"API Key created.": "מפתח API נוצר.", "API Key created.": "מפתח API נוצר.",
"API keys": "מפתחות API", "API keys": "מפתחות API",
"API RPM": "RPM של API",
"April": "אפריל", "April": "אפריל",
"Archive": "ארכיון", "Archive": "ארכיון",
"Archived Chats": "צ'אטים מאורכבים", "Archived Chats": "צ'אטים מאורכבים",
@ -60,12 +61,12 @@
"available!": "זמין!", "available!": "זמין!",
"Back": "חזור", "Back": "חזור",
"Bad Response": "תגובה שגויה", "Bad Response": "תגובה שגויה",
"Base Model (From)": "",
"before": "לפני", "before": "לפני",
"Being lazy": "להיות עצלן", "Being lazy": "להיות עצלן",
"Builder Mode": "מצב בונה",
"Bypass SSL verification for Websites": "עקוף אימות SSL עבור אתרים", "Bypass SSL verification for Websites": "עקוף אימות SSL עבור אתרים",
"Cancel": "בטל", "Cancel": "בטל",
"Categories": "קטגוריות", "Capabilities": "",
"Change Password": "שנה סיסמה", "Change Password": "שנה סיסמה",
"Chat": "צ'אט", "Chat": "צ'אט",
"Chat Bubble UI": "UI של תיבת הדיבור", "Chat Bubble UI": "UI של תיבת הדיבור",
@ -83,7 +84,6 @@
"Citation": "ציטוט", "Citation": "ציטוט",
"Click here for help.": "לחץ כאן לעזרה.", "Click here for help.": "לחץ כאן לעזרה.",
"Click here to": "לחץ כאן כדי", "Click here to": "לחץ כאן כדי",
"Click here to check other modelfiles.": "לחץ כאן לבדיקת קבצי מודלים אחרים.",
"Click here to select": "לחץ כאן לבחירה", "Click here to select": "לחץ כאן לבחירה",
"Click here to select a csv file.": "לחץ כאן לבחירת קובץ csv.", "Click here to select a csv file.": "לחץ כאן לבחירת קובץ csv.",
"Click here to select documents.": "לחץ כאן לבחירת מסמכים.", "Click here to select documents.": "לחץ כאן לבחירת מסמכים.",
@ -108,7 +108,7 @@
"Copy Link": "העתק קישור", "Copy Link": "העתק קישור",
"Copying to clipboard was successful!": "ההעתקה ללוח הייתה מוצלחת!", "Copying to clipboard was successful!": "ההעתקה ללוח הייתה מוצלחת!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "צור ביטוי תמציתי של 3-5 מילים ככותרת לשאילתה הבאה, תוך שמירה מדויקת על מגבלת 3-5 המילים והימנעות משימוש במילה 'כותרת':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "צור ביטוי תמציתי של 3-5 מילים ככותרת לשאילתה הבאה, תוך שמירה מדויקת על מגבלת 3-5 המילים והימנעות משימוש במילה 'כותרת':",
"Create a modelfile": "צור קובץ מודל", "Create a model": "",
"Create Account": "צור חשבון", "Create Account": "צור חשבון",
"Create new key": "צור מפתח חדש", "Create new key": "צור מפתח חדש",
"Create new secret key": "צור מפתח סודי חדש", "Create new secret key": "צור מפתח סודי חדש",
@ -117,7 +117,7 @@
"Current Model": "המודל הנוכחי", "Current Model": "המודל הנוכחי",
"Current Password": "הסיסמה הנוכחית", "Current Password": "הסיסמה הנוכחית",
"Custom": "מותאם אישית", "Custom": "מותאם אישית",
"Customize Ollama models for a specific purpose": "התאמה אישית של מודלים של Ollama למטרה מסוימת", "Customize models for a specific purpose": "",
"Dark": "כהה", "Dark": "כהה",
"Dashboard": "לוח בקרה", "Dashboard": "לוח בקרה",
"Database": "מסד נתונים", "Database": "מסד נתונים",
@ -132,17 +132,17 @@
"delete": "מחק", "delete": "מחק",
"Delete": "מחק", "Delete": "מחק",
"Delete a model": "מחק מודל", "Delete a model": "מחק מודל",
"Delete All Chats": "",
"Delete chat": "מחק צ'אט", "Delete chat": "מחק צ'אט",
"Delete Chat": "מחק צ'אט", "Delete Chat": "מחק צ'אט",
"Delete Chats": "מחק צ'אטים",
"delete this link": "מחק את הקישור הזה", "delete this link": "מחק את הקישור הזה",
"Delete User": "מחק משתמש", "Delete User": "מחק משתמש",
"Deleted {{deleteModelTag}}": "נמחק {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "נמחק {{deleteModelTag}}",
"Deleted {{tagName}}": "נמחק {{tagName}}", "Deleted {{name}}": "",
"Description": "תיאור", "Description": "תיאור",
"Didn't fully follow instructions": "לא עקב אחרי ההוראות באופן מלא", "Didn't fully follow instructions": "לא עקב אחרי ההוראות באופן מלא",
"Disabled": "מושבת", "Disabled": "מושבת",
"Discover a modelfile": "גלה קובץ מודל", "Discover a model": "",
"Discover a prompt": "גלה פקודה", "Discover a prompt": "גלה פקודה",
"Discover, download, and explore custom prompts": "גלה, הורד, וחקור פקודות מותאמות אישית", "Discover, download, and explore custom prompts": "גלה, הורד, וחקור פקודות מותאמות אישית",
"Discover, download, and explore model presets": "גלה, הורד, וחקור הגדרות מודל מוגדרות מראש", "Discover, download, and explore model presets": "גלה, הורד, וחקור הגדרות מודל מוגדרות מראש",
@ -176,11 +176,6 @@
"Enter Chunk Size": "הזן גודל נתונים", "Enter Chunk Size": "הזן גודל נתונים",
"Enter Image Size (e.g. 512x512)": "הזן גודל תמונה (למשל 512x512)", "Enter Image Size (e.g. 512x512)": "הזן גודל תמונה (למשל 512x512)",
"Enter language codes": "הזן קודי שפה", "Enter language codes": "הזן קודי שפה",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "הזן כתובת URL בסיסית ל-API של LiteLLM (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "הזן מפתח API של LiteLLM (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "הזן RPM של API של LiteLLM (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "הזן מודל LiteLLM (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "הזן מספר מקסימלי של טוקנים (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "הזן תג מודל (למשל {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "הזן תג מודל (למשל {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "הזן מספר שלבים (למשל 50)", "Enter Number of Steps (e.g. 50)": "הזן מספר שלבים (למשל 50)",
"Enter Score": "הזן ציון", "Enter Score": "הזן ציון",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "ייצוא כל הצ'אטים (כל המשתמשים)", "Export All Chats (All Users)": "ייצוא כל הצ'אטים (כל המשתמשים)",
"Export Chats": "ייצוא צ'אטים", "Export Chats": "ייצוא צ'אטים",
"Export Documents Mapping": "ייצוא מיפוי מסמכים", "Export Documents Mapping": "ייצוא מיפוי מסמכים",
"Export Modelfiles": "ייצוא קבצי מודלים", "Export Models": "",
"Export Prompts": "ייצוא פקודות", "Export Prompts": "ייצוא פקודות",
"Failed to create API Key.": "יצירת מפתח API נכשלה.", "Failed to create API Key.": "יצירת מפתח API נכשלה.",
"Failed to read clipboard contents": "קריאת תוכן הלוח נכשלה", "Failed to read clipboard contents": "קריאת תוכן הלוח נכשלה",
@ -209,7 +204,7 @@
"Focus chat input": "מיקוד הקלט לצ'אט", "Focus chat input": "מיקוד הקלט לצ'אט",
"Followed instructions perfectly": "עקב אחר ההוראות במושלמות", "Followed instructions perfectly": "עקב אחר ההוראות במושלמות",
"Format your variables using square brackets like this:": "עצב את המשתנים שלך באמצעות סוגריים מרובעים כך:", "Format your variables using square brackets like this:": "עצב את המשתנים שלך באמצעות סוגריים מרובעים כך:",
"From (Base Model)": "מ (מודל בסיס)", "Frequencey Penalty": "",
"Full Screen Mode": "מצב מסך מלא", "Full Screen Mode": "מצב מסך מלא",
"General": "כללי", "General": "כללי",
"General Settings": "הגדרות כלליות", "General Settings": "הגדרות כלליות",
@ -220,7 +215,6 @@
"Hello, {{name}}": "שלום, {{name}}", "Hello, {{name}}": "שלום, {{name}}",
"Help": "עזרה", "Help": "עזרה",
"Hide": "הסתר", "Hide": "הסתר",
"Hide Additional Params": "הסתר פרמטרים נוספים",
"How can I help you today?": "כיצד אוכל לעזור לך היום?", "How can I help you today?": "כיצד אוכל לעזור לך היום?",
"Hybrid Search": "חיפוש היברידי", "Hybrid Search": "חיפוש היברידי",
"Image Generation (Experimental)": "יצירת תמונות (ניסיוני)", "Image Generation (Experimental)": "יצירת תמונות (ניסיוני)",
@ -229,7 +223,7 @@
"Images": "תמונות", "Images": "תמונות",
"Import Chats": "יבוא צ'אטים", "Import Chats": "יבוא צ'אטים",
"Import Documents Mapping": "יבוא מיפוי מסמכים", "Import Documents Mapping": "יבוא מיפוי מסמכים",
"Import Modelfiles": "יבוא קבצי מודלים", "Import Models": "",
"Import Prompts": "יבוא פקודות", "Import Prompts": "יבוא פקודות",
"Include `--api` flag when running stable-diffusion-webui": "כלול את הדגל `--api` בעת הרצת stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "כלול את הדגל `--api` בעת הרצת stable-diffusion-webui",
"Input commands": "פקודות קלט", "Input commands": "פקודות קלט",
@ -238,6 +232,7 @@
"January": "ינואר", "January": "ינואר",
"join our Discord for help.": "הצטרף ל-Discord שלנו לעזרה.", "join our Discord for help.": "הצטרף ל-Discord שלנו לעזרה.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "יולי", "July": "יולי",
"June": "יוני", "June": "יוני",
"JWT Expiration": "תפוגת JWT", "JWT Expiration": "תפוגת JWT",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "נוצר על ידי קהילת OpenWebUI", "Made by OpenWebUI Community": "נוצר על ידי קהילת OpenWebUI",
"Make sure to enclose them with": "ודא להקיף אותם עם", "Make sure to enclose them with": "ודא להקיף אותם עם",
"Manage LiteLLM Models": "נהל מודלים של LiteLLM",
"Manage Models": "נהל מודלים", "Manage Models": "נהל מודלים",
"Manage Ollama Models": "נהל מודלים של Ollama", "Manage Ollama Models": "נהל מודלים של Ollama",
"March": "מרץ", "March": "מרץ",
"Max Tokens": "מקסימום טוקנים", "Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "ניתן להוריד מקסימום 3 מודלים בו זמנית. אנא נסה שוב מאוחר יותר.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "ניתן להוריד מקסימום 3 מודלים בו זמנית. אנא נסה שוב מאוחר יותר.",
"May": "מאי", "May": "מאי",
"Memories accessible by LLMs will be shown here.": "מזכירים נגישים על ידי LLMs יוצגו כאן.", "Memories accessible by LLMs will be shown here.": "מזכירים נגישים על ידי LLMs יוצגו כאן.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "המודל '{{modelName}}' הורד בהצלחה.", "Model '{{modelName}}' has been successfully downloaded.": "המודל '{{modelName}}' הורד בהצלחה.",
"Model '{{modelTag}}' is already in queue for downloading.": "המודל '{{modelTag}}' כבר בתור להורדה.", "Model '{{modelTag}}' is already in queue for downloading.": "המודל '{{modelTag}}' כבר בתור להורדה.",
"Model {{modelId}} not found": "המודל {{modelId}} לא נמצא", "Model {{modelId}} not found": "המודל {{modelId}} לא נמצא",
"Model {{modelName}} already exists.": "המודל {{modelName}} כבר קיים.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "נתיב מערכת הקבצים של המודל זוהה. נדרש שם קצר של המודל לעדכון, לא ניתן להמשיך.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "נתיב מערכת הקבצים של המודל זוהה. נדרש שם קצר של המודל לעדכון, לא ניתן להמשיך.",
"Model Name": "שם המודל", "Model ID": "",
"Model not selected": "לא נבחר מודל", "Model not selected": "לא נבחר מודל",
"Model Tag Name": "שם תג המודל", "Model Params": "",
"Model Whitelisting": "רישום לבן של מודלים", "Model Whitelisting": "רישום לבן של מודלים",
"Model(s) Whitelisted": "מודלים שנכללו ברשימה הלבנה", "Model(s) Whitelisted": "מודלים שנכללו ברשימה הלבנה",
"Modelfile": "קובץ מודל",
"Modelfile Advanced Settings": "הגדרות מתקדמות לקובץ מודל",
"Modelfile Content": "תוכן קובץ מודל", "Modelfile Content": "תוכן קובץ מודל",
"Modelfiles": "קבצי מודל",
"Models": "מודלים", "Models": "מודלים",
"More": "עוד", "More": "עוד",
"Name": "שם", "Name": "שם",
"Name Tag": "תג שם", "Name Tag": "תג שם",
"Name your modelfile": "תן שם לקובץ המודל שלך", "Name your model": "",
"New Chat": "צ'אט חדש", "New Chat": "צ'אט חדש",
"New Password": "סיסמה חדשה", "New Password": "סיסמה חדשה",
"No results found": "לא נמצאו תוצאות", "No results found": "לא נמצאו תוצאות",
"No source available": "אין מקור זמין", "No source available": "אין מקור זמין",
"Not factually correct": "לא נכון מבחינה עובדתית", "Not factually correct": "לא נכון מבחינה עובדתית",
"Not sure what to add?": "לא בטוח מה להוסיף?",
"Not sure what to write? Switch to": "לא בטוח מה לכתוב? החלף ל",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "הערה: אם תקבע ציון מינימלי, החיפוש יחזיר רק מסמכים עם ציון שגבוה או שווה לציון המינימלי.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "הערה: אם תקבע ציון מינימלי, החיפוש יחזיר רק מסמכים עם ציון שגבוה או שווה לציון המינימלי.",
"Notifications": "התראות", "Notifications": "התראות",
"November": "נובמבר", "November": "נובמבר",
@ -322,7 +311,6 @@
"or": "או", "or": "או",
"Other": "אחר", "Other": "אחר",
"Overview": "סקירה כללית", "Overview": "סקירה כללית",
"Parameters": "פרמטרים",
"Password": "סיסמה", "Password": "סיסמה",
"PDF document (.pdf)": "מסמך PDF (.pdf)", "PDF document (.pdf)": "מסמך PDF (.pdf)",
"PDF Extract Images (OCR)": "חילוץ תמונות מ-PDF (OCR)", "PDF Extract Images (OCR)": "חילוץ תמונות מ-PDF (OCR)",
@ -342,10 +330,8 @@
"Prompts": "פקודות", "Prompts": "פקודות",
"Pull \"{{searchValue}}\" from Ollama.com": "משוך \"{{searchValue}}\" מ-Ollama.com", "Pull \"{{searchValue}}\" from Ollama.com": "משוך \"{{searchValue}}\" מ-Ollama.com",
"Pull a model from Ollama.com": "משוך מודל מ-Ollama.com", "Pull a model from Ollama.com": "משוך מודל מ-Ollama.com",
"Pull Progress": "משוך התקדמות",
"Query Params": "פרמטרי שאילתה", "Query Params": "פרמטרי שאילתה",
"RAG Template": "תבנית RAG", "RAG Template": "תבנית RAG",
"Raw Format": "פורמט גולמי",
"Read Aloud": "קרא בקול", "Read Aloud": "קרא בקול",
"Record voice": "הקלט קול", "Record voice": "הקלט קול",
"Redirecting you to OpenWebUI Community": "מפנה אותך לקהילת OpenWebUI", "Redirecting you to OpenWebUI Community": "מפנה אותך לקהילת OpenWebUI",
@ -356,7 +342,6 @@
"Remove Model": "הסר מודל", "Remove Model": "הסר מודל",
"Rename": "שנה שם", "Rename": "שנה שם",
"Repeat Last N": "חזור על ה-N האחרונים", "Repeat Last N": "חזור על ה-N האחרונים",
"Repeat Penalty": "עונש חזרה",
"Request Mode": "מצב בקשה", "Request Mode": "מצב בקשה",
"Reranking Model": "מודל דירוג מחדש", "Reranking Model": "מודל דירוג מחדש",
"Reranking model disabled": "מודל דירוג מחדש מושבת", "Reranking model disabled": "מודל דירוג מחדש מושבת",
@ -377,14 +362,17 @@
"Search": "חפש", "Search": "חפש",
"Search a model": "חפש מודל", "Search a model": "חפש מודל",
"Search Documents": "חפש מסמכים", "Search Documents": "חפש מסמכים",
"Search Models": "",
"Search Prompts": "חפש פקודות", "Search Prompts": "חפש פקודות",
"See readme.md for instructions": "ראה את readme.md להוראות", "See readme.md for instructions": "ראה את readme.md להוראות",
"See what's new": "ראה מה חדש", "See what's new": "ראה מה חדש",
"Seed": "זרע", "Seed": "זרע",
"Select a base model": "",
"Select a mode": "בחר מצב", "Select a mode": "בחר מצב",
"Select a model": "בחר מודל", "Select a model": "בחר מודל",
"Select an Ollama instance": "בחר מופע של Ollama", "Select an Ollama instance": "בחר מופע של Ollama",
"Select model": "בחר מודל", "Select model": "בחר מודל",
"Selected model(s) do not support image inputs": "",
"Send": "שלח", "Send": "שלח",
"Send a Message": "שלח הודעה", "Send a Message": "שלח הודעה",
"Send message": "שלח הודעה", "Send message": "שלח הודעה",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "שתף לקהילת OpenWebUI", "Share to OpenWebUI Community": "שתף לקהילת OpenWebUI",
"short-summary": "סיכום קצר", "short-summary": "סיכום קצר",
"Show": "הצג", "Show": "הצג",
"Show Additional Params": "הצג פרמטרים נוספים",
"Show shortcuts": "הצג קיצורי דרך", "Show shortcuts": "הצג קיצורי דרך",
"Showcased creativity": "הצגת יצירתיות", "Showcased creativity": "הצגת יצירתיות",
"sidebar": "סרגל צד", "sidebar": "סרגל צד",
@ -425,7 +412,6 @@
"Success": "הצלחה", "Success": "הצלחה",
"Successfully updated.": "עדכון הצלחה.", "Successfully updated.": "עדכון הצלחה.",
"Suggested": "מומלץ", "Suggested": "מומלץ",
"Sync All": "סנכרן הכל",
"System": "מערכת", "System": "מערכת",
"System Prompt": "תגובת מערכת", "System Prompt": "תגובת מערכת",
"Tags": "תגיות", "Tags": "תגיות",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "כתוב סיכום ב-50 מילים שמסכם [נושא או מילת מפתח].", "Write a summary in 50 words that summarizes [topic or keyword].": "כתוב סיכום ב-50 מילים שמסכם [נושא או מילת מפתח].",
"Yesterday": "אתמול", "Yesterday": "אתמול",
"You": "אתה", "You": "אתה",
"You cannot clone a base model": "",
"You have no archived conversations.": "אין לך שיחות בארכיון.", "You have no archived conversations.": "אין לך שיחות בארכיון.",
"You have shared this chat": "שיתפת את השיחה הזו", "You have shared this chat": "שיתפת את השיחה הזו",
"You're a helpful assistant.": "אתה עוזר מועיל.", "You're a helpful assistant.": "אתה עוזר מועיל.",

View File

@ -3,6 +3,8 @@
"(Beta)": "(Beta)", "(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)",
"(latest)": "(latest)", "(latest)": "(latest)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} सोच रहा है...", "{{modelName}} is thinking...": "{{modelName}} सोच रहा है...",
"{{user}}'s Chats": "{{user}} की चैट", "{{user}}'s Chats": "{{user}} की चैट",
"{{webUIName}} Backend Required": "{{webUIName}} बैकएंड आवश्यक", "{{webUIName}} Backend Required": "{{webUIName}} बैकएंड आवश्यक",
@ -11,9 +13,8 @@
"Account": "खाता", "Account": "खाता",
"Accurate information": "सटीक जानकारी", "Accurate information": "सटीक जानकारी",
"Add": "जोड़ें", "Add": "जोड़ें",
"Add a model": "एक मॉडल जोड़ें", "Add a model id": "",
"Add a model tag name": "एक मॉडल टैग नाम जोड़ें", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "यह मॉडलफ़ाइल क्या करती है इसके बारे में एक संक्षिप्त विवरण जोड़ें",
"Add a short title for this prompt": "इस संकेत के लिए एक संक्षिप्त शीर्षक जोड़ें", "Add a short title for this prompt": "इस संकेत के लिए एक संक्षिप्त शीर्षक जोड़ें",
"Add a tag": "एक टैग जोड़े", "Add a tag": "एक टैग जोड़े",
"Add custom prompt": "अनुकूल संकेत जोड़ें", "Add custom prompt": "अनुकूल संकेत जोड़ें",
@ -29,6 +30,7 @@
"Admin Panel": "व्यवस्थापक पैनल", "Admin Panel": "व्यवस्थापक पैनल",
"Admin Settings": "व्यवस्थापक सेटिंग्स", "Admin Settings": "व्यवस्थापक सेटिंग्स",
"Advanced Parameters": "उन्नत पैरामीटर", "Advanced Parameters": "उन्नत पैरामीटर",
"Advanced Params": "",
"all": "सभी", "all": "सभी",
"All Documents": "सभी डॉक्यूमेंट्स", "All Documents": "सभी डॉक्यूमेंट्स",
"All Users": "सभी उपयोगकर्ता", "All Users": "सभी उपयोगकर्ता",
@ -43,7 +45,6 @@
"API Key": "एपीआई कुंजी", "API Key": "एपीआई कुंजी",
"API Key created.": "एपीआई कुंजी बनाई गई", "API Key created.": "एपीआई कुंजी बनाई गई",
"API keys": "एपीआई कुंजियाँ", "API keys": "एपीआई कुंजियाँ",
"API RPM": "एपीआई रीपीएम",
"April": "अप्रैल", "April": "अप्रैल",
"Archive": "पुरालेख", "Archive": "पुरालेख",
"Archived Chats": "संग्रहीत चैट", "Archived Chats": "संग्रहीत चैट",
@ -60,12 +61,12 @@
"available!": "उपलब्ध!", "available!": "उपलब्ध!",
"Back": "पीछे", "Back": "पीछे",
"Bad Response": "ख़राब प्रतिक्रिया", "Bad Response": "ख़राब प्रतिक्रिया",
"Base Model (From)": "",
"before": "पहले", "before": "पहले",
"Being lazy": "आलसी होना", "Being lazy": "आलसी होना",
"Builder Mode": "बिल्डर मोड",
"Bypass SSL verification for Websites": "वेबसाइटों के लिए SSL सुनिश्चिती को छोड़ें", "Bypass SSL verification for Websites": "वेबसाइटों के लिए SSL सुनिश्चिती को छोड़ें",
"Cancel": "रद्द करें", "Cancel": "रद्द करें",
"Categories": "श्रेणियाँ", "Capabilities": "",
"Change Password": "पासवर्ड बदलें", "Change Password": "पासवर्ड बदलें",
"Chat": "चैट करें", "Chat": "चैट करें",
"Chat Bubble UI": "चैट बॉली", "Chat Bubble UI": "चैट बॉली",
@ -83,7 +84,6 @@
"Citation": "उद्धरण", "Citation": "उद्धरण",
"Click here for help.": "सहायता के लिए यहां क्लिक करें।", "Click here for help.": "सहायता के लिए यहां क्लिक करें।",
"Click here to": "यहां क्लिक करें", "Click here to": "यहां क्लिक करें",
"Click here to check other modelfiles.": "अन्य मॉडल फ़ाइलों की जांच के लिए यहां क्लिक करें।",
"Click here to select": "चयन करने के लिए यहां क्लिक करें।", "Click here to select": "चयन करने के लिए यहां क्लिक करें।",
"Click here to select a csv file.": "सीएसवी फ़ाइल का चयन करने के लिए यहां क्लिक करें।", "Click here to select a csv file.": "सीएसवी फ़ाइल का चयन करने के लिए यहां क्लिक करें।",
"Click here to select documents.": "दस्तावेज़ चुनने के लिए यहां क्लिक करें।", "Click here to select documents.": "दस्तावेज़ चुनने के लिए यहां क्लिक करें।",
@ -108,7 +108,7 @@
"Copy Link": "लिंक को कॉपी करें", "Copy Link": "लिंक को कॉपी करें",
"Copying to clipboard was successful!": "क्लिपबोर्ड पर कॉपी बनाना सफल रहा!", "Copying to clipboard was successful!": "क्लिपबोर्ड पर कॉपी बनाना सफल रहा!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "निम्नलिखित क्वेरी के लिए हेडर के रूप में एक संक्षिप्त, 3-5 शब्द वाक्यांश बनाएं, 3-5 शब्द सीमा का सख्ती से पालन करें और 'शीर्षक' शब्द के उपयोग से बचें:", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "निम्नलिखित क्वेरी के लिए हेडर के रूप में एक संक्षिप्त, 3-5 शब्द वाक्यांश बनाएं, 3-5 शब्द सीमा का सख्ती से पालन करें और 'शीर्षक' शब्द के उपयोग से बचें:",
"Create a modelfile": "एक मॉडल फ़ाइल बनाएं", "Create a model": "",
"Create Account": "खाता बनाएं", "Create Account": "खाता बनाएं",
"Create new key": "नया क्रिप्टोग्राफिक क्षेत्र बनाएं", "Create new key": "नया क्रिप्टोग्राफिक क्षेत्र बनाएं",
"Create new secret key": "नया क्रिप्टोग्राफिक क्षेत्र बनाएं", "Create new secret key": "नया क्रिप्टोग्राफिक क्षेत्र बनाएं",
@ -117,7 +117,7 @@
"Current Model": "वर्तमान मॉडल", "Current Model": "वर्तमान मॉडल",
"Current Password": "वर्तमान पासवर्ड", "Current Password": "वर्तमान पासवर्ड",
"Custom": "कस्टम संस्करण", "Custom": "कस्टम संस्करण",
"Customize Ollama models for a specific purpose": "किसी विशिष्ट उद्देश्य के लिए ओलामा मॉडल को अनुकूलित करें", "Customize models for a specific purpose": "",
"Dark": "डार्क", "Dark": "डार्क",
"Dashboard": "डैशबोर्ड", "Dashboard": "डैशबोर्ड",
"Database": "डेटाबेस", "Database": "डेटाबेस",
@ -132,17 +132,17 @@
"delete": "डिलीट", "delete": "डिलीट",
"Delete": "डिलीट", "Delete": "डिलीट",
"Delete a model": "एक मॉडल हटाएँ", "Delete a model": "एक मॉडल हटाएँ",
"Delete All Chats": "",
"Delete chat": "चैट हटाएं", "Delete chat": "चैट हटाएं",
"Delete Chat": "चैट हटाएं", "Delete Chat": "चैट हटाएं",
"Delete Chats": "चैट हटाएं",
"delete this link": "इस लिंक को हटाएं", "delete this link": "इस लिंक को हटाएं",
"Delete User": "उपभोक्ता मिटायें", "Delete User": "उपभोक्ता मिटायें",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} हटा दिया गया", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} हटा दिया गया",
"Deleted {{tagName}}": "{{tagName}} हटा दिया गया", "Deleted {{name}}": "",
"Description": "विवरण", "Description": "विवरण",
"Didn't fully follow instructions": "निर्देशों का पूरी तरह से पालन नहीं किया", "Didn't fully follow instructions": "निर्देशों का पूरी तरह से पालन नहीं किया",
"Disabled": "अक्षरण", "Disabled": "अक्षरण",
"Discover a modelfile": "मॉडल फ़ाइल खोजें", "Discover a model": "",
"Discover a prompt": "प्रॉम्प्ट खोजें", "Discover a prompt": "प्रॉम्प्ट खोजें",
"Discover, download, and explore custom prompts": "कस्टम प्रॉम्प्ट को खोजें, डाउनलोड करें और एक्सप्लोर करें", "Discover, download, and explore custom prompts": "कस्टम प्रॉम्प्ट को खोजें, डाउनलोड करें और एक्सप्लोर करें",
"Discover, download, and explore model presets": "मॉडल प्रीसेट खोजें, डाउनलोड करें और एक्सप्लोर करें", "Discover, download, and explore model presets": "मॉडल प्रीसेट खोजें, डाउनलोड करें और एक्सप्लोर करें",
@ -176,11 +176,6 @@
"Enter Chunk Size": "खंड आकार दर्ज करें", "Enter Chunk Size": "खंड आकार दर्ज करें",
"Enter Image Size (e.g. 512x512)": "छवि का आकार दर्ज करें (उदा. 512x512)", "Enter Image Size (e.g. 512x512)": "छवि का आकार दर्ज करें (उदा. 512x512)",
"Enter language codes": "भाषा कोड दर्ज करें", "Enter language codes": "भाषा कोड दर्ज करें",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "LiteLLM API Base URL दर्ज करें (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "LiteLLM API Key दर्ज करें (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM दर्ज करें (litellm_params.rpm) ",
"Enter LiteLLM Model (litellm_params.model)": "LiteLLM Model दर्ज करें (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Max Tokens दर्ज करें (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Model tag दर्ज करें (उदा. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Model tag दर्ज करें (उदा. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "चरणों की संख्या दर्ज करें (उदा. 50)", "Enter Number of Steps (e.g. 50)": "चरणों की संख्या दर्ज करें (उदा. 50)",
"Enter Score": "स्कोर दर्ज करें", "Enter Score": "स्कोर दर्ज करें",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "सभी चैट निर्यात करें (सभी उपयोगकर्ताओं की)", "Export All Chats (All Users)": "सभी चैट निर्यात करें (सभी उपयोगकर्ताओं की)",
"Export Chats": "चैट निर्यात करें", "Export Chats": "चैट निर्यात करें",
"Export Documents Mapping": "निर्यात दस्तावेज़ मैपिंग", "Export Documents Mapping": "निर्यात दस्तावेज़ मैपिंग",
"Export Modelfiles": "मॉडल फ़ाइलें निर्यात करें", "Export Models": "",
"Export Prompts": "प्रॉम्प्ट निर्यात करें", "Export Prompts": "प्रॉम्प्ट निर्यात करें",
"Failed to create API Key.": "एपीआई कुंजी बनाने में विफल.", "Failed to create API Key.": "एपीआई कुंजी बनाने में विफल.",
"Failed to read clipboard contents": "क्लिपबोर्ड सामग्री पढ़ने में विफल", "Failed to read clipboard contents": "क्लिपबोर्ड सामग्री पढ़ने में विफल",
@ -209,7 +204,7 @@
"Focus chat input": "चैट इनपुट पर फ़ोकस करें", "Focus chat input": "चैट इनपुट पर फ़ोकस करें",
"Followed instructions perfectly": "निर्देशों का पूर्णतः पालन किया", "Followed instructions perfectly": "निर्देशों का पूर्णतः पालन किया",
"Format your variables using square brackets like this:": "वर्गाकार कोष्ठकों का उपयोग करके अपने चरों को इस प्रकार प्रारूपित करें :", "Format your variables using square brackets like this:": "वर्गाकार कोष्ठकों का उपयोग करके अपने चरों को इस प्रकार प्रारूपित करें :",
"From (Base Model)": "(बेस मॉडल) से ", "Frequencey Penalty": "",
"Full Screen Mode": "पूर्ण स्क्रीन मोड", "Full Screen Mode": "पूर्ण स्क्रीन मोड",
"General": "सामान्य", "General": "सामान्य",
"General Settings": "सामान्य सेटिंग्स", "General Settings": "सामान्य सेटिंग्स",
@ -220,7 +215,6 @@
"Hello, {{name}}": "नमस्ते, {{name}}", "Hello, {{name}}": "नमस्ते, {{name}}",
"Help": "मदद", "Help": "मदद",
"Hide": "छुपाएं", "Hide": "छुपाएं",
"Hide Additional Params": "अतिरिक्त पैरामीटर छिपाएँ",
"How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?", "How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?",
"Hybrid Search": "हाइब्रिड खोज", "Hybrid Search": "हाइब्रिड खोज",
"Image Generation (Experimental)": "छवि निर्माण (प्रायोगिक)", "Image Generation (Experimental)": "छवि निर्माण (प्रायोगिक)",
@ -229,7 +223,7 @@
"Images": "इमेजिस", "Images": "इमेजिस",
"Import Chats": "चैट आयात करें", "Import Chats": "चैट आयात करें",
"Import Documents Mapping": "दस्तावेज़ मैपिंग आयात करें", "Import Documents Mapping": "दस्तावेज़ मैपिंग आयात करें",
"Import Modelfiles": "मॉडल फ़ाइलें आयात करें", "Import Models": "",
"Import Prompts": "प्रॉम्प्ट आयात करें", "Import Prompts": "प्रॉम्प्ट आयात करें",
"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui चलाते समय `--api` ध्वज शामिल करें", "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui चलाते समय `--api` ध्वज शामिल करें",
"Input commands": "इनपुट क命", "Input commands": "इनपुट क命",
@ -238,6 +232,7 @@
"January": "जनवरी", "January": "जनवरी",
"join our Discord for help.": "मदद के लिए हमारे डिस्कोर्ड में शामिल हों।", "join our Discord for help.": "मदद के लिए हमारे डिस्कोर्ड में शामिल हों।",
"JSON": "ज्ञान प्रकार", "JSON": "ज्ञान प्रकार",
"JSON Preview": "",
"July": "जुलाई", "July": "जुलाई",
"June": "जुन", "June": "जुन",
"JWT Expiration": "JWT समाप्ति", "JWT Expiration": "JWT समाप्ति",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "OpenWebUI समुदाय द्वारा निर्मित", "Made by OpenWebUI Community": "OpenWebUI समुदाय द्वारा निर्मित",
"Make sure to enclose them with": "उन्हें संलग्न करना सुनिश्चित करें", "Make sure to enclose them with": "उन्हें संलग्न करना सुनिश्चित करें",
"Manage LiteLLM Models": "LiteLLM मॉडल प्रबंधित करें",
"Manage Models": "मॉडल प्रबंधित करें", "Manage Models": "मॉडल प्रबंधित करें",
"Manage Ollama Models": "Ollama मॉडल प्रबंधित करें", "Manage Ollama Models": "Ollama मॉडल प्रबंधित करें",
"March": "मार्च", "March": "मार्च",
"Max Tokens": "अधिकतम टोकन", "Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "अधिकतम 3 मॉडल एक साथ डाउनलोड किये जा सकते हैं। कृपया बाद में पुन: प्रयास करें।", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "अधिकतम 3 मॉडल एक साथ डाउनलोड किये जा सकते हैं। कृपया बाद में पुन: प्रयास करें।",
"May": "मेई", "May": "मेई",
"Memories accessible by LLMs will be shown here.": "एलएलएम द्वारा सुलभ यादें यहां दिखाई जाएंगी।", "Memories accessible by LLMs will be shown here.": "एलएलएम द्वारा सुलभ यादें यहां दिखाई जाएंगी।",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "मॉडल '{{modelName}}' सफलतापूर्वक डाउनलोड हो गया है।", "Model '{{modelName}}' has been successfully downloaded.": "मॉडल '{{modelName}}' सफलतापूर्वक डाउनलोड हो गया है।",
"Model '{{modelTag}}' is already in queue for downloading.": "मॉडल '{{modelTag}}' पहले से ही डाउनलोड करने के लिए कतार में है।", "Model '{{modelTag}}' is already in queue for downloading.": "मॉडल '{{modelTag}}' पहले से ही डाउनलोड करने के लिए कतार में है।",
"Model {{modelId}} not found": "मॉडल {{modelId}} नहीं मिला", "Model {{modelId}} not found": "मॉडल {{modelId}} नहीं मिला",
"Model {{modelName}} already exists.": "मॉडल {{modelName}} पहले से मौजूद है।", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "मॉडल फ़ाइल सिस्टम पथ का पता चला. अद्यतन के लिए मॉडल संक्षिप्त नाम आवश्यक है, जारी नहीं रखा जा सकता।", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "मॉडल फ़ाइल सिस्टम पथ का पता चला. अद्यतन के लिए मॉडल संक्षिप्त नाम आवश्यक है, जारी नहीं रखा जा सकता।",
"Model Name": "मॉडल नाम", "Model ID": "",
"Model not selected": "मॉडल चयनित नहीं है", "Model not selected": "मॉडल चयनित नहीं है",
"Model Tag Name": "मॉडल टैग नाम", "Model Params": "",
"Model Whitelisting": "मॉडल श्वेतसूचीकरण करें", "Model Whitelisting": "मॉडल श्वेतसूचीकरण करें",
"Model(s) Whitelisted": "मॉडल श्वेतसूची में है", "Model(s) Whitelisted": "मॉडल श्वेतसूची में है",
"Modelfile": "मॉडल फ़ाइल",
"Modelfile Advanced Settings": "मॉडल फ़ाइल उन्नत सेटिंग्स",
"Modelfile Content": "मॉडल फ़ाइल सामग्री", "Modelfile Content": "मॉडल फ़ाइल सामग्री",
"Modelfiles": "मॉडल फ़ाइलें",
"Models": "सभी मॉडल", "Models": "सभी मॉडल",
"More": "और..", "More": "और..",
"Name": "नाम", "Name": "नाम",
"Name Tag": "नाम टैग", "Name Tag": "नाम टैग",
"Name your modelfile": "अपनी मॉडलफ़ाइल को नाम दें", "Name your model": "",
"New Chat": "नई चैट", "New Chat": "नई चैट",
"New Password": "नया पासवर्ड", "New Password": "नया पासवर्ड",
"No results found": "कोई परिणाम नहीं मिला", "No results found": "कोई परिणाम नहीं मिला",
"No source available": "कोई स्रोत उपलब्ध नहीं है", "No source available": "कोई स्रोत उपलब्ध नहीं है",
"Not factually correct": "तथ्यात्मक रूप से सही नहीं है", "Not factually correct": "तथ्यात्मक रूप से सही नहीं है",
"Not sure what to add?": "निश्चित नहीं कि क्या जोड़ें?",
"Not sure what to write? Switch to": "मैं आश्वस्त नहीं हूं कि क्या लिखना है? स्विच करें",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "ध्यान दें: यदि आप न्यूनतम स्कोर निर्धारित करते हैं, तो खोज केवल न्यूनतम स्कोर से अधिक या उसके बराबर स्कोर वाले दस्तावेज़ वापस लाएगी।", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "ध्यान दें: यदि आप न्यूनतम स्कोर निर्धारित करते हैं, तो खोज केवल न्यूनतम स्कोर से अधिक या उसके बराबर स्कोर वाले दस्तावेज़ वापस लाएगी।",
"Notifications": "सूचनाएं", "Notifications": "सूचनाएं",
"November": "नवंबर", "November": "नवंबर",
@ -322,7 +311,6 @@
"or": "या", "or": "या",
"Other": "अन्य", "Other": "अन्य",
"Overview": "अवलोकन", "Overview": "अवलोकन",
"Parameters": "पैरामीटर",
"Password": "पासवर्ड", "Password": "पासवर्ड",
"PDF document (.pdf)": "PDF दस्तावेज़ (.pdf)", "PDF document (.pdf)": "PDF दस्तावेज़ (.pdf)",
"PDF Extract Images (OCR)": "PDF छवियाँ निकालें (OCR)", "PDF Extract Images (OCR)": "PDF छवियाँ निकालें (OCR)",
@ -342,10 +330,8 @@
"Prompts": "प्रॉम्प्ट", "Prompts": "प्रॉम्प्ट",
"Pull \"{{searchValue}}\" from Ollama.com": "\"{{searchValue}}\" को Ollama.com से खींचें", "Pull \"{{searchValue}}\" from Ollama.com": "\"{{searchValue}}\" को Ollama.com से खींचें",
"Pull a model from Ollama.com": "Ollama.com से एक मॉडल खींचें", "Pull a model from Ollama.com": "Ollama.com से एक मॉडल खींचें",
"Pull Progress": "प्रगति खींचें",
"Query Params": "क्वेरी पैरामीटर", "Query Params": "क्वेरी पैरामीटर",
"RAG Template": "RAG टेम्पलेट", "RAG Template": "RAG टेम्पलेट",
"Raw Format": "कच्चा प्रारूप",
"Read Aloud": "जोर से पढ़ें", "Read Aloud": "जोर से पढ़ें",
"Record voice": "आवाज रिकॉर्ड करना", "Record voice": "आवाज रिकॉर्ड करना",
"Redirecting you to OpenWebUI Community": "आपको OpenWebUI समुदाय पर पुनर्निर्देशित किया जा रहा है", "Redirecting you to OpenWebUI Community": "आपको OpenWebUI समुदाय पर पुनर्निर्देशित किया जा रहा है",
@ -356,7 +342,6 @@
"Remove Model": "मोडेल हटाएँ", "Remove Model": "मोडेल हटाएँ",
"Rename": "नाम बदलें", "Rename": "नाम बदलें",
"Repeat Last N": "अंतिम N दोहराएँ", "Repeat Last N": "अंतिम N दोहराएँ",
"Repeat Penalty": "पुन: दंड",
"Request Mode": "अनुरोध मोड", "Request Mode": "अनुरोध मोड",
"Reranking Model": "रीरैकिंग मोड", "Reranking Model": "रीरैकिंग मोड",
"Reranking model disabled": "पुनर्रैंकिंग मॉडल अक्षम किया गया", "Reranking model disabled": "पुनर्रैंकिंग मॉडल अक्षम किया गया",
@ -377,14 +362,17 @@
"Search": "खोजें", "Search": "खोजें",
"Search a model": "एक मॉडल खोजें", "Search a model": "एक मॉडल खोजें",
"Search Documents": "दस्तावेज़ खोजें", "Search Documents": "दस्तावेज़ खोजें",
"Search Models": "",
"Search Prompts": "प्रॉम्प्ट खोजें", "Search Prompts": "प्रॉम्प्ट खोजें",
"See readme.md for instructions": "निर्देशों के लिए readme.md देखें", "See readme.md for instructions": "निर्देशों के लिए readme.md देखें",
"See what's new": "देखें, क्या नया है", "See what's new": "देखें, क्या नया है",
"Seed": "सीड्\u200c", "Seed": "सीड्\u200c",
"Select a base model": "",
"Select a mode": "एक मोड चुनें", "Select a mode": "एक मोड चुनें",
"Select a model": "एक मॉडल चुनें", "Select a model": "एक मॉडल चुनें",
"Select an Ollama instance": "एक Ollama Instance चुनें", "Select an Ollama instance": "एक Ollama Instance चुनें",
"Select model": "मॉडल चुनें", "Select model": "मॉडल चुनें",
"Selected model(s) do not support image inputs": "",
"Send": "भेज", "Send": "भेज",
"Send a Message": "एक संदेश भेजो", "Send a Message": "एक संदेश भेजो",
"Send message": "मेसेज भेजें", "Send message": "मेसेज भेजें",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "OpenWebUI समुदाय में साझा करें", "Share to OpenWebUI Community": "OpenWebUI समुदाय में साझा करें",
"short-summary": "संक्षिप्त सारांश", "short-summary": "संक्षिप्त सारांश",
"Show": "दिखाओ", "Show": "दिखाओ",
"Show Additional Params": "अतिरिक्त पैरामीटर दिखाएँ",
"Show shortcuts": "शॉर्टकट दिखाएँ", "Show shortcuts": "शॉर्टकट दिखाएँ",
"Showcased creativity": "रचनात्मकता का प्रदर्शन किया", "Showcased creativity": "रचनात्मकता का प्रदर्शन किया",
"sidebar": "साइड बार", "sidebar": "साइड बार",
@ -425,7 +412,6 @@
"Success": "संपन्न", "Success": "संपन्न",
"Successfully updated.": "सफलतापूर्वक उत्परिवर्तित।", "Successfully updated.": "सफलतापूर्वक उत्परिवर्तित।",
"Suggested": "सुझावी", "Suggested": "सुझावी",
"Sync All": "सभी को सिंक करें",
"System": "सिस्टम", "System": "सिस्टम",
"System Prompt": "सिस्टम प्रॉम्प्ट", "System Prompt": "सिस्टम प्रॉम्प्ट",
"Tags": "टैग", "Tags": "टैग",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "50 शब्दों में एक सारांश लिखें जो [विषय या कीवर्ड] का सारांश प्रस्तुत करता हो।", "Write a summary in 50 words that summarizes [topic or keyword].": "50 शब्दों में एक सारांश लिखें जो [विषय या कीवर्ड] का सारांश प्रस्तुत करता हो।",
"Yesterday": "कल", "Yesterday": "कल",
"You": "आप", "You": "आप",
"You cannot clone a base model": "",
"You have no archived conversations.": "आपको कोई अंकित चैट नहीं है।", "You have no archived conversations.": "आपको कोई अंकित चैट नहीं है।",
"You have shared this chat": "आपने इस चैट को शेयर किया है", "You have shared this chat": "आपने इस चैट को शेयर किया है",
"You're a helpful assistant.": "आप एक सहायक सहायक हैं", "You're a helpful assistant.": "आप एक सहायक सहायक हैं",

View File

@ -3,6 +3,8 @@
"(Beta)": "(Beta)", "(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(npr. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(npr. `sh webui.sh --api`)",
"(latest)": "(najnovije)", "(latest)": "(najnovije)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} razmišlja...", "{{modelName}} is thinking...": "{{modelName}} razmišlja...",
"{{user}}'s Chats": "Razgovori korisnika {{user}}", "{{user}}'s Chats": "Razgovori korisnika {{user}}",
"{{webUIName}} Backend Required": "{{webUIName}} Backend je potreban", "{{webUIName}} Backend Required": "{{webUIName}} Backend je potreban",
@ -11,9 +13,8 @@
"Account": "Račun", "Account": "Račun",
"Accurate information": "Točne informacije", "Accurate information": "Točne informacije",
"Add": "Dodaj", "Add": "Dodaj",
"Add a model": "Dodaj model", "Add a model id": "",
"Add a model tag name": "Dodaj oznaku modela", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "Dodajte kratak opis što ova datoteka modela radi",
"Add a short title for this prompt": "Dodajte kratki naslov za ovaj prompt", "Add a short title for this prompt": "Dodajte kratki naslov za ovaj prompt",
"Add a tag": "Dodaj oznaku", "Add a tag": "Dodaj oznaku",
"Add custom prompt": "Dodaj prilagođeni prompt", "Add custom prompt": "Dodaj prilagođeni prompt",
@ -29,6 +30,7 @@
"Admin Panel": "Administratorska ploča", "Admin Panel": "Administratorska ploča",
"Admin Settings": "Administratorske postavke", "Admin Settings": "Administratorske postavke",
"Advanced Parameters": "Napredni parametri", "Advanced Parameters": "Napredni parametri",
"Advanced Params": "",
"all": "sve", "all": "sve",
"All Documents": "Svi dokumenti", "All Documents": "Svi dokumenti",
"All Users": "Svi korisnici", "All Users": "Svi korisnici",
@ -43,7 +45,6 @@
"API Key": "API ključ", "API Key": "API ključ",
"API Key created.": "API ključ je stvoren.", "API Key created.": "API ključ je stvoren.",
"API keys": "API ključevi", "API keys": "API ključevi",
"API RPM": "API RPM",
"April": "Travanj", "April": "Travanj",
"Archive": "Arhiva", "Archive": "Arhiva",
"Archived Chats": "Arhivirani razgovori", "Archived Chats": "Arhivirani razgovori",
@ -60,12 +61,12 @@
"available!": "dostupno!", "available!": "dostupno!",
"Back": "Natrag", "Back": "Natrag",
"Bad Response": "Loš odgovor", "Bad Response": "Loš odgovor",
"Base Model (From)": "",
"before": "prije", "before": "prije",
"Being lazy": "Biti lijen", "Being lazy": "Biti lijen",
"Builder Mode": "Način graditelja",
"Bypass SSL verification for Websites": "Zaobiđi SSL provjeru za web stranice", "Bypass SSL verification for Websites": "Zaobiđi SSL provjeru za web stranice",
"Cancel": "Otkaži", "Cancel": "Otkaži",
"Categories": "Kategorije", "Capabilities": "",
"Change Password": "Promijeni lozinku", "Change Password": "Promijeni lozinku",
"Chat": "Razgovor", "Chat": "Razgovor",
"Chat Bubble UI": "Razgovor - Bubble UI", "Chat Bubble UI": "Razgovor - Bubble UI",
@ -83,7 +84,6 @@
"Citation": "Citiranje", "Citation": "Citiranje",
"Click here for help.": "Kliknite ovdje za pomoć.", "Click here for help.": "Kliknite ovdje za pomoć.",
"Click here to": "Kliknite ovdje za", "Click here to": "Kliknite ovdje za",
"Click here to check other modelfiles.": "Kliknite ovdje da provjerite druge datoteke modela.",
"Click here to select": "Kliknite ovdje za odabir", "Click here to select": "Kliknite ovdje za odabir",
"Click here to select a csv file.": "Kliknite ovdje da odaberete csv datoteku.", "Click here to select a csv file.": "Kliknite ovdje da odaberete csv datoteku.",
"Click here to select documents.": "Kliknite ovdje da odaberete dokumente.", "Click here to select documents.": "Kliknite ovdje da odaberete dokumente.",
@ -108,7 +108,7 @@
"Copy Link": "Kopiraj vezu", "Copy Link": "Kopiraj vezu",
"Copying to clipboard was successful!": "Kopiranje u međuspremnik je uspješno!", "Copying to clipboard was successful!": "Kopiranje u međuspremnik je uspješno!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Stvorite sažetu frazu od 3-5 riječi kao naslov za sljedeći upit, strogo se pridržavajući ograničenja od 3-5 riječi i izbjegavajući upotrebu riječi 'naslov':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Stvorite sažetu frazu od 3-5 riječi kao naslov za sljedeći upit, strogo se pridržavajući ograničenja od 3-5 riječi i izbjegavajući upotrebu riječi 'naslov':",
"Create a modelfile": "Stvorite datoteku modela", "Create a model": "",
"Create Account": "Stvori račun", "Create Account": "Stvori račun",
"Create new key": "Stvori novi ključ", "Create new key": "Stvori novi ključ",
"Create new secret key": "Stvori novi tajni ključ", "Create new secret key": "Stvori novi tajni ključ",
@ -117,7 +117,7 @@
"Current Model": "Trenutni model", "Current Model": "Trenutni model",
"Current Password": "Trenutna lozinka", "Current Password": "Trenutna lozinka",
"Custom": "Prilagođeno", "Custom": "Prilagođeno",
"Customize Ollama models for a specific purpose": "Prilagodite Ollama modele za specifičnu svrhu", "Customize models for a specific purpose": "",
"Dark": "Tamno", "Dark": "Tamno",
"Dashboard": "Nadzorna ploča", "Dashboard": "Nadzorna ploča",
"Database": "Baza podataka", "Database": "Baza podataka",
@ -132,17 +132,17 @@
"delete": "izbriši", "delete": "izbriši",
"Delete": "Izbriši", "Delete": "Izbriši",
"Delete a model": "Izbriši model", "Delete a model": "Izbriši model",
"Delete All Chats": "",
"Delete chat": "Izbriši razgovor", "Delete chat": "Izbriši razgovor",
"Delete Chat": "Izbriši razgovor", "Delete Chat": "Izbriši razgovor",
"Delete Chats": "Izbriši razgovore",
"delete this link": "izbriši ovu vezu", "delete this link": "izbriši ovu vezu",
"Delete User": "Izbriši korisnika", "Delete User": "Izbriši korisnika",
"Deleted {{deleteModelTag}}": "Izbrisan {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "Izbrisan {{deleteModelTag}}",
"Deleted {{tagName}}": "Izbrisan {{tagName}}", "Deleted {{name}}": "",
"Description": "Opis", "Description": "Opis",
"Didn't fully follow instructions": "Nije u potpunosti slijedio upute", "Didn't fully follow instructions": "Nije u potpunosti slijedio upute",
"Disabled": "Onemogućeno", "Disabled": "Onemogućeno",
"Discover a modelfile": "Otkrijte datoteku modela", "Discover a model": "",
"Discover a prompt": "Otkrijte prompt", "Discover a prompt": "Otkrijte prompt",
"Discover, download, and explore custom prompts": "Otkrijte, preuzmite i istražite prilagođene prompte", "Discover, download, and explore custom prompts": "Otkrijte, preuzmite i istražite prilagođene prompte",
"Discover, download, and explore model presets": "Otkrijte, preuzmite i istražite unaprijed postavljene modele", "Discover, download, and explore model presets": "Otkrijte, preuzmite i istražite unaprijed postavljene modele",
@ -176,11 +176,6 @@
"Enter Chunk Size": "Unesite veličinu dijela", "Enter Chunk Size": "Unesite veličinu dijela",
"Enter Image Size (e.g. 512x512)": "Unesite veličinu slike (npr. 512x512)", "Enter Image Size (e.g. 512x512)": "Unesite veličinu slike (npr. 512x512)",
"Enter language codes": "Unesite kodove jezika", "Enter language codes": "Unesite kodove jezika",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Unesite osnovni URL LiteLLM API-ja (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Unesite ključ LiteLLM API-ja (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Unesite LiteLLM API RPM (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Unesite LiteLLM model (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Unesite maksimalan broj tokena (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Unesite oznaku modela (npr. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Unesite oznaku modela (npr. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Unesite broj koraka (npr. 50)", "Enter Number of Steps (e.g. 50)": "Unesite broj koraka (npr. 50)",
"Enter Score": "Unesite ocjenu", "Enter Score": "Unesite ocjenu",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "Izvoz svih razgovora (svi korisnici)", "Export All Chats (All Users)": "Izvoz svih razgovora (svi korisnici)",
"Export Chats": "Izvoz razgovora", "Export Chats": "Izvoz razgovora",
"Export Documents Mapping": "Izvoz mapiranja dokumenata", "Export Documents Mapping": "Izvoz mapiranja dokumenata",
"Export Modelfiles": "Izvoz datoteka modela", "Export Models": "",
"Export Prompts": "Izvoz prompta", "Export Prompts": "Izvoz prompta",
"Failed to create API Key.": "Neuspješno stvaranje API ključa.", "Failed to create API Key.": "Neuspješno stvaranje API ključa.",
"Failed to read clipboard contents": "Neuspješno čitanje sadržaja međuspremnika", "Failed to read clipboard contents": "Neuspješno čitanje sadržaja međuspremnika",
@ -209,7 +204,7 @@
"Focus chat input": "Fokusiraj unos razgovora", "Focus chat input": "Fokusiraj unos razgovora",
"Followed instructions perfectly": "Savršeno slijedio upute", "Followed instructions perfectly": "Savršeno slijedio upute",
"Format your variables using square brackets like this:": "Formatirajte svoje varijable pomoću uglatih zagrada ovako:", "Format your variables using square brackets like this:": "Formatirajte svoje varijable pomoću uglatih zagrada ovako:",
"From (Base Model)": "Od (osnovni model)", "Frequencey Penalty": "",
"Full Screen Mode": "Način cijelog zaslona", "Full Screen Mode": "Način cijelog zaslona",
"General": "Općenito", "General": "Općenito",
"General Settings": "Opće postavke", "General Settings": "Opće postavke",
@ -220,7 +215,6 @@
"Hello, {{name}}": "Bok, {{name}}", "Hello, {{name}}": "Bok, {{name}}",
"Help": "Pomoć", "Help": "Pomoć",
"Hide": "Sakrij", "Hide": "Sakrij",
"Hide Additional Params": "Sakrij dodatne parametre",
"How can I help you today?": "Kako vam mogu pomoći danas?", "How can I help you today?": "Kako vam mogu pomoći danas?",
"Hybrid Search": "Hibridna pretraga", "Hybrid Search": "Hibridna pretraga",
"Image Generation (Experimental)": "Generiranje slika (eksperimentalno)", "Image Generation (Experimental)": "Generiranje slika (eksperimentalno)",
@ -229,7 +223,7 @@
"Images": "Slike", "Images": "Slike",
"Import Chats": "Uvoz razgovora", "Import Chats": "Uvoz razgovora",
"Import Documents Mapping": "Uvoz mapiranja dokumenata", "Import Documents Mapping": "Uvoz mapiranja dokumenata",
"Import Modelfiles": "Uvoz datoteka modela", "Import Models": "",
"Import Prompts": "Uvoz prompta", "Import Prompts": "Uvoz prompta",
"Include `--api` flag when running stable-diffusion-webui": "Uključite zastavicu `--api` prilikom pokretanja stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Uključite zastavicu `--api` prilikom pokretanja stable-diffusion-webui",
"Input commands": "Unos naredbi", "Input commands": "Unos naredbi",
@ -238,6 +232,7 @@
"January": "Siječanj", "January": "Siječanj",
"join our Discord for help.": "pridružite se našem Discordu za pomoć.", "join our Discord for help.": "pridružite se našem Discordu za pomoć.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "Srpanj", "July": "Srpanj",
"June": "Lipanj", "June": "Lipanj",
"JWT Expiration": "Isticanje JWT-a", "JWT Expiration": "Isticanje JWT-a",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "Izradio OpenWebUI Community", "Made by OpenWebUI Community": "Izradio OpenWebUI Community",
"Make sure to enclose them with": "Provjerite da ih zatvorite s", "Make sure to enclose them with": "Provjerite da ih zatvorite s",
"Manage LiteLLM Models": "Upravljajte LiteLLM modelima",
"Manage Models": "Upravljanje modelima", "Manage Models": "Upravljanje modelima",
"Manage Ollama Models": "Upravljanje Ollama modelima", "Manage Ollama Models": "Upravljanje Ollama modelima",
"March": "Ožujak", "March": "Ožujak",
"Max Tokens": "Maksimalni tokeni", "Max Tokens (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.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimalno 3 modela se mogu preuzeti istovremeno. Pokušajte ponovo kasnije.",
"May": "Svibanj", "May": "Svibanj",
"Memories accessible by LLMs will be shown here.": "Ovdje će biti prikazana memorija kojoj mogu pristupiti LLM-ovi.", "Memories accessible by LLMs will be shown here.": "Ovdje će biti prikazana memorija kojoj mogu pristupiti LLM-ovi.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' je uspješno preuzet.", "Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' je uspješno preuzet.",
"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' je već u redu za preuzimanje.", "Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' je već u redu za preuzimanje.",
"Model {{modelId}} not found": "Model {{modelId}} nije pronađen", "Model {{modelId}} not found": "Model {{modelId}} nije pronađen",
"Model {{modelName}} already exists.": "Model {{modelName}} već postoji.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Otkriven put datotečnog sustava modela. Kratko ime modela je potrebno za ažuriranje, nije moguće nastaviti.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Otkriven put datotečnog sustava modela. Kratko ime modela je potrebno za ažuriranje, nije moguće nastaviti.",
"Model Name": "Naziv modela", "Model ID": "",
"Model not selected": "Model nije odabran", "Model not selected": "Model nije odabran",
"Model Tag Name": "Naziv oznake modela", "Model Params": "",
"Model Whitelisting": "Bijela lista modela", "Model Whitelisting": "Bijela lista modela",
"Model(s) Whitelisted": "Model(i) na bijeloj listi", "Model(s) Whitelisted": "Model(i) na bijeloj listi",
"Modelfile": "Datoteka modela",
"Modelfile Advanced Settings": "Napredne postavke datoteke modela",
"Modelfile Content": "Sadržaj datoteke modela", "Modelfile Content": "Sadržaj datoteke modela",
"Modelfiles": "Datoteke modela",
"Models": "Modeli", "Models": "Modeli",
"More": "Više", "More": "Više",
"Name": "Ime", "Name": "Ime",
"Name Tag": "Naziv oznake", "Name Tag": "Naziv oznake",
"Name your modelfile": "Nazovite svoju datoteku modela", "Name your model": "",
"New Chat": "Novi razgovor", "New Chat": "Novi razgovor",
"New Password": "Nova lozinka", "New Password": "Nova lozinka",
"No results found": "Nema rezultata", "No results found": "Nema rezultata",
"No source available": "Nema dostupnog izvora", "No source available": "Nema dostupnog izvora",
"Not factually correct": "Nije činjenično točno", "Not factually correct": "Nije činjenično točno",
"Not sure what to add?": "Niste sigurni što dodati?",
"Not sure what to write? Switch to": "Niste sigurni što napisati? Prebacite se na",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Napomena: Ako postavite minimalnu ocjenu, pretraga će vratiti samo dokumente s ocjenom većom ili jednakom minimalnoj ocjeni.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Napomena: Ako postavite minimalnu ocjenu, pretraga će vratiti samo dokumente s ocjenom većom ili jednakom minimalnoj ocjeni.",
"Notifications": "Obavijesti", "Notifications": "Obavijesti",
"November": "Studeni", "November": "Studeni",
@ -322,7 +311,6 @@
"or": "ili", "or": "ili",
"Other": "Ostalo", "Other": "Ostalo",
"Overview": "Pregled", "Overview": "Pregled",
"Parameters": "Parametri",
"Password": "Lozinka", "Password": "Lozinka",
"PDF document (.pdf)": "PDF dokument (.pdf)", "PDF document (.pdf)": "PDF dokument (.pdf)",
"PDF Extract Images (OCR)": "PDF izdvajanje slika (OCR)", "PDF Extract Images (OCR)": "PDF izdvajanje slika (OCR)",
@ -342,10 +330,8 @@
"Prompts": "Prompti", "Prompts": "Prompti",
"Pull \"{{searchValue}}\" from Ollama.com": "Povucite \"{{searchValue}}\" s Ollama.com", "Pull \"{{searchValue}}\" from Ollama.com": "Povucite \"{{searchValue}}\" s Ollama.com",
"Pull a model from Ollama.com": "Povucite model s Ollama.com", "Pull a model from Ollama.com": "Povucite model s Ollama.com",
"Pull Progress": "Napredak povlačenja",
"Query Params": "Parametri upita", "Query Params": "Parametri upita",
"RAG Template": "RAG predložak", "RAG Template": "RAG predložak",
"Raw Format": "Neobrađeni format",
"Read Aloud": "Čitaj naglas", "Read Aloud": "Čitaj naglas",
"Record voice": "Snimanje glasa", "Record voice": "Snimanje glasa",
"Redirecting you to OpenWebUI Community": "Preusmjeravanje na OpenWebUI zajednicu", "Redirecting you to OpenWebUI Community": "Preusmjeravanje na OpenWebUI zajednicu",
@ -356,7 +342,6 @@
"Remove Model": "Ukloni model", "Remove Model": "Ukloni model",
"Rename": "Preimenuj", "Rename": "Preimenuj",
"Repeat Last N": "Ponovi zadnjih N", "Repeat Last N": "Ponovi zadnjih N",
"Repeat Penalty": "Kazna za ponavljanje",
"Request Mode": "Način zahtjeva", "Request Mode": "Način zahtjeva",
"Reranking Model": "Model za ponovno rangiranje", "Reranking Model": "Model za ponovno rangiranje",
"Reranking model disabled": "Model za ponovno rangiranje onemogućen", "Reranking model disabled": "Model za ponovno rangiranje onemogućen",
@ -377,14 +362,17 @@
"Search": "Pretraga", "Search": "Pretraga",
"Search a model": "Pretraži model", "Search a model": "Pretraži model",
"Search Documents": "Pretraga dokumenata", "Search Documents": "Pretraga dokumenata",
"Search Models": "",
"Search Prompts": "Pretraga prompta", "Search Prompts": "Pretraga prompta",
"See readme.md for instructions": "Pogledajte readme.md za upute", "See readme.md for instructions": "Pogledajte readme.md za upute",
"See what's new": "Pogledajte što je novo", "See what's new": "Pogledajte što je novo",
"Seed": "Sjeme", "Seed": "Sjeme",
"Select a base model": "",
"Select a mode": "Odaberite način", "Select a mode": "Odaberite način",
"Select a model": "Odaberite model", "Select a model": "Odaberite model",
"Select an Ollama instance": "Odaberite Ollama instancu", "Select an Ollama instance": "Odaberite Ollama instancu",
"Select model": "Odaberite model", "Select model": "Odaberite model",
"Selected model(s) do not support image inputs": "",
"Send": "Pošalji", "Send": "Pošalji",
"Send a Message": "Pošaljite poruku", "Send a Message": "Pošaljite poruku",
"Send message": "Pošalji poruku", "Send message": "Pošalji poruku",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "Podijeli u OpenWebUI zajednici", "Share to OpenWebUI Community": "Podijeli u OpenWebUI zajednici",
"short-summary": "kratki sažetak", "short-summary": "kratki sažetak",
"Show": "Pokaži", "Show": "Pokaži",
"Show Additional Params": "Pokaži dodatne parametre",
"Show shortcuts": "Pokaži prečace", "Show shortcuts": "Pokaži prečace",
"Showcased creativity": "Prikazana kreativnost", "Showcased creativity": "Prikazana kreativnost",
"sidebar": "bočna traka", "sidebar": "bočna traka",
@ -425,7 +412,6 @@
"Success": "Uspjeh", "Success": "Uspjeh",
"Successfully updated.": "Uspješno ažurirano.", "Successfully updated.": "Uspješno ažurirano.",
"Suggested": "Predloženo", "Suggested": "Predloženo",
"Sync All": "Sinkroniziraj sve",
"System": "Sustav", "System": "Sustav",
"System Prompt": "Sistemski prompt", "System Prompt": "Sistemski prompt",
"Tags": "Oznake", "Tags": "Oznake",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Napišite sažetak u 50 riječi koji sažima [temu ili ključnu riječ].", "Write a summary in 50 words that summarizes [topic or keyword].": "Napišite sažetak u 50 riječi koji sažima [temu ili ključnu riječ].",
"Yesterday": "Jučer", "Yesterday": "Jučer",
"You": "Vi", "You": "Vi",
"You cannot clone a base model": "",
"You have no archived conversations.": "Nemate arhiviranih razgovora.", "You have no archived conversations.": "Nemate arhiviranih razgovora.",
"You have shared this chat": "Podijelili ste ovaj razgovor", "You have shared this chat": "Podijelili ste ovaj razgovor",
"You're a helpful assistant.": "Vi ste korisni asistent.", "You're a helpful assistant.": "Vi ste korisni asistent.",

View File

@ -3,6 +3,8 @@
"(Beta)": "(Beta)", "(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(p.e. `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(p.e. `sh webui.sh --api`)",
"(latest)": "(ultima)", "(latest)": "(ultima)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} sta pensando...", "{{modelName}} is thinking...": "{{modelName}} sta pensando...",
"{{user}}'s Chats": "{{user}} Chat", "{{user}}'s Chats": "{{user}} Chat",
"{{webUIName}} Backend Required": "{{webUIName}} Backend richiesto", "{{webUIName}} Backend Required": "{{webUIName}} Backend richiesto",
@ -11,9 +13,8 @@
"Account": "Account", "Account": "Account",
"Accurate information": "Informazioni accurate", "Accurate information": "Informazioni accurate",
"Add": "Aggiungi", "Add": "Aggiungi",
"Add a model": "Aggiungi un modello", "Add a model id": "",
"Add a model tag name": "Aggiungi un nome tag del modello", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "Aggiungi una breve descrizione di ciò che fa questo file modello",
"Add a short title for this prompt": "Aggiungi un titolo breve per questo prompt", "Add a short title for this prompt": "Aggiungi un titolo breve per questo prompt",
"Add a tag": "Aggiungi un tag", "Add a tag": "Aggiungi un tag",
"Add custom prompt": "Aggiungi un prompt custom", "Add custom prompt": "Aggiungi un prompt custom",
@ -29,6 +30,7 @@
"Admin Panel": "Pannello di amministrazione", "Admin Panel": "Pannello di amministrazione",
"Admin Settings": "Impostazioni amministratore", "Admin Settings": "Impostazioni amministratore",
"Advanced Parameters": "Parametri avanzati", "Advanced Parameters": "Parametri avanzati",
"Advanced Params": "",
"all": "tutti", "all": "tutti",
"All Documents": "Tutti i documenti", "All Documents": "Tutti i documenti",
"All Users": "Tutti gli utenti", "All Users": "Tutti gli utenti",
@ -43,7 +45,6 @@
"API Key": "Chiave API", "API Key": "Chiave API",
"API Key created.": "Chiave API creata.", "API Key created.": "Chiave API creata.",
"API keys": "Chiavi API", "API keys": "Chiavi API",
"API RPM": "API RPM",
"April": "Aprile", "April": "Aprile",
"Archive": "Archivio", "Archive": "Archivio",
"Archived Chats": "Chat archiviate", "Archived Chats": "Chat archiviate",
@ -60,12 +61,12 @@
"available!": "disponibile!", "available!": "disponibile!",
"Back": "Indietro", "Back": "Indietro",
"Bad Response": "Risposta non valida", "Bad Response": "Risposta non valida",
"Base Model (From)": "",
"before": "prima", "before": "prima",
"Being lazy": "Essere pigri", "Being lazy": "Essere pigri",
"Builder Mode": "Modalità costruttore",
"Bypass SSL verification for Websites": "Aggira la verifica SSL per i siti web", "Bypass SSL verification for Websites": "Aggira la verifica SSL per i siti web",
"Cancel": "Annulla", "Cancel": "Annulla",
"Categories": "Categorie", "Capabilities": "",
"Change Password": "Cambia password", "Change Password": "Cambia password",
"Chat": "Chat", "Chat": "Chat",
"Chat Bubble UI": "UI bolle chat", "Chat Bubble UI": "UI bolle chat",
@ -83,7 +84,6 @@
"Citation": "Citazione", "Citation": "Citazione",
"Click here for help.": "Clicca qui per aiuto.", "Click here for help.": "Clicca qui per aiuto.",
"Click here to": "Clicca qui per", "Click here to": "Clicca qui per",
"Click here to check other modelfiles.": "Clicca qui per controllare altri file modello.",
"Click here to select": "Clicca qui per selezionare", "Click here to select": "Clicca qui per selezionare",
"Click here to select a csv file.": "Clicca qui per selezionare un file csv.", "Click here to select a csv file.": "Clicca qui per selezionare un file csv.",
"Click here to select documents.": "Clicca qui per selezionare i documenti.", "Click here to select documents.": "Clicca qui per selezionare i documenti.",
@ -108,7 +108,7 @@
"Copy Link": "Copia link", "Copy Link": "Copia link",
"Copying to clipboard was successful!": "Copia negli appunti riuscita!", "Copying to clipboard was successful!": "Copia negli appunti riuscita!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Crea una frase concisa di 3-5 parole come intestazione per la seguente query, aderendo rigorosamente al limite di 3-5 parole ed evitando l'uso della parola 'titolo':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Crea una frase concisa di 3-5 parole come intestazione per la seguente query, aderendo rigorosamente al limite di 3-5 parole ed evitando l'uso della parola 'titolo':",
"Create a modelfile": "Crea un file modello", "Create a model": "",
"Create Account": "Crea account", "Create Account": "Crea account",
"Create new key": "Crea nuova chiave", "Create new key": "Crea nuova chiave",
"Create new secret key": "Crea nuova chiave segreta", "Create new secret key": "Crea nuova chiave segreta",
@ -117,7 +117,7 @@
"Current Model": "Modello corrente", "Current Model": "Modello corrente",
"Current Password": "Password corrente", "Current Password": "Password corrente",
"Custom": "Personalizzato", "Custom": "Personalizzato",
"Customize Ollama models for a specific purpose": "Personalizza i modelli Ollama per uno scopo specifico", "Customize models for a specific purpose": "",
"Dark": "Scuro", "Dark": "Scuro",
"Dashboard": "Pannello di controllo", "Dashboard": "Pannello di controllo",
"Database": "Database", "Database": "Database",
@ -132,17 +132,17 @@
"delete": "elimina", "delete": "elimina",
"Delete": "Elimina", "Delete": "Elimina",
"Delete a model": "Elimina un modello", "Delete a model": "Elimina un modello",
"Delete All Chats": "",
"Delete chat": "Elimina chat", "Delete chat": "Elimina chat",
"Delete Chat": "Elimina chat", "Delete Chat": "Elimina chat",
"Delete Chats": "Elimina le chat",
"delete this link": "elimina questo link", "delete this link": "elimina questo link",
"Delete User": "Elimina utente", "Delete User": "Elimina utente",
"Deleted {{deleteModelTag}}": "Eliminato {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "Eliminato {{deleteModelTag}}",
"Deleted {{tagName}}": "Eliminato {{tagName}}", "Deleted {{name}}": "",
"Description": "Descrizione", "Description": "Descrizione",
"Didn't fully follow instructions": "Non ha seguito completamente le istruzioni", "Didn't fully follow instructions": "Non ha seguito completamente le istruzioni",
"Disabled": "Disabilitato", "Disabled": "Disabilitato",
"Discover a modelfile": "Scopri un file modello", "Discover a model": "",
"Discover a prompt": "Scopri un prompt", "Discover a prompt": "Scopri un prompt",
"Discover, download, and explore custom prompts": "Scopri, scarica ed esplora prompt personalizzati", "Discover, download, and explore custom prompts": "Scopri, scarica ed esplora prompt personalizzati",
"Discover, download, and explore model presets": "Scopri, scarica ed esplora i preset del modello", "Discover, download, and explore model presets": "Scopri, scarica ed esplora i preset del modello",
@ -176,11 +176,6 @@
"Enter Chunk Size": "Inserisci la dimensione chunk", "Enter Chunk Size": "Inserisci la dimensione chunk",
"Enter Image Size (e.g. 512x512)": "Inserisci la dimensione dell'immagine (ad esempio 512x512)", "Enter Image Size (e.g. 512x512)": "Inserisci la dimensione dell'immagine (ad esempio 512x512)",
"Enter language codes": "Inserisci i codici lingua", "Enter language codes": "Inserisci i codici lingua",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Inserisci l'URL base dell'API LiteLLM (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "Inserisci la chiave API LiteLLM (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "Inserisci LiteLLM API RPM (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "Inserisci il modello LiteLLM (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "Inserisci Max Tokens (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "Inserisci il tag del modello (ad esempio {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Inserisci il tag del modello (ad esempio {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Inserisci il numero di passaggi (ad esempio 50)", "Enter Number of Steps (e.g. 50)": "Inserisci il numero di passaggi (ad esempio 50)",
"Enter Score": "Inserisci il punteggio", "Enter Score": "Inserisci il punteggio",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "Esporta tutte le chat (tutti gli utenti)", "Export All Chats (All Users)": "Esporta tutte le chat (tutti gli utenti)",
"Export Chats": "Esporta chat", "Export Chats": "Esporta chat",
"Export Documents Mapping": "Esporta mappatura documenti", "Export Documents Mapping": "Esporta mappatura documenti",
"Export Modelfiles": "Esporta file modello", "Export Models": "",
"Export Prompts": "Esporta prompt", "Export Prompts": "Esporta prompt",
"Failed to create API Key.": "Impossibile creare la chiave API.", "Failed to create API Key.": "Impossibile creare la chiave API.",
"Failed to read clipboard contents": "Impossibile leggere il contenuto degli appunti", "Failed to read clipboard contents": "Impossibile leggere il contenuto degli appunti",
@ -209,7 +204,7 @@
"Focus chat input": "Metti a fuoco l'input della chat", "Focus chat input": "Metti a fuoco l'input della chat",
"Followed instructions perfectly": "Ha seguito le istruzioni alla perfezione", "Followed instructions perfectly": "Ha seguito le istruzioni alla perfezione",
"Format your variables using square brackets like this:": "Formatta le tue variabili usando parentesi quadre come questa:", "Format your variables using square brackets like this:": "Formatta le tue variabili usando parentesi quadre come questa:",
"From (Base Model)": "Da (modello base)", "Frequencey Penalty": "",
"Full Screen Mode": "Modalità a schermo intero", "Full Screen Mode": "Modalità a schermo intero",
"General": "Generale", "General": "Generale",
"General Settings": "Impostazioni generali", "General Settings": "Impostazioni generali",
@ -220,7 +215,6 @@
"Hello, {{name}}": "Ciao, {{name}}", "Hello, {{name}}": "Ciao, {{name}}",
"Help": "Aiuto", "Help": "Aiuto",
"Hide": "Nascondi", "Hide": "Nascondi",
"Hide Additional Params": "Nascondi parametri aggiuntivi",
"How can I help you today?": "Come posso aiutarti oggi?", "How can I help you today?": "Come posso aiutarti oggi?",
"Hybrid Search": "Ricerca ibrida", "Hybrid Search": "Ricerca ibrida",
"Image Generation (Experimental)": "Generazione di immagini (sperimentale)", "Image Generation (Experimental)": "Generazione di immagini (sperimentale)",
@ -229,7 +223,7 @@
"Images": "Immagini", "Images": "Immagini",
"Import Chats": "Importa chat", "Import Chats": "Importa chat",
"Import Documents Mapping": "Importa mappatura documenti", "Import Documents Mapping": "Importa mappatura documenti",
"Import Modelfiles": "Importa file modello", "Import Models": "",
"Import Prompts": "Importa prompt", "Import Prompts": "Importa prompt",
"Include `--api` flag when running stable-diffusion-webui": "Includi il flag `--api` quando esegui stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Includi il flag `--api` quando esegui stable-diffusion-webui",
"Input commands": "Comandi di input", "Input commands": "Comandi di input",
@ -238,6 +232,7 @@
"January": "Gennaio", "January": "Gennaio",
"join our Discord for help.": "unisciti al nostro Discord per ricevere aiuto.", "join our Discord for help.": "unisciti al nostro Discord per ricevere aiuto.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "Luglio", "July": "Luglio",
"June": "Giugno", "June": "Giugno",
"JWT Expiration": "Scadenza JWT", "JWT Expiration": "Scadenza JWT",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "Realizzato dalla comunità OpenWebUI", "Made by OpenWebUI Community": "Realizzato dalla comunità OpenWebUI",
"Make sure to enclose them with": "Assicurati di racchiuderli con", "Make sure to enclose them with": "Assicurati di racchiuderli con",
"Manage LiteLLM Models": "Gestisci modelli LiteLLM",
"Manage Models": "Gestisci modelli", "Manage Models": "Gestisci modelli",
"Manage Ollama Models": "Gestisci modelli Ollama", "Manage Ollama Models": "Gestisci modelli Ollama",
"March": "Marzo", "March": "Marzo",
"Max Tokens": "Max token", "Max Tokens (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.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "È possibile scaricare un massimo di 3 modelli contemporaneamente. Riprova più tardi.",
"May": "Maggio", "May": "Maggio",
"Memories accessible by LLMs will be shown here.": "I memori accessibili ai LLM saranno mostrati qui.", "Memories accessible by LLMs will be shown here.": "I memori accessibili ai LLM saranno mostrati qui.",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "Il modello '{{modelName}}' è stato scaricato con successo.", "Model '{{modelName}}' has been successfully downloaded.": "Il modello '{{modelName}}' è stato scaricato con successo.",
"Model '{{modelTag}}' is already in queue for downloading.": "Il modello '{{modelTag}}' è già in coda per il download.", "Model '{{modelTag}}' is already in queue for downloading.": "Il modello '{{modelTag}}' è già in coda per il download.",
"Model {{modelId}} not found": "Modello {{modelId}} non trovato", "Model {{modelId}} not found": "Modello {{modelId}} non trovato",
"Model {{modelName}} already exists.": "Il modello {{modelName}} esiste già.", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Percorso del filesystem del modello rilevato. Il nome breve del modello è richiesto per l'aggiornamento, impossibile continuare.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Percorso del filesystem del modello rilevato. Il nome breve del modello è richiesto per l'aggiornamento, impossibile continuare.",
"Model Name": "Nome modello", "Model ID": "",
"Model not selected": "Modello non selezionato", "Model not selected": "Modello non selezionato",
"Model Tag Name": "Nome tag del modello", "Model Params": "",
"Model Whitelisting": "Whitelisting del modello", "Model Whitelisting": "Whitelisting del modello",
"Model(s) Whitelisted": "Modello/i in whitelist", "Model(s) Whitelisted": "Modello/i in whitelist",
"Modelfile": "File modello",
"Modelfile Advanced Settings": "Impostazioni avanzate del file modello",
"Modelfile Content": "Contenuto del file modello", "Modelfile Content": "Contenuto del file modello",
"Modelfiles": "File modello",
"Models": "Modelli", "Models": "Modelli",
"More": "Altro", "More": "Altro",
"Name": "Nome", "Name": "Nome",
"Name Tag": "Nome tag", "Name Tag": "Nome tag",
"Name your modelfile": "Assegna un nome al tuo file modello", "Name your model": "",
"New Chat": "Nuova chat", "New Chat": "Nuova chat",
"New Password": "Nuova password", "New Password": "Nuova password",
"No results found": "Nessun risultato trovato", "No results found": "Nessun risultato trovato",
"No source available": "Nessuna fonte disponibile", "No source available": "Nessuna fonte disponibile",
"Not factually correct": "Non corretto dal punto di vista fattuale", "Not factually correct": "Non corretto dal punto di vista fattuale",
"Not sure what to add?": "Non sei sicuro di cosa aggiungere?",
"Not sure what to write? Switch to": "Non sei sicuro di cosa scrivere? Passa a",
"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 imposti un punteggio minimo, la ricerca restituirà solo i documenti con un punteggio maggiore o uguale al punteggio minimo.", "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 imposti un punteggio minimo, la ricerca restituirà solo i documenti con un punteggio maggiore o uguale al punteggio minimo.",
"Notifications": "Notifiche desktop", "Notifications": "Notifiche desktop",
"November": "Novembre", "November": "Novembre",
@ -322,7 +311,6 @@
"or": "o", "or": "o",
"Other": "Altro", "Other": "Altro",
"Overview": "Panoramica", "Overview": "Panoramica",
"Parameters": "Parametri",
"Password": "Password", "Password": "Password",
"PDF document (.pdf)": "Documento PDF (.pdf)", "PDF document (.pdf)": "Documento PDF (.pdf)",
"PDF Extract Images (OCR)": "Estrazione immagini PDF (OCR)", "PDF Extract Images (OCR)": "Estrazione immagini PDF (OCR)",
@ -342,10 +330,8 @@
"Prompts": "Prompt", "Prompts": "Prompt",
"Pull \"{{searchValue}}\" from Ollama.com": "Estrai \"{{searchValue}}\" da Ollama.com", "Pull \"{{searchValue}}\" from Ollama.com": "Estrai \"{{searchValue}}\" da Ollama.com",
"Pull a model from Ollama.com": "Estrai un modello da Ollama.com", "Pull a model from Ollama.com": "Estrai un modello da Ollama.com",
"Pull Progress": "Avanzamento estrazione",
"Query Params": "Parametri query", "Query Params": "Parametri query",
"RAG Template": "Modello RAG", "RAG Template": "Modello RAG",
"Raw Format": "Formato raw",
"Read Aloud": "Leggi ad alta voce", "Read Aloud": "Leggi ad alta voce",
"Record voice": "Registra voce", "Record voice": "Registra voce",
"Redirecting you to OpenWebUI Community": "Reindirizzamento alla comunità OpenWebUI", "Redirecting you to OpenWebUI Community": "Reindirizzamento alla comunità OpenWebUI",
@ -356,7 +342,6 @@
"Remove Model": "Rimuovi modello", "Remove Model": "Rimuovi modello",
"Rename": "Rinomina", "Rename": "Rinomina",
"Repeat Last N": "Ripeti ultimi N", "Repeat Last N": "Ripeti ultimi N",
"Repeat Penalty": "Penalità di ripetizione",
"Request Mode": "Modalità richiesta", "Request Mode": "Modalità richiesta",
"Reranking Model": "Modello di riclassificazione", "Reranking Model": "Modello di riclassificazione",
"Reranking model disabled": "Modello di riclassificazione disabilitato", "Reranking model disabled": "Modello di riclassificazione disabilitato",
@ -377,14 +362,17 @@
"Search": "Cerca", "Search": "Cerca",
"Search a model": "Cerca un modello", "Search a model": "Cerca un modello",
"Search Documents": "Cerca documenti", "Search Documents": "Cerca documenti",
"Search Models": "",
"Search Prompts": "Cerca prompt", "Search Prompts": "Cerca prompt",
"See readme.md for instructions": "Vedi readme.md per le istruzioni", "See readme.md for instructions": "Vedi readme.md per le istruzioni",
"See what's new": "Guarda le novità", "See what's new": "Guarda le novità",
"Seed": "Seme", "Seed": "Seme",
"Select a base model": "",
"Select a mode": "Seleziona una modalità", "Select a mode": "Seleziona una modalità",
"Select a model": "Seleziona un modello", "Select a model": "Seleziona un modello",
"Select an Ollama instance": "Seleziona un'istanza Ollama", "Select an Ollama instance": "Seleziona un'istanza Ollama",
"Select model": "Seleziona modello", "Select model": "Seleziona modello",
"Selected model(s) do not support image inputs": "",
"Send": "Invia", "Send": "Invia",
"Send a Message": "Invia un messaggio", "Send a Message": "Invia un messaggio",
"Send message": "Invia messaggio", "Send message": "Invia messaggio",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "Condividi con la comunità OpenWebUI", "Share to OpenWebUI Community": "Condividi con la comunità OpenWebUI",
"short-summary": "riassunto-breve", "short-summary": "riassunto-breve",
"Show": "Mostra", "Show": "Mostra",
"Show Additional Params": "Mostra parametri aggiuntivi",
"Show shortcuts": "Mostra", "Show shortcuts": "Mostra",
"Showcased creativity": "Creatività messa in mostra", "Showcased creativity": "Creatività messa in mostra",
"sidebar": "barra laterale", "sidebar": "barra laterale",
@ -425,7 +412,6 @@
"Success": "Successo", "Success": "Successo",
"Successfully updated.": "Aggiornato con successo.", "Successfully updated.": "Aggiornato con successo.",
"Suggested": "Suggerito", "Suggested": "Suggerito",
"Sync All": "Sincronizza tutto",
"System": "Sistema", "System": "Sistema",
"System Prompt": "Prompt di sistema", "System Prompt": "Prompt di sistema",
"Tags": "Tag", "Tags": "Tag",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "Scrivi un riassunto in 50 parole che riassume [argomento o parola chiave].", "Write a summary in 50 words that summarizes [topic or keyword].": "Scrivi un riassunto in 50 parole che riassume [argomento o parola chiave].",
"Yesterday": "Ieri", "Yesterday": "Ieri",
"You": "Tu", "You": "Tu",
"You cannot clone a base model": "",
"You have no archived conversations.": "Non hai conversazioni archiviate.", "You have no archived conversations.": "Non hai conversazioni archiviate.",
"You have shared this chat": "Hai condiviso questa chat", "You have shared this chat": "Hai condiviso questa chat",
"You're a helpful assistant.": "Sei un assistente utile.", "You're a helpful assistant.": "Sei un assistente utile.",

View File

@ -3,6 +3,8 @@
"(Beta)": "(ベータ版)", "(Beta)": "(ベータ版)",
"(e.g. `sh webui.sh --api`)": "(例: `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(例: `sh webui.sh --api`)",
"(latest)": "(最新)", "(latest)": "(最新)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{modelName}} is thinking...": "{{modelName}} は思考中です...", "{{modelName}} is thinking...": "{{modelName}} は思考中です...",
"{{user}}'s Chats": "{{user}} のチャット", "{{user}}'s Chats": "{{user}} のチャット",
"{{webUIName}} Backend Required": "{{webUIName}} バックエンドが必要です", "{{webUIName}} Backend Required": "{{webUIName}} バックエンドが必要です",
@ -11,9 +13,8 @@
"Account": "アカウント", "Account": "アカウント",
"Accurate information": "情報の正確性", "Accurate information": "情報の正確性",
"Add": "追加", "Add": "追加",
"Add a model": "モデルを追加", "Add a model id": "",
"Add a model tag name": "モデルタグ名を追加", "Add a short description about what this model does": "",
"Add a short description about what this modelfile does": "このモデルファイルの機能に関する簡単な説明を追加",
"Add a short title for this prompt": "このプロンプトの短いタイトルを追加", "Add a short title for this prompt": "このプロンプトの短いタイトルを追加",
"Add a tag": "タグを追加", "Add a tag": "タグを追加",
"Add custom prompt": "カスタムプロンプトを追加", "Add custom prompt": "カスタムプロンプトを追加",
@ -29,6 +30,7 @@
"Admin Panel": "管理者パネル", "Admin Panel": "管理者パネル",
"Admin Settings": "管理者設定", "Admin Settings": "管理者設定",
"Advanced Parameters": "詳細パラメーター", "Advanced Parameters": "詳細パラメーター",
"Advanced Params": "",
"all": "すべて", "all": "すべて",
"All Documents": "全てのドキュメント", "All Documents": "全てのドキュメント",
"All Users": "すべてのユーザー", "All Users": "すべてのユーザー",
@ -43,7 +45,6 @@
"API Key": "API キー", "API Key": "API キー",
"API Key created.": "API キーが作成されました。", "API Key created.": "API キーが作成されました。",
"API keys": "API キー", "API keys": "API キー",
"API RPM": "API RPM",
"April": "4月", "April": "4月",
"Archive": "アーカイブ", "Archive": "アーカイブ",
"Archived Chats": "チャット記録", "Archived Chats": "チャット記録",
@ -60,12 +61,12 @@
"available!": "利用可能!", "available!": "利用可能!",
"Back": "戻る", "Back": "戻る",
"Bad Response": "応答が悪い", "Bad Response": "応答が悪い",
"Base Model (From)": "",
"before": "より前", "before": "より前",
"Being lazy": "怠惰な", "Being lazy": "怠惰な",
"Builder Mode": "ビルダーモード",
"Bypass SSL verification for Websites": "SSL 検証をバイパスする", "Bypass SSL verification for Websites": "SSL 検証をバイパスする",
"Cancel": "キャンセル", "Cancel": "キャンセル",
"Categories": "カテゴリ", "Capabilities": "",
"Change Password": "パスワードを変更", "Change Password": "パスワードを変更",
"Chat": "チャット", "Chat": "チャット",
"Chat Bubble UI": "チャットバブルUI", "Chat Bubble UI": "チャットバブルUI",
@ -83,7 +84,6 @@
"Citation": "引用文", "Citation": "引用文",
"Click here for help.": "ヘルプについてはここをクリックしてください。", "Click here for help.": "ヘルプについてはここをクリックしてください。",
"Click here to": "ここをクリックして", "Click here to": "ここをクリックして",
"Click here to check other modelfiles.": "他のモデルファイルを確認するにはここをクリックしてください。",
"Click here to select": "選択するにはここをクリックしてください", "Click here to select": "選択するにはここをクリックしてください",
"Click here to select a csv file.": "CSVファイルを選択するにはここをクリックしてください。", "Click here to select a csv file.": "CSVファイルを選択するにはここをクリックしてください。",
"Click here to select documents.": "ドキュメントを選択するにはここをクリックしてください。", "Click here to select documents.": "ドキュメントを選択するにはここをクリックしてください。",
@ -108,7 +108,7 @@
"Copy Link": "リンクをコピー", "Copy Link": "リンクをコピー",
"Copying to clipboard was successful!": "クリップボードへのコピーが成功しました!", "Copying to clipboard was successful!": "クリップボードへのコピーが成功しました!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "次のクエリの見出しとして、3〜5語の簡潔なフレーズを作成してください。3〜5語の制限を厳守し、「タイトル」という単語の使用を避けてください。", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "次のクエリの見出しとして、3〜5語の簡潔なフレーズを作成してください。3〜5語の制限を厳守し、「タイトル」という単語の使用を避けてください。",
"Create a modelfile": "モデルファイルを作成", "Create a model": "",
"Create Account": "アカウントを作成", "Create Account": "アカウントを作成",
"Create new key": "新しいキーを作成", "Create new key": "新しいキーを作成",
"Create new secret key": "新しいシークレットキーを作成", "Create new secret key": "新しいシークレットキーを作成",
@ -117,7 +117,7 @@
"Current Model": "現在のモデル", "Current Model": "現在のモデル",
"Current Password": "現在のパスワード", "Current Password": "現在のパスワード",
"Custom": "カスタム", "Custom": "カスタム",
"Customize Ollama models for a specific purpose": "特定の目的に合わせて Ollama モデルをカスタマイズ", "Customize models for a specific purpose": "",
"Dark": "ダーク", "Dark": "ダーク",
"Dashboard": "ダッシュボード", "Dashboard": "ダッシュボード",
"Database": "データベース", "Database": "データベース",
@ -132,17 +132,17 @@
"delete": "削除", "delete": "削除",
"Delete": "削除", "Delete": "削除",
"Delete a model": "モデルを削除", "Delete a model": "モデルを削除",
"Delete All Chats": "",
"Delete chat": "チャットを削除", "Delete chat": "チャットを削除",
"Delete Chat": "チャットを削除", "Delete Chat": "チャットを削除",
"Delete Chats": "チャットを削除",
"delete this link": "このリンクを削除します", "delete this link": "このリンクを削除します",
"Delete User": "ユーザーを削除", "Delete User": "ユーザーを削除",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} を削除しました", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} を削除しました",
"Deleted {{tagName}}": "{{tagName}} を削除しました", "Deleted {{name}}": "",
"Description": "説明", "Description": "説明",
"Didn't fully follow instructions": "説明に沿って操作していませんでした", "Didn't fully follow instructions": "説明に沿って操作していませんでした",
"Disabled": "無効", "Disabled": "無効",
"Discover a modelfile": "モデルファイルを見つける", "Discover a model": "",
"Discover a prompt": "プロンプトを見つける", "Discover a prompt": "プロンプトを見つける",
"Discover, download, and explore custom prompts": "カスタムプロンプトを見つけて、ダウンロードして、探索", "Discover, download, and explore custom prompts": "カスタムプロンプトを見つけて、ダウンロードして、探索",
"Discover, download, and explore model presets": "モデルプリセットを見つけて、ダウンロードして、探索", "Discover, download, and explore model presets": "モデルプリセットを見つけて、ダウンロードして、探索",
@ -176,11 +176,6 @@
"Enter Chunk Size": "チャンクサイズを入力してください", "Enter Chunk Size": "チャンクサイズを入力してください",
"Enter Image Size (e.g. 512x512)": "画像サイズを入力してください (例: 512x512)", "Enter Image Size (e.g. 512x512)": "画像サイズを入力してください (例: 512x512)",
"Enter language codes": "言語コードを入力してください", "Enter language codes": "言語コードを入力してください",
"Enter LiteLLM API Base URL (litellm_params.api_base)": "LiteLLM API ベース URL を入力してください (litellm_params.api_base)",
"Enter LiteLLM API Key (litellm_params.api_key)": "LiteLLM API キーを入力してください (litellm_params.api_key)",
"Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM を入力してください (litellm_params.rpm)",
"Enter LiteLLM Model (litellm_params.model)": "LiteLLM モデルを入力してください (litellm_params.model)",
"Enter Max Tokens (litellm_params.max_tokens)": "最大トークン数を入力してください (litellm_params.max_tokens)",
"Enter model tag (e.g. {{modelTag}})": "モデルタグを入力してください (例: {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "モデルタグを入力してください (例: {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "ステップ数を入力してください (例: 50)", "Enter Number of Steps (e.g. 50)": "ステップ数を入力してください (例: 50)",
"Enter Score": "スコアを入力してください", "Enter Score": "スコアを入力してください",
@ -196,7 +191,7 @@
"Export All Chats (All Users)": "すべてのチャットをエクスポート (すべてのユーザー)", "Export All Chats (All Users)": "すべてのチャットをエクスポート (すべてのユーザー)",
"Export Chats": "チャットをエクスポート", "Export Chats": "チャットをエクスポート",
"Export Documents Mapping": "ドキュメントマッピングをエクスポート", "Export Documents Mapping": "ドキュメントマッピングをエクスポート",
"Export Modelfiles": "モデルファイルをエクスポート", "Export Models": "",
"Export Prompts": "プロンプトをエクスポート", "Export Prompts": "プロンプトをエクスポート",
"Failed to create API Key.": "APIキーの作成に失敗しました。", "Failed to create API Key.": "APIキーの作成に失敗しました。",
"Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした", "Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした",
@ -209,7 +204,7 @@
"Focus chat input": "チャット入力をフォーカス", "Focus chat input": "チャット入力をフォーカス",
"Followed instructions perfectly": "完全に指示に従った", "Followed instructions perfectly": "完全に指示に従った",
"Format your variables using square brackets like this:": "次のように角括弧を使用して変数をフォーマットします。", "Format your variables using square brackets like this:": "次のように角括弧を使用して変数をフォーマットします。",
"From (Base Model)": "From (ベースモデル)", "Frequencey Penalty": "",
"Full Screen Mode": "フルスクリーンモード", "Full Screen Mode": "フルスクリーンモード",
"General": "一般", "General": "一般",
"General Settings": "一般設定", "General Settings": "一般設定",
@ -220,7 +215,6 @@
"Hello, {{name}}": "こんにちは、{{name}} さん", "Hello, {{name}}": "こんにちは、{{name}} さん",
"Help": "ヘルプ", "Help": "ヘルプ",
"Hide": "非表示", "Hide": "非表示",
"Hide Additional Params": "追加パラメーターを非表示",
"How can I help you today?": "今日はどのようにお手伝いしましょうか?", "How can I help you today?": "今日はどのようにお手伝いしましょうか?",
"Hybrid Search": "ブリッジ検索", "Hybrid Search": "ブリッジ検索",
"Image Generation (Experimental)": "画像生成 (実験的)", "Image Generation (Experimental)": "画像生成 (実験的)",
@ -229,7 +223,7 @@
"Images": "画像", "Images": "画像",
"Import Chats": "チャットをインポート", "Import Chats": "チャットをインポート",
"Import Documents Mapping": "ドキュメントマッピングをインポート", "Import Documents Mapping": "ドキュメントマッピングをインポート",
"Import Modelfiles": "モデルファイルをインポート", "Import Models": "",
"Import Prompts": "プロンプトをインポート", "Import Prompts": "プロンプトをインポート",
"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webuiを実行する際に`--api`フラグを含める", "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webuiを実行する際に`--api`フラグを含める",
"Input commands": "入力コマンド", "Input commands": "入力コマンド",
@ -238,6 +232,7 @@
"January": "1月", "January": "1月",
"join our Discord for help.": "ヘルプについては、Discord に参加してください。", "join our Discord for help.": "ヘルプについては、Discord に参加してください。",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "",
"July": "7月", "July": "7月",
"June": "6月", "June": "6月",
"JWT Expiration": "JWT 有効期限", "JWT Expiration": "JWT 有効期限",
@ -252,11 +247,10 @@
"LTR": "LTR", "LTR": "LTR",
"Made by OpenWebUI Community": "OpenWebUI コミュニティによって作成", "Made by OpenWebUI Community": "OpenWebUI コミュニティによって作成",
"Make sure to enclose them with": "必ず次で囲んでください", "Make sure to enclose them with": "必ず次で囲んでください",
"Manage LiteLLM Models": "LiteLLM モデルを管理",
"Manage Models": "モデルを管理", "Manage Models": "モデルを管理",
"Manage Ollama Models": "Ollama モデルを管理", "Manage Ollama Models": "Ollama モデルを管理",
"March": "3月", "March": "3月",
"Max Tokens": "最大トークン数", "Max Tokens (num_predict)": "",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "同時にダウンロードできるモデルは最大 3 つです。後でもう一度お試しください。", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "同時にダウンロードできるモデルは最大 3 つです。後でもう一度お試しください。",
"May": "5月", "May": "5月",
"Memories accessible by LLMs will be shown here.": "LLM がアクセスできるメモリはここに表示されます。", "Memories accessible by LLMs will be shown here.": "LLM がアクセスできるメモリはここに表示されます。",
@ -271,29 +265,24 @@
"Model '{{modelName}}' has been successfully downloaded.": "モデル '{{modelName}}' が正常にダウンロードされました。", "Model '{{modelName}}' has been successfully downloaded.": "モデル '{{modelName}}' が正常にダウンロードされました。",
"Model '{{modelTag}}' is already in queue for downloading.": "モデル '{{modelTag}}' はすでにダウンロード待ち行列に入っています。", "Model '{{modelTag}}' is already in queue for downloading.": "モデル '{{modelTag}}' はすでにダウンロード待ち行列に入っています。",
"Model {{modelId}} not found": "モデル {{modelId}} が見つかりません", "Model {{modelId}} not found": "モデル {{modelId}} が見つかりません",
"Model {{modelName}} already exists.": "モデル {{modelName}} はすでに存在します。", "Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "モデルファイルシステムパスが検出されました。モデルの短縮名が必要です。更新できません。", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "モデルファイルシステムパスが検出されました。モデルの短縮名が必要です。更新できません。",
"Model Name": "モデル名", "Model ID": "",
"Model not selected": "モデルが選択されていません", "Model not selected": "モデルが選択されていません",
"Model Tag Name": "モデルタグ名", "Model Params": "",
"Model Whitelisting": "モデルホワイトリスト", "Model Whitelisting": "モデルホワイトリスト",
"Model(s) Whitelisted": "ホワイトリストに登録されたモデル", "Model(s) Whitelisted": "ホワイトリストに登録されたモデル",
"Modelfile": "モデルファイル",
"Modelfile Advanced Settings": "モデルファイルの詳細設定",
"Modelfile Content": "モデルファイルの内容", "Modelfile Content": "モデルファイルの内容",
"Modelfiles": "モデルファイル",
"Models": "モデル", "Models": "モデル",
"More": "もっと見る", "More": "もっと見る",
"Name": "名前", "Name": "名前",
"Name Tag": "名前タグ", "Name Tag": "名前タグ",
"Name your modelfile": "モデルファイルに名前を付ける", "Name your model": "",
"New Chat": "新しいチャット", "New Chat": "新しいチャット",
"New Password": "新しいパスワード", "New Password": "新しいパスワード",
"No results found": "結果が見つかりません", "No results found": "結果が見つかりません",
"No source available": "使用可能なソースがありません", "No source available": "使用可能なソースがありません",
"Not factually correct": "実事上正しくない", "Not factually correct": "実事上正しくない",
"Not sure what to add?": "何を追加すればよいかわからない?",
"Not sure what to write? Switch to": "何を書けばよいかわからない? 次に切り替える",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "注意:最小スコアを設定した場合、検索は最小スコア以上のスコアを持つドキュメントのみを返します。", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "注意:最小スコアを設定した場合、検索は最小スコア以上のスコアを持つドキュメントのみを返します。",
"Notifications": "デスクトップ通知", "Notifications": "デスクトップ通知",
"November": "11月", "November": "11月",
@ -322,7 +311,6 @@
"or": "または", "or": "または",
"Other": "その他", "Other": "その他",
"Overview": "概要", "Overview": "概要",
"Parameters": "パラメーター",
"Password": "パスワード", "Password": "パスワード",
"PDF document (.pdf)": "PDF ドキュメント (.pdf)", "PDF document (.pdf)": "PDF ドキュメント (.pdf)",
"PDF Extract Images (OCR)": "PDF 画像抽出 (OCR)", "PDF Extract Images (OCR)": "PDF 画像抽出 (OCR)",
@ -342,10 +330,8 @@
"Prompts": "プロンプト", "Prompts": "プロンプト",
"Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com から \"{{searchValue}}\" をプル", "Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com から \"{{searchValue}}\" をプル",
"Pull a model from Ollama.com": "Ollama.com からモデルをプル", "Pull a model from Ollama.com": "Ollama.com からモデルをプル",
"Pull Progress": "プルの進行状況",
"Query Params": "クエリパラメーター", "Query Params": "クエリパラメーター",
"RAG Template": "RAG テンプレート", "RAG Template": "RAG テンプレート",
"Raw Format": "Raw 形式",
"Read Aloud": "読み上げ", "Read Aloud": "読み上げ",
"Record voice": "音声を録音", "Record voice": "音声を録音",
"Redirecting you to OpenWebUI Community": "OpenWebUI コミュニティにリダイレクトしています", "Redirecting you to OpenWebUI Community": "OpenWebUI コミュニティにリダイレクトしています",
@ -356,7 +342,6 @@
"Remove Model": "モデルを削除", "Remove Model": "モデルを削除",
"Rename": "名前を変更", "Rename": "名前を変更",
"Repeat Last N": "最後の N を繰り返す", "Repeat Last N": "最後の N を繰り返す",
"Repeat Penalty": "繰り返しペナルティ",
"Request Mode": "リクエストモード", "Request Mode": "リクエストモード",
"Reranking Model": "モデルの再ランキング", "Reranking Model": "モデルの再ランキング",
"Reranking model disabled": "再ランキングモデルが無効です", "Reranking model disabled": "再ランキングモデルが無効です",
@ -377,14 +362,17 @@
"Search": "検索", "Search": "検索",
"Search a model": "モデルを検索", "Search a model": "モデルを検索",
"Search Documents": "ドキュメントを検索", "Search Documents": "ドキュメントを検索",
"Search Models": "",
"Search Prompts": "プロンプトを検索", "Search Prompts": "プロンプトを検索",
"See readme.md for instructions": "手順については readme.md を参照してください", "See readme.md for instructions": "手順については readme.md を参照してください",
"See what's new": "新機能を見る", "See what's new": "新機能を見る",
"Seed": "シード", "Seed": "シード",
"Select a base model": "",
"Select a mode": "モードを選択", "Select a mode": "モードを選択",
"Select a model": "モデルを選択", "Select a model": "モデルを選択",
"Select an Ollama instance": "Ollama インスタンスを選択", "Select an Ollama instance": "Ollama インスタンスを選択",
"Select model": "モデルを選択", "Select model": "モデルを選択",
"Selected model(s) do not support image inputs": "",
"Send": "送信", "Send": "送信",
"Send a Message": "メッセージを送信", "Send a Message": "メッセージを送信",
"Send message": "メッセージを送信", "Send message": "メッセージを送信",
@ -406,7 +394,6 @@
"Share to OpenWebUI Community": "OpenWebUI コミュニティに共有", "Share to OpenWebUI Community": "OpenWebUI コミュニティに共有",
"short-summary": "short-summary", "short-summary": "short-summary",
"Show": "表示", "Show": "表示",
"Show Additional Params": "追加パラメーターを表示",
"Show shortcuts": "表示", "Show shortcuts": "表示",
"Showcased creativity": "創造性を披露", "Showcased creativity": "創造性を披露",
"sidebar": "サイドバー", "sidebar": "サイドバー",
@ -425,7 +412,6 @@
"Success": "成功", "Success": "成功",
"Successfully updated.": "正常に更新されました。", "Successfully updated.": "正常に更新されました。",
"Suggested": "提案", "Suggested": "提案",
"Sync All": "すべてを同期",
"System": "システム", "System": "システム",
"System Prompt": "システムプロンプト", "System Prompt": "システムプロンプト",
"Tags": "タグ", "Tags": "タグ",
@ -494,6 +480,7 @@
"Write a summary in 50 words that summarizes [topic or keyword].": "[トピックまたはキーワード] を要約する 50 語の概要を書いてください。", "Write a summary in 50 words that summarizes [topic or keyword].": "[トピックまたはキーワード] を要約する 50 語の概要を書いてください。",
"Yesterday": "昨日", "Yesterday": "昨日",
"You": "あなた", "You": "あなた",
"You cannot clone a base model": "",
"You have no archived conversations.": "これまでにアーカイブされた会話はありません。", "You have no archived conversations.": "これまでにアーカイブされた会話はありません。",
"You have shared this chat": "このチャットを共有しました", "You have shared this chat": "このチャットを共有しました",
"You're a helpful assistant.": "あなたは役に立つアシスタントです。", "You're a helpful assistant.": "あなたは役に立つアシスタントです。",

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