mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-11 20:05:19 +00:00
Merge remote-tracking branch 'upstream/dev' into feat/include-git-hash-everywhere
This commit is contained in:
commit
aba6308825
133 changed files with 5297 additions and 5813 deletions
|
|
@ -11,7 +11,3 @@ OPENAI_API_KEY=''
|
|||
SCARF_NO_ANALYTICS=true
|
||||
DO_NOT_TRACK=true
|
||||
ANONYMIZED_TELEMETRY=false
|
||||
|
||||
# Use locally bundled version of the LiteLLM cost map json
|
||||
# to avoid repetitive startup connections
|
||||
LITELLM_LOCAL_MODEL_COST_MAP="True"
|
||||
|
|
@ -63,11 +63,6 @@ ENV OPENAI_API_KEY="" \
|
|||
DO_NOT_TRACK=true \
|
||||
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 #########################################################
|
||||
## whisper TTS model settings ##
|
||||
ENV WHISPER_MODEL="base" \
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
|
|
@ -29,8 +29,8 @@ import time
|
|||
from urllib.parse import urlparse
|
||||
from typing import Optional, List, Union
|
||||
|
||||
|
||||
from apps.web.models.users import Users
|
||||
from apps.webui.models.models import Models
|
||||
from apps.webui.models.users import Users
|
||||
from constants import ERROR_MESSAGES
|
||||
from utils.utils import (
|
||||
decode_token,
|
||||
|
|
@ -39,6 +39,8 @@ from utils.utils import (
|
|||
get_admin_user,
|
||||
)
|
||||
|
||||
from utils.models import get_model_id_from_custom_model_id
|
||||
|
||||
|
||||
from config import (
|
||||
SRC_LOG_LEVELS,
|
||||
|
|
@ -68,7 +70,6 @@ app.state.config = AppConfig()
|
|||
app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
|
||||
app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
|
||||
|
||||
|
||||
app.state.config.ENABLE_OLLAMA_API = ENABLE_OLLAMA_API
|
||||
app.state.config.OLLAMA_BASE_URLS = OLLAMA_BASE_URLS
|
||||
app.state.MODELS = {}
|
||||
|
|
@ -305,6 +306,9 @@ async def pull_model(
|
|||
|
||||
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():
|
||||
nonlocal url
|
||||
nonlocal r
|
||||
|
|
@ -332,7 +336,7 @@ async def pull_model(
|
|||
r = requests.request(
|
||||
method="POST",
|
||||
url=f"{url}/api/pull",
|
||||
data=form_data.model_dump_json(exclude_none=True).encode(),
|
||||
data=json.dumps(payload),
|
||||
stream=True,
|
||||
)
|
||||
|
||||
|
|
@ -875,14 +879,93 @@ async def generate_chat_completion(
|
|||
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:
|
||||
model = form_data.model
|
||||
if ":" not in payload["model"]:
|
||||
payload["model"] = f"{payload['model']}:latest"
|
||||
|
||||
if ":" not in model:
|
||||
model = f"{model}:latest"
|
||||
|
||||
if model in app.state.MODELS:
|
||||
url_idx = random.choice(app.state.MODELS[model]["urls"])
|
||||
if payload["model"] in app.state.MODELS:
|
||||
url_idx = random.choice(app.state.MODELS[payload["model"]]["urls"])
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
|
|
@ -892,16 +975,12 @@ async def generate_chat_completion(
|
|||
url = app.state.config.OLLAMA_BASE_URLS[url_idx]
|
||||
log.info(f"url: {url}")
|
||||
|
||||
print(payload)
|
||||
|
||||
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():
|
||||
nonlocal form_data
|
||||
nonlocal payload
|
||||
nonlocal r
|
||||
|
||||
request_id = str(uuid.uuid4())
|
||||
|
|
@ -910,7 +989,7 @@ async def generate_chat_completion(
|
|||
|
||||
def stream_content():
|
||||
try:
|
||||
if form_data.stream:
|
||||
if payload.get("stream", None):
|
||||
yield json.dumps({"id": request_id, "done": False}) + "\n"
|
||||
|
||||
for chunk in r.iter_content(chunk_size=8192):
|
||||
|
|
@ -928,7 +1007,7 @@ async def generate_chat_completion(
|
|||
r = requests.request(
|
||||
method="POST",
|
||||
url=f"{url}/api/chat",
|
||||
data=form_data.model_dump_json(exclude_none=True).encode(),
|
||||
data=json.dumps(payload),
|
||||
stream=True,
|
||||
)
|
||||
|
||||
|
|
@ -984,14 +1063,62 @@ async def generate_openai_chat_completion(
|
|||
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:
|
||||
model = form_data.model
|
||||
if ":" not in payload["model"]:
|
||||
payload["model"] = f"{payload['model']}:latest"
|
||||
|
||||
if ":" not in model:
|
||||
model = f"{model}:latest"
|
||||
|
||||
if model in app.state.MODELS:
|
||||
url_idx = random.choice(app.state.MODELS[model]["urls"])
|
||||
if payload["model"] in app.state.MODELS:
|
||||
url_idx = random.choice(app.state.MODELS[payload["model"]]["urls"])
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
|
|
@ -1004,7 +1131,7 @@ async def generate_openai_chat_completion(
|
|||
r = None
|
||||
|
||||
def get_request():
|
||||
nonlocal form_data
|
||||
nonlocal payload
|
||||
nonlocal r
|
||||
|
||||
request_id = str(uuid.uuid4())
|
||||
|
|
@ -1013,7 +1140,7 @@ async def generate_openai_chat_completion(
|
|||
|
||||
def stream_content():
|
||||
try:
|
||||
if form_data.stream:
|
||||
if payload.get("stream"):
|
||||
yield json.dumps(
|
||||
{"request_id": request_id, "done": False}
|
||||
) + "\n"
|
||||
|
|
@ -1033,7 +1160,7 @@ async def generate_openai_chat_completion(
|
|||
r = requests.request(
|
||||
method="POST",
|
||||
url=f"{url}/v1/chat/completions",
|
||||
data=form_data.model_dump_json(exclude_none=True).encode(),
|
||||
data=json.dumps(payload),
|
||||
stream=True,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ import logging
|
|||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
from apps.web.models.users import Users
|
||||
from apps.webui.models.models import Models
|
||||
from apps.webui.models.users import Users
|
||||
from constants import ERROR_MESSAGES
|
||||
from utils.utils import (
|
||||
decode_token,
|
||||
|
|
@ -53,7 +53,6 @@ app.state.config = AppConfig()
|
|||
app.state.config.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
|
||||
app.state.config.MODEL_FILTER_LIST = MODEL_FILTER_LIST
|
||||
|
||||
|
||||
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_KEYS = OPENAI_API_KEYS
|
||||
|
|
@ -206,7 +205,13 @@ def merge_models_lists(model_lists):
|
|||
if models is not None and "error" not in models:
|
||||
merged_list.extend(
|
||||
[
|
||||
{**model, "urlIdx": idx}
|
||||
{
|
||||
**model,
|
||||
"name": model.get("name", model["id"]),
|
||||
"owned_by": "openai",
|
||||
"openai": model,
|
||||
"urlIdx": idx,
|
||||
}
|
||||
for model in models
|
||||
if "api.openai.com"
|
||||
not in app.state.config.OPENAI_API_BASE_URLS[idx]
|
||||
|
|
@ -310,39 +315,93 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)):
|
|||
body = await request.body()
|
||||
# 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)
|
||||
|
||||
payload = None
|
||||
|
||||
try:
|
||||
if "chat/completions" in path:
|
||||
body = body.decode("utf-8")
|
||||
body = json.loads(body)
|
||||
|
||||
model = app.state.MODELS[body.get("model")]
|
||||
payload = {**body}
|
||||
|
||||
model_id = body.get("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),
|
||||
},
|
||||
)
|
||||
else:
|
||||
pass
|
||||
|
||||
print(app.state.MODELS)
|
||||
model = app.state.MODELS[payload.get("model")]
|
||||
|
||||
idx = model["urlIdx"]
|
||||
|
||||
if "pipeline" in model and model.get("pipeline"):
|
||||
body["user"] = {"name": user.name, "id": user.id}
|
||||
body["title"] = (
|
||||
True if body["stream"] == False and body["max_tokens"] == 50 else False
|
||||
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 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 "num_ctx" in body:
|
||||
# If 'num_ctx' is in the dictionary, delete it
|
||||
# Leaving it there generates an error with the
|
||||
# OpenAI API (Feb 2024)
|
||||
del body["num_ctx"]
|
||||
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
|
||||
body = json.dumps(body)
|
||||
payload = json.dumps(payload)
|
||||
|
||||
except json.JSONDecodeError as e:
|
||||
log.error("Error loading request body into a dictionary:", e)
|
||||
|
||||
print(payload)
|
||||
|
||||
url = app.state.config.OPENAI_API_BASE_URLS[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(
|
||||
method=request.method,
|
||||
url=target_url,
|
||||
data=body,
|
||||
data=payload if payload else body,
|
||||
headers=headers,
|
||||
stream=True,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ import json
|
|||
|
||||
import sentence_transformers
|
||||
|
||||
from apps.web.models.documents import (
|
||||
from apps.webui.models.documents import (
|
||||
Documents,
|
||||
DocumentForm,
|
||||
DocumentResponse,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
import json
|
||||
|
||||
from peewee import *
|
||||
from peewee_migrate import Router
|
||||
from playhouse.db_url import connect
|
||||
|
|
@ -8,6 +10,16 @@ import logging
|
|||
log = logging.getLogger(__name__)
|
||||
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
|
||||
if os.path.exists(f"{DATA_DIR}/ollama.db"):
|
||||
# Rename the file
|
||||
|
|
@ -19,7 +31,9 @@ else:
|
|||
DB = connect(DATABASE_URL)
|
||||
log.info(f"Connected to a {DB.__class__.__name__} database.")
|
||||
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()
|
||||
DB.connect(reuse_if_open=True)
|
||||
61
backend/apps/webui/internal/migrations/009_add_models.py
Normal file
61
backend/apps/webui/internal/migrations/009_add_models.py
Normal 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")
|
||||
|
|
@ -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,
|
||||
)
|
||||
|
|
@ -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.
|
||||
3. From the `backend` directory, run the following command:
|
||||
```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.
|
||||
- `$MIGRATION_NAME` should be a descriptive name for the migration.
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
from fastapi import FastAPI, Depends
|
||||
from fastapi.routing import APIRoute
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from apps.web.routers import (
|
||||
from apps.webui.routers import (
|
||||
auths,
|
||||
users,
|
||||
chats,
|
||||
documents,
|
||||
modelfiles,
|
||||
models,
|
||||
prompts,
|
||||
configs,
|
||||
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.USER_PERMISSIONS = USER_PERMISSIONS
|
||||
app.state.config.WEBHOOK_URL = WEBHOOK_URL
|
||||
|
||||
|
||||
app.state.MODELS = {}
|
||||
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(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(memories.router, prefix="/memories", tags=["memories"])
|
||||
|
||||
|
||||
app.include_router(configs.router, prefix="/configs", tags=["configs"])
|
||||
app.include_router(utils.router, prefix="/utils", tags=["utils"])
|
||||
|
||||
|
|
@ -5,10 +5,10 @@ import uuid
|
|||
import logging
|
||||
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 apps.web.internal.db import DB
|
||||
from apps.webui.internal.db import DB
|
||||
|
||||
from config import SRC_LOG_LEVELS
|
||||
|
||||
|
|
@ -7,7 +7,7 @@ import json
|
|||
import uuid
|
||||
import time
|
||||
|
||||
from apps.web.internal.db import DB
|
||||
from apps.webui.internal.db import DB
|
||||
|
||||
####################
|
||||
# Chat DB Schema
|
||||
|
|
@ -191,6 +191,20 @@ class ChatTable:
|
|||
except:
|
||||
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(
|
||||
self, user_id: str, skip: int = 0, limit: int = 50
|
||||
) -> List[ChatModel]:
|
||||
|
|
@ -205,8 +219,22 @@ class ChatTable:
|
|||
]
|
||||
|
||||
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]:
|
||||
if include_archived:
|
||||
return [
|
||||
ChatModel(**model_to_dict(chat))
|
||||
for chat in Chat.select()
|
||||
.where(Chat.user_id == user_id)
|
||||
.order_by(Chat.updated_at.desc())
|
||||
# .limit(limit)
|
||||
# .offset(skip)
|
||||
]
|
||||
else:
|
||||
return [
|
||||
ChatModel(**model_to_dict(chat))
|
||||
for chat in Chat.select()
|
||||
|
|
@ -8,7 +8,7 @@ import logging
|
|||
from utils.utils import decode_token
|
||||
from utils.misc import get_gravatar_url
|
||||
|
||||
from apps.web.internal.db import DB
|
||||
from apps.webui.internal.db import DB
|
||||
|
||||
import json
|
||||
|
||||
|
|
@ -3,8 +3,8 @@ from peewee import *
|
|||
from playhouse.shortcuts import model_to_dict
|
||||
from typing import List, Union, Optional
|
||||
|
||||
from apps.web.internal.db import DB
|
||||
from apps.web.models.chats import Chats
|
||||
from apps.webui.internal.db import DB
|
||||
from apps.webui.models.chats import Chats
|
||||
|
||||
import time
|
||||
import uuid
|
||||
179
backend/apps/webui/models/models.py
Normal file
179
backend/apps/webui/models/models.py
Normal 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)
|
||||
|
|
@ -7,7 +7,7 @@ import time
|
|||
from utils.utils import decode_token
|
||||
from utils.misc import get_gravatar_url
|
||||
|
||||
from apps.web.internal.db import DB
|
||||
from apps.webui.internal.db import DB
|
||||
|
||||
import json
|
||||
|
||||
|
|
@ -8,7 +8,7 @@ import uuid
|
|||
import time
|
||||
import logging
|
||||
|
||||
from apps.web.internal.db import DB
|
||||
from apps.webui.internal.db import DB
|
||||
|
||||
from config import SRC_LOG_LEVELS
|
||||
|
||||
|
|
@ -5,8 +5,8 @@ from typing import List, Union, Optional
|
|||
import time
|
||||
from utils.misc import get_gravatar_url
|
||||
|
||||
from apps.web.internal.db import DB
|
||||
from apps.web.models.chats import Chats
|
||||
from apps.webui.internal.db import DB
|
||||
from apps.webui.models.chats import Chats
|
||||
|
||||
####################
|
||||
# User DB Schema
|
||||
|
|
@ -10,7 +10,7 @@ import uuid
|
|||
import csv
|
||||
|
||||
|
||||
from apps.web.models.auths import (
|
||||
from apps.webui.models.auths import (
|
||||
SigninForm,
|
||||
SignupForm,
|
||||
AddUserForm,
|
||||
|
|
@ -21,7 +21,7 @@ from apps.web.models.auths import (
|
|||
Auths,
|
||||
ApiKey,
|
||||
)
|
||||
from apps.web.models.users import Users
|
||||
from apps.webui.models.users import Users
|
||||
|
||||
from utils.utils import (
|
||||
get_password_hash,
|
||||
|
|
@ -7,8 +7,8 @@ from pydantic import BaseModel
|
|||
import json
|
||||
import logging
|
||||
|
||||
from apps.web.models.users import Users
|
||||
from apps.web.models.chats import (
|
||||
from apps.webui.models.users import Users
|
||||
from apps.webui.models.chats import (
|
||||
ChatModel,
|
||||
ChatResponse,
|
||||
ChatTitleForm,
|
||||
|
|
@ -18,7 +18,7 @@ from apps.web.models.chats import (
|
|||
)
|
||||
|
||||
|
||||
from apps.web.models.tags import (
|
||||
from apps.webui.models.tags import (
|
||||
TagModel,
|
||||
ChatIdTagModel,
|
||||
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(
|
||||
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)
|
||||
|
||||
|
||||
############################
|
||||
# GetArchivedChats
|
||||
############################
|
||||
|
||||
|
||||
@router.get("/archived", response_model=List[ChatTitleIdResponse])
|
||||
async def get_archived_session_user_chat_list(
|
||||
user=Depends(get_current_user), skip: int = 0, limit: int = 50
|
||||
):
|
||||
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
|
||||
return Chats.get_chat_list_by_user_id(
|
||||
user_id, include_archived=True, skip=skip, limit=limit
|
||||
)
|
||||
|
||||
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:
|
||||
############################
|
||||
# CreateNewChat
|
||||
############################
|
||||
|
||||
|
||||
@router.post("/new", response_model=Optional[ChatResponse])
|
||||
async def create_new_chat(form_data: ChatForm, user=Depends(get_current_user)):
|
||||
try:
|
||||
chat = Chats.insert_new_chat(user.id, form_data)
|
||||
return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
|
||||
else:
|
||||
except Exception as e:
|
||||
log.exception(e)
|
||||
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])
|
||||
async def create_new_chat(form_data: ChatForm, user=Depends(get_current_user)):
|
||||
try:
|
||||
chat = Chats.insert_new_chat(user.id, form_data)
|
||||
return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
|
||||
except Exception as e:
|
||||
log.exception(e)
|
||||
@router.get("/archived", response_model=List[ChatTitleIdResponse])
|
||||
async def get_archived_session_user_chat_list(
|
||||
user=Depends(get_current_user), skip: int = 0, limit: int = 50
|
||||
):
|
||||
return Chats.get_archived_chat_list_by_user_id(user.id, skip, limit)
|
||||
|
||||
|
||||
############################
|
||||
# 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(
|
||||
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
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -8,7 +8,7 @@ from pydantic import BaseModel
|
|||
import time
|
||||
import uuid
|
||||
|
||||
from apps.web.models.users import Users
|
||||
from apps.webui.models.users import Users
|
||||
|
||||
from utils.utils import (
|
||||
get_password_hash,
|
||||
|
|
@ -6,7 +6,7 @@ from fastapi import APIRouter
|
|||
from pydantic import BaseModel
|
||||
import json
|
||||
|
||||
from apps.web.models.documents import (
|
||||
from apps.webui.models.documents import (
|
||||
Documents,
|
||||
DocumentForm,
|
||||
DocumentUpdateForm,
|
||||
|
|
@ -7,7 +7,7 @@ from fastapi import APIRouter
|
|||
from pydantic import BaseModel
|
||||
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 constants import ERROR_MESSAGES
|
||||
108
backend/apps/webui/routers/models.py
Normal file
108
backend/apps/webui/routers/models.py
Normal 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
|
||||
|
|
@ -6,7 +6,7 @@ from fastapi import APIRouter
|
|||
from pydantic import BaseModel
|
||||
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 constants import ERROR_MESSAGES
|
||||
|
|
@ -9,9 +9,9 @@ import time
|
|||
import uuid
|
||||
import logging
|
||||
|
||||
from apps.web.models.users import UserModel, UserUpdateForm, UserRoleUpdateForm, Users
|
||||
from apps.web.models.auths import Auths
|
||||
from apps.web.models.chats import Chats
|
||||
from apps.webui.models.users import UserModel, UserUpdateForm, UserRoleUpdateForm, Users
|
||||
from apps.webui.models.auths import Auths
|
||||
from apps.webui.models.chats import Chats
|
||||
|
||||
from utils.utils import get_verified_user, get_password_hash, get_admin_user
|
||||
from constants import ERROR_MESSAGES
|
||||
|
|
@ -8,7 +8,7 @@ from pydantic import BaseModel
|
|||
from fpdf import FPDF
|
||||
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.misc import calculate_sha256, get_gravatar_url
|
||||
|
||||
|
|
@ -27,6 +27,8 @@ from constants import ERROR_MESSAGES
|
|||
BACKEND_DIR = Path(__file__).parent # the path containing this file
|
||||
BASE_DIR = BACKEND_DIR.parent # the path containing the backend/
|
||||
|
||||
print(BASE_DIR)
|
||||
|
||||
try:
|
||||
from dotenv import load_dotenv, find_dotenv
|
||||
|
||||
|
|
@ -56,7 +58,6 @@ log_sources = [
|
|||
"CONFIG",
|
||||
"DB",
|
||||
"IMAGES",
|
||||
"LITELLM",
|
||||
"MAIN",
|
||||
"MODELS",
|
||||
"OLLAMA",
|
||||
|
|
@ -122,7 +123,10 @@ def parse_section(section):
|
|||
|
||||
|
||||
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:
|
||||
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"
|
||||
|
||||
if not os.path.exists(LITELLM_CONFIG_PATH):
|
||||
log.info("Config file doesn't exist. Creating...")
|
||||
create_config_file(LITELLM_CONFIG_PATH)
|
||||
log.info("Config file created successfully.")
|
||||
# if not os.path.exists(LITELLM_CONFIG_PATH):
|
||||
# log.info("Config file doesn't exist. Creating...")
|
||||
# create_config_file(LITELLM_CONFIG_PATH)
|
||||
# log.info("Config file created successfully.")
|
||||
|
||||
|
||||
####################################
|
||||
|
|
@ -826,18 +830,6 @@ AUDIO_OPENAI_API_VOICE = PersistentConfig(
|
|||
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
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ class ERROR_MESSAGES(str, Enum):
|
|||
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."
|
||||
|
||||
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."
|
||||
INVALID_TOKEN = (
|
||||
"Your session has expired or the token is invalid. Please sign in again."
|
||||
|
|
|
|||
140
backend/main.py
140
backend/main.py
|
|
@ -19,27 +19,20 @@ from starlette.exceptions import HTTPException as StarletteHTTPException
|
|||
from starlette.middleware.base import BaseHTTPMiddleware
|
||||
from starlette.responses import StreamingResponse, Response
|
||||
|
||||
from apps.ollama.main import app as ollama_app
|
||||
from apps.openai.main import app as openai_app
|
||||
|
||||
from apps.litellm.main import (
|
||||
app as litellm_app,
|
||||
start_litellm_background,
|
||||
shutdown_litellm_background,
|
||||
)
|
||||
|
||||
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, get_all_models as get_openai_models
|
||||
|
||||
from apps.audio.main import app as audio_app
|
||||
from apps.images.main import app as images_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
|
||||
from pydantic import BaseModel
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
|
||||
from utils.utils import get_admin_user
|
||||
from apps.webui.models.models import Models, ModelModel
|
||||
from utils.utils import get_admin_user, get_verified_user
|
||||
from apps.rag.utils import rag_messages
|
||||
|
||||
from config import (
|
||||
|
|
@ -53,7 +46,8 @@ from config import (
|
|||
FRONTEND_BUILD_DIR,
|
||||
CACHE_DIR,
|
||||
STATIC_DIR,
|
||||
ENABLE_LITELLM,
|
||||
ENABLE_OPENAI_API,
|
||||
ENABLE_OLLAMA_API,
|
||||
ENABLE_MODEL_FILTER,
|
||||
MODEL_FILTER_LIST,
|
||||
GLOBAL_LOG_LEVEL,
|
||||
|
|
@ -100,11 +94,7 @@ https://github.com/open-webui/open-webui
|
|||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
if ENABLE_LITELLM:
|
||||
asyncio.create_task(start_litellm_background())
|
||||
yield
|
||||
if ENABLE_LITELLM:
|
||||
await shutdown_litellm_background()
|
||||
|
||||
|
||||
app = FastAPI(
|
||||
|
|
@ -112,11 +102,19 @@ app = FastAPI(
|
|||
)
|
||||
|
||||
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.MODEL_FILTER_LIST = MODEL_FILTER_LIST
|
||||
|
||||
|
||||
app.state.config.WEBHOOK_URL = WEBHOOK_URL
|
||||
|
||||
|
||||
app.state.MODELS = {}
|
||||
|
||||
origins = ["*"]
|
||||
|
||||
|
||||
|
|
@ -233,6 +231,11 @@ app.add_middleware(
|
|||
|
||||
@app.middleware("http")
|
||||
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())
|
||||
response = await call_next(request)
|
||||
process_time = int(time.time()) - start_time
|
||||
|
|
@ -249,9 +252,8 @@ async def update_embedding_function(request: Request, call_next):
|
|||
return response
|
||||
|
||||
|
||||
app.mount("/litellm/api", litellm_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("/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
|
||||
|
||||
|
||||
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")
|
||||
async def get_app_config():
|
||||
# Checking and Handling the Absence of 'ui' in CONFIG_DATA
|
||||
|
|
@ -276,12 +359,13 @@ async def get_app_config():
|
|||
"name": WEBUI_NAME,
|
||||
"version": VERSION,
|
||||
"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,
|
||||
"images": images_app.state.config.ENABLED,
|
||||
"default_models": webui_app.state.config.DEFAULT_MODELS,
|
||||
"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.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 {
|
||||
"enabled": app.state.config.ENABLE_MODEL_FILTER,
|
||||
"models": app.state.config.MODEL_FILTER_LIST,
|
||||
|
|
@ -334,7 +409,6 @@ class UrlForm(BaseModel):
|
|||
@app.post("/api/webhook")
|
||||
async def update_webhook_url(form_data: UrlForm, user=Depends(get_admin_user)):
|
||||
app.state.config.WEBHOOK_URL = form_data.url
|
||||
|
||||
webui_app.state.WEBHOOK_URL = app.state.config.WEBHOOK_URL
|
||||
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -18,8 +18,6 @@ psycopg2-binary==2.9.9
|
|||
PyMySQL==1.1.1
|
||||
bcrypt==4.1.3
|
||||
|
||||
litellm[proxy]==1.37.20
|
||||
|
||||
boto3==1.34.110
|
||||
|
||||
argon2-cffi==23.1.0
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -34,11 +34,6 @@ fi
|
|||
# Check if SPACE_ID is set, if so, configure for space
|
||||
if [ -n "$SPACE_ID" ]; then
|
||||
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
|
||||
echo "Admin user configured, creating"
|
||||
WEBUI_SECRET_KEY="$WEBUI_SECRET_KEY" uvicorn main:app --host "$HOST" --port "$PORT" --forwarded-allow-ips '*' &
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
from pathlib import Path
|
||||
import hashlib
|
||||
import json
|
||||
import re
|
||||
from datetime import timedelta
|
||||
from typing import Optional
|
||||
|
|
@ -110,3 +111,76 @@ def parse_duration(duration: str) -> Optional[timedelta]:
|
|||
total_duration += timedelta(weeks=number)
|
||||
|
||||
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
10
backend/utils/models.py
Normal 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
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
||||
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 typing import Union, Optional
|
||||
|
|
|
|||
|
|
@ -273,7 +273,6 @@ langsmith==0.1.57
|
|||
# via langchain-community
|
||||
# via langchain-core
|
||||
litellm==1.37.20
|
||||
# via litellm
|
||||
# via open-webui
|
||||
lxml==5.2.2
|
||||
# via unstructured
|
||||
|
|
@ -396,7 +395,6 @@ pandas==2.2.2
|
|||
# via open-webui
|
||||
passlib==1.7.4
|
||||
# via open-webui
|
||||
# via passlib
|
||||
pathspec==0.12.1
|
||||
# via black
|
||||
peewee==3.17.5
|
||||
|
|
@ -454,7 +452,6 @@ pygments==2.18.0
|
|||
pyjwt==2.8.0
|
||||
# via litellm
|
||||
# via open-webui
|
||||
# via pyjwt
|
||||
pymysql==1.1.0
|
||||
# via open-webui
|
||||
pypandoc==1.13
|
||||
|
|
@ -559,6 +556,9 @@ scipy==1.13.0
|
|||
# via sentence-transformers
|
||||
sentence-transformers==2.7.0
|
||||
# via open-webui
|
||||
setuptools==69.5.1
|
||||
# via ctranslate2
|
||||
# via opentelemetry-instrumentation
|
||||
shapely==2.0.4
|
||||
# via rapidocr-onnxruntime
|
||||
shellingham==1.5.4
|
||||
|
|
@ -659,7 +659,6 @@ uvicorn==0.22.0
|
|||
# via fastapi
|
||||
# via litellm
|
||||
# via open-webui
|
||||
# via uvicorn
|
||||
uvloop==0.19.0
|
||||
# via uvicorn
|
||||
validators==0.28.1
|
||||
|
|
@ -687,6 +686,3 @@ youtube-transcript-api==0.6.2
|
|||
# via open-webui
|
||||
zipp==3.18.1
|
||||
# via importlib-metadata
|
||||
setuptools==69.5.1
|
||||
# via ctranslate2
|
||||
# via opentelemetry-instrumentation
|
||||
|
|
|
|||
|
|
@ -273,7 +273,6 @@ langsmith==0.1.57
|
|||
# via langchain-community
|
||||
# via langchain-core
|
||||
litellm==1.37.20
|
||||
# via litellm
|
||||
# via open-webui
|
||||
lxml==5.2.2
|
||||
# via unstructured
|
||||
|
|
@ -396,7 +395,6 @@ pandas==2.2.2
|
|||
# via open-webui
|
||||
passlib==1.7.4
|
||||
# via open-webui
|
||||
# via passlib
|
||||
pathspec==0.12.1
|
||||
# via black
|
||||
peewee==3.17.5
|
||||
|
|
@ -454,7 +452,6 @@ pygments==2.18.0
|
|||
pyjwt==2.8.0
|
||||
# via litellm
|
||||
# via open-webui
|
||||
# via pyjwt
|
||||
pymysql==1.1.0
|
||||
# via open-webui
|
||||
pypandoc==1.13
|
||||
|
|
@ -559,6 +556,9 @@ scipy==1.13.0
|
|||
# via sentence-transformers
|
||||
sentence-transformers==2.7.0
|
||||
# via open-webui
|
||||
setuptools==69.5.1
|
||||
# via ctranslate2
|
||||
# via opentelemetry-instrumentation
|
||||
shapely==2.0.4
|
||||
# via rapidocr-onnxruntime
|
||||
shellingham==1.5.4
|
||||
|
|
@ -659,7 +659,6 @@ uvicorn==0.22.0
|
|||
# via fastapi
|
||||
# via litellm
|
||||
# via open-webui
|
||||
# via uvicorn
|
||||
uvloop==0.19.0
|
||||
# via uvicorn
|
||||
validators==0.28.1
|
||||
|
|
@ -687,6 +686,3 @@ youtube-transcript-api==0.6.2
|
|||
# via open-webui
|
||||
zipp==3.18.1
|
||||
# via importlib-metadata
|
||||
setuptools==69.5.1
|
||||
# via ctranslate2
|
||||
# via opentelemetry-instrumentation
|
||||
|
|
|
|||
|
|
@ -654,3 +654,35 @@ export const deleteAllChats = async (token: string) => {
|
|||
|
||||
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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,54 @@
|
|||
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 () => {
|
||||
let error = null;
|
||||
|
||||
|
|
@ -196,3 +245,77 @@ export const updateWebhookUrl = async (token: string, url: string) => {
|
|||
|
||||
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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
@ -1,18 +1,16 @@
|
|||
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;
|
||||
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/modelfiles/create`, {
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/models/add`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
authorization: `Bearer ${token}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
modelfile: modelfile
|
||||
})
|
||||
body: JSON.stringify(model)
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (!res.ok) throw await res.json();
|
||||
|
|
@ -31,10 +29,10 @@ export const createNewModelfile = async (token: string, modelfile: object) => {
|
|||
return res;
|
||||
};
|
||||
|
||||
export const getModelfiles = async (token: string = '') => {
|
||||
export const getModelInfos = async (token: string = '') => {
|
||||
let error = null;
|
||||
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/modelfiles/`, {
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/models`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
|
|
@ -59,62 +57,22 @@ export const getModelfiles = async (token: string = '') => {
|
|||
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;
|
||||
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/modelfiles/`, {
|
||||
method: 'POST',
|
||||
const searchParams = new URLSearchParams();
|
||||
searchParams.append('id', id);
|
||||
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/models?${searchParams.toString()}`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
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) => {
|
||||
if (!res.ok) throw await res.json();
|
||||
|
|
@ -137,19 +95,55 @@ export const updateModelfileByTagName = async (
|
|||
return res;
|
||||
};
|
||||
|
||||
export const deleteModelfileByTagName = async (token: string, tagName: string) => {
|
||||
export const updateModelById = async (token: string, id: string, model: object) => {
|
||||
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',
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
authorization: `Bearer ${token}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
tag_name: tagName
|
||||
})
|
||||
}
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (!res.ok) throw await res.json();
|
||||
|
|
@ -164,7 +164,7 @@ export const getOllamaVersion = async (token: string = '') => {
|
|||
throw error;
|
||||
}
|
||||
|
||||
return res?.version ?? '';
|
||||
return res?.version ?? false;
|
||||
};
|
||||
|
||||
export const getOllamaModels = async (token: string = '') => {
|
||||
|
|
|
|||
|
|
@ -230,7 +230,12 @@ export const getOpenAIModels = async (token: string = '') => {
|
|||
|
||||
return 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) => {
|
||||
return a.name.localeCompare(b.name);
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,13 +1,24 @@
|
|||
<script lang="ts">
|
||||
import fileSaver from 'file-saver';
|
||||
const { saveAs } = fileSaver;
|
||||
|
||||
import { downloadDatabase } from '$lib/apis/utils';
|
||||
import { onMount, getContext } from 'svelte';
|
||||
import { config } from '$lib/stores';
|
||||
import { config, user } from '$lib/stores';
|
||||
import { toast } from 'svelte-sonner';
|
||||
import { getAllUserChats } from '$lib/apis/chats';
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
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 () => {
|
||||
// permissions = await getUserPermissions(localStorage.token);
|
||||
});
|
||||
|
|
@ -23,10 +34,10 @@
|
|||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Database')}</div>
|
||||
|
||||
{#if $config?.enable_admin_export ?? true}
|
||||
<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
|
||||
class=" flex rounded-md py-1.5 px-3 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
|
||||
type="button"
|
||||
|
|
@ -55,8 +66,36 @@
|
|||
</div>
|
||||
<div class=" self-center text-sm font-medium">{$i18n.t('Download Database')}</div>
|
||||
</button>
|
||||
{/if}
|
||||
</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>
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
chatId,
|
||||
chats,
|
||||
config,
|
||||
modelfiles,
|
||||
type Model,
|
||||
models,
|
||||
settings,
|
||||
showSidebar,
|
||||
|
|
@ -35,12 +35,7 @@
|
|||
import MessageInput from '$lib/components/chat/MessageInput.svelte';
|
||||
import Messages from '$lib/components/chat/Messages.svelte';
|
||||
import Navbar from '$lib/components/layout/Navbar.svelte';
|
||||
import {
|
||||
LITELLM_API_BASE_URL,
|
||||
OLLAMA_API_BASE_URL,
|
||||
OPENAI_API_BASE_URL,
|
||||
WEBUI_BASE_URL
|
||||
} from '$lib/constants';
|
||||
import { OLLAMA_API_BASE_URL, OPENAI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants';
|
||||
import { createOpenAITextStream } from '$lib/apis/streaming';
|
||||
import { queryMemory } from '$lib/apis/memories';
|
||||
import type { Writable } from 'svelte/store';
|
||||
|
|
@ -60,25 +55,7 @@
|
|||
let showModelSelector = true;
|
||||
|
||||
let selectedModels = [''];
|
||||
let atSelectedModel = '';
|
||||
|
||||
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 atSelectedModel: Model | undefined;
|
||||
|
||||
let chat = null;
|
||||
let tags = [];
|
||||
|
|
@ -164,6 +141,7 @@
|
|||
|
||||
if ($page.url.searchParams.get('q')) {
|
||||
prompt = $page.url.searchParams.get('q') ?? '';
|
||||
|
||||
if (prompt) {
|
||||
await tick();
|
||||
submitPrompt(prompt);
|
||||
|
|
@ -211,7 +189,7 @@
|
|||
await settings.set({
|
||||
..._settings,
|
||||
system: chatContent.system ?? _settings.system,
|
||||
options: chatContent.options ?? _settings.options
|
||||
params: chatContent.options ?? _settings.params
|
||||
});
|
||||
autoScroll = true;
|
||||
await tick();
|
||||
|
|
@ -300,7 +278,7 @@
|
|||
models: selectedModels,
|
||||
system: $settings.system ?? undefined,
|
||||
options: {
|
||||
...($settings.options ?? {})
|
||||
...($settings.params ?? {})
|
||||
},
|
||||
messages: messages,
|
||||
history: history,
|
||||
|
|
@ -317,6 +295,7 @@
|
|||
|
||||
// Reset chat input textarea
|
||||
prompt = '';
|
||||
document.getElementById('chat-textarea').style.height = '';
|
||||
files = [];
|
||||
|
||||
// Send prompt
|
||||
|
|
@ -328,12 +307,29 @@
|
|||
const _chatId = JSON.parse(JSON.stringify($chatId));
|
||||
|
||||
await Promise.all(
|
||||
(modelId ? [modelId] : atSelectedModel !== '' ? [atSelectedModel.id] : selectedModels).map(
|
||||
async (modelId) => {
|
||||
(modelId
|
||||
? [modelId]
|
||||
: atSelectedModel !== undefined
|
||||
? [atSelectedModel.id]
|
||||
: selectedModels
|
||||
).map(async (modelId) => {
|
||||
console.log('modelId', modelId);
|
||||
const model = $models.filter((m) => m.id === modelId).at(0);
|
||||
|
||||
if (model) {
|
||||
// If there are image files, check if model is vision capable
|
||||
const hasImages = messages.some((message) =>
|
||||
message.files?.some((file) => file.type === 'image')
|
||||
);
|
||||
|
||||
if (hasImages && !(model.info?.meta?.capabilities?.vision ?? true)) {
|
||||
toast.error(
|
||||
$i18n.t('Model {{modelName}} is not vision capable', {
|
||||
modelName: model.name ?? model.id
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
// Create response message
|
||||
let responseMessageId = uuidv4();
|
||||
let responseMessage = {
|
||||
|
|
@ -343,6 +339,7 @@
|
|||
role: 'assistant',
|
||||
content: '',
|
||||
model: model.id,
|
||||
modelName: model.name ?? model.id,
|
||||
userContext: null,
|
||||
timestamp: Math.floor(Date.now() / 1000) // Unix epoch
|
||||
};
|
||||
|
|
@ -387,7 +384,7 @@
|
|||
}
|
||||
responseMessage.userContext = userContext;
|
||||
|
||||
if (model?.external) {
|
||||
if (model?.owned_by === 'openai') {
|
||||
await sendPromptOpenAI(model, prompt, responseMessageId, _chatId);
|
||||
} else if (model) {
|
||||
await sendPromptOllama(model, prompt, responseMessageId, _chatId);
|
||||
|
|
@ -395,8 +392,7 @@
|
|||
} else {
|
||||
toast.error($i18n.t(`Model {{modelId}} not found`, { modelId }));
|
||||
}
|
||||
}
|
||||
)
|
||||
})
|
||||
);
|
||||
|
||||
await chats.set(await getChatList(localStorage.token));
|
||||
|
|
@ -430,7 +426,7 @@
|
|||
// Prepare the base message object
|
||||
const baseMessage = {
|
||||
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
|
||||
|
|
@ -442,7 +438,6 @@
|
|||
if (imageUrls && imageUrls.length > 0 && message.role === 'user') {
|
||||
baseMessage.images = imageUrls;
|
||||
}
|
||||
|
||||
return baseMessage;
|
||||
});
|
||||
|
||||
|
|
@ -473,13 +468,15 @@
|
|||
model: model,
|
||||
messages: messagesBody,
|
||||
options: {
|
||||
...($settings.options ?? {}),
|
||||
...($settings.params ?? {}),
|
||||
stop:
|
||||
$settings?.options?.stop ?? undefined
|
||||
? $settings.options.stop.map((str) =>
|
||||
$settings?.params?.stop ?? undefined
|
||||
? $settings.params.stop.map((str) =>
|
||||
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,
|
||||
keep_alive: $settings.keepAlive ?? undefined,
|
||||
|
|
@ -605,7 +602,8 @@
|
|||
if ($settings.saveChatHistory ?? true) {
|
||||
chat = await updateChatById(localStorage.token, _chatId, {
|
||||
messages: messages,
|
||||
history: history
|
||||
history: history,
|
||||
models: selectedModels
|
||||
});
|
||||
await chats.set(await getChatList(localStorage.token));
|
||||
}
|
||||
|
|
@ -716,24 +714,21 @@
|
|||
: message?.raContent ?? message.content
|
||||
})
|
||||
})),
|
||||
seed: $settings?.options?.seed ?? undefined,
|
||||
seed: $settings?.params?.seed ?? undefined,
|
||||
stop:
|
||||
$settings?.options?.stop ?? undefined
|
||||
? $settings.options.stop.map((str) =>
|
||||
$settings?.params?.stop ?? undefined
|
||||
? $settings.params.stop.map((str) =>
|
||||
decodeURIComponent(JSON.parse('"' + str.replace(/\"/g, '\\"') + '"'))
|
||||
)
|
||||
: undefined,
|
||||
temperature: $settings?.options?.temperature ?? undefined,
|
||||
top_p: $settings?.options?.top_p ?? undefined,
|
||||
num_ctx: $settings?.options?.num_ctx ?? undefined,
|
||||
frequency_penalty: $settings?.options?.repeat_penalty ?? undefined,
|
||||
max_tokens: $settings?.options?.num_predict ?? undefined,
|
||||
temperature: $settings?.params?.temperature ?? undefined,
|
||||
top_p: $settings?.params?.top_p ?? undefined,
|
||||
frequency_penalty: $settings?.params?.frequency_penalty ?? undefined,
|
||||
max_tokens: $settings?.params?.max_tokens ?? undefined,
|
||||
docs: docs.length > 0 ? docs : undefined,
|
||||
citations: docs.length > 0
|
||||
},
|
||||
model?.source?.toLowerCase() === 'litellm'
|
||||
? `${LITELLM_API_BASE_URL}/v1`
|
||||
: `${OPENAI_API_BASE_URL}`
|
||||
`${OPENAI_API_BASE_URL}`
|
||||
);
|
||||
|
||||
// Wait until history/message have been updated
|
||||
|
|
@ -797,6 +792,7 @@
|
|||
if ($chatId == _chatId) {
|
||||
if ($settings.saveChatHistory ?? true) {
|
||||
chat = await updateChatById(localStorage.token, _chatId, {
|
||||
models: selectedModels,
|
||||
messages: messages,
|
||||
history: history
|
||||
});
|
||||
|
|
@ -935,10 +931,8 @@
|
|||
) + ' {{prompt}}',
|
||||
titleModelId,
|
||||
userPrompt,
|
||||
titleModel?.external ?? false
|
||||
? titleModel?.source?.toLowerCase() === 'litellm'
|
||||
? `${LITELLM_API_BASE_URL}/v1`
|
||||
: `${OPENAI_API_BASE_URL}`
|
||||
titleModel?.owned_by === 'openai' ?? false
|
||||
? `${OPENAI_API_BASE_URL}`
|
||||
: `${OLLAMA_API_BASE_URL}/v1`
|
||||
);
|
||||
|
||||
|
|
@ -1025,16 +1019,12 @@
|
|||
<Messages
|
||||
chatId={$chatId}
|
||||
{selectedModels}
|
||||
{selectedModelfiles}
|
||||
{processing}
|
||||
bind:history
|
||||
bind:messages
|
||||
bind:autoScroll
|
||||
bind:prompt
|
||||
bottomPadding={files.length > 0}
|
||||
suggestionPrompts={chatIdProp
|
||||
? []
|
||||
: selectedModelfile?.suggestionPrompts ?? $config.default_prompt_suggestions}
|
||||
{sendPrompt}
|
||||
{continueGeneration}
|
||||
{regenerateResponse}
|
||||
|
|
@ -1048,7 +1038,8 @@
|
|||
bind:files
|
||||
bind:prompt
|
||||
bind:autoScroll
|
||||
bind:selectedModel={atSelectedModel}
|
||||
bind:atSelectedModel
|
||||
{selectedModels}
|
||||
{messages}
|
||||
{submitPrompt}
|
||||
{stopResponse}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<script lang="ts">
|
||||
import { toast } from 'svelte-sonner';
|
||||
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 {
|
||||
|
|
@ -27,7 +27,9 @@
|
|||
export let stopResponse: Function;
|
||||
|
||||
export let autoScroll = true;
|
||||
export let selectedModel = '';
|
||||
|
||||
export let atSelectedModel: Model | undefined;
|
||||
export let selectedModels: [''];
|
||||
|
||||
let chatTextAreaElement: HTMLTextAreaElement;
|
||||
let filesInputElement;
|
||||
|
|
@ -52,6 +54,11 @@
|
|||
|
||||
let speechRecognition;
|
||||
|
||||
let visionCapableModels = [];
|
||||
$: visionCapableModels = [...(atSelectedModel ? [atSelectedModel] : selectedModels)].filter(
|
||||
(model) => $models.find((m) => m.id === model)?.info?.meta?.capabilities?.vision ?? true
|
||||
);
|
||||
|
||||
$: if (prompt) {
|
||||
if (chatTextAreaElement) {
|
||||
chatTextAreaElement.style.height = '';
|
||||
|
|
@ -358,6 +365,10 @@
|
|||
inputFiles.forEach((file) => {
|
||||
console.log(file, file.name.split('.').at(-1));
|
||||
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();
|
||||
reader.onload = (event) => {
|
||||
files = [
|
||||
|
|
@ -429,8 +440,8 @@
|
|||
|
||||
<div class="fixed bottom-0 {$showSidebar ? 'left-0 md:left-[260px]' : 'left-0'} right-0">
|
||||
<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="flex flex-col max-w-5xl w-full">
|
||||
<div class=" -mb-0.5 mx-auto inset-x-0 bg-transparent flex justify-center">
|
||||
<div class="flex flex-col max-w-6xl px-2.5 md:px-6 w-full">
|
||||
<div class="relative">
|
||||
{#if autoScroll === false && messages.length > 0}
|
||||
<div class=" absolute -top-12 left-0 right-0 flex justify-center z-30">
|
||||
|
|
@ -494,12 +505,12 @@
|
|||
bind:chatInputPlaceholder
|
||||
{messages}
|
||||
on:select={(e) => {
|
||||
selectedModel = e.detail;
|
||||
atSelectedModel = e.detail;
|
||||
chatTextAreaElement?.focus();
|
||||
}}
|
||||
/>
|
||||
|
||||
{#if selectedModel !== ''}
|
||||
{#if atSelectedModel !== undefined}
|
||||
<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"
|
||||
>
|
||||
|
|
@ -508,21 +519,21 @@
|
|||
crossorigin="anonymous"
|
||||
alt="model profile"
|
||||
class="size-5 max-w-[28px] object-cover rounded-full"
|
||||
src={$modelfiles.find((modelfile) => modelfile.tagName === selectedModel.id)
|
||||
?.imageUrl ??
|
||||
src={$models.find((model) => model.id === atSelectedModel.id)?.info?.meta
|
||||
?.profile_image_url ??
|
||||
($i18n.language === 'dg-DG'
|
||||
? `/doge.png`
|
||||
: `${WEBUI_BASE_URL}/static/favicon.png`)}
|
||||
/>
|
||||
<div>
|
||||
Talking to <span class=" font-medium">{selectedModel.name} </span>
|
||||
Talking to <span class=" font-medium">{atSelectedModel.name}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button
|
||||
class="flex items-center"
|
||||
on:click={() => {
|
||||
selectedModel = '';
|
||||
atSelectedModel = undefined;
|
||||
}}
|
||||
>
|
||||
<XMark />
|
||||
|
|
@ -535,7 +546,7 @@
|
|||
</div>
|
||||
|
||||
<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">
|
||||
<input
|
||||
bind:this={filesInputElement}
|
||||
|
|
@ -550,6 +561,12 @@
|
|||
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'));
|
||||
inputFiles = null;
|
||||
filesInputElement.value = '';
|
||||
return;
|
||||
}
|
||||
let reader = new FileReader();
|
||||
reader.onload = (event) => {
|
||||
files = [
|
||||
|
|
@ -589,6 +606,7 @@
|
|||
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"
|
||||
on:submit|preventDefault={() => {
|
||||
// check if selectedModels support image input
|
||||
submitPrompt(prompt, user);
|
||||
}}
|
||||
>
|
||||
|
|
@ -597,7 +615,36 @@
|
|||
{#each files as file, fileIdx}
|
||||
<div class=" relative group">
|
||||
{#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'}
|
||||
<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"
|
||||
|
|
@ -883,7 +930,7 @@
|
|||
|
||||
if (e.key === 'Escape') {
|
||||
console.log('Escape');
|
||||
selectedModel = '';
|
||||
atSelectedModel = undefined;
|
||||
}
|
||||
}}
|
||||
rows="1"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<script lang="ts">
|
||||
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 { toast } from 'svelte-sonner';
|
||||
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
export let user = $_user;
|
||||
export let prompt;
|
||||
export let suggestionPrompts = [];
|
||||
export let processing = '';
|
||||
export let bottomPadding = false;
|
||||
export let autoScroll;
|
||||
|
|
@ -34,7 +33,6 @@
|
|||
export let messages = [];
|
||||
|
||||
export let selectedModels;
|
||||
export let selectedModelfiles = [];
|
||||
|
||||
$: if (autoScroll && bottomPadding) {
|
||||
(async () => {
|
||||
|
|
@ -247,9 +245,7 @@
|
|||
<div class="h-full flex mb-16">
|
||||
{#if messages.length == 0}
|
||||
<Placeholder
|
||||
models={selectedModels}
|
||||
modelfiles={selectedModelfiles}
|
||||
{suggestionPrompts}
|
||||
modelIds={selectedModels}
|
||||
submitPrompt={async (p) => {
|
||||
let text = p;
|
||||
|
||||
|
|
@ -316,7 +312,6 @@
|
|||
{#key message.id}
|
||||
<ResponseMessage
|
||||
{message}
|
||||
modelfiles={selectedModelfiles}
|
||||
siblings={history.messages[message.parentId]?.childrenIds ?? []}
|
||||
isLastMessage={messageIdx + 1 === messages.length}
|
||||
{readOnly}
|
||||
|
|
@ -348,7 +343,6 @@
|
|||
{chatId}
|
||||
parentMessage={history.messages[message.parentId]}
|
||||
{messageIdx}
|
||||
{selectedModelfiles}
|
||||
{updateChatMessages}
|
||||
{confirmEditResponseMessage}
|
||||
{rateMessage}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
import hljs from 'highlight.js';
|
||||
import 'highlight.js/styles/github-dark.min.css';
|
||||
import { loadPyodide } from 'pyodide';
|
||||
import { tick } from 'svelte';
|
||||
import { onMount, tick } from 'svelte';
|
||||
import PyodideWorker from '$lib/workers/pyodide.worker?worker';
|
||||
|
||||
export let id = '';
|
||||
|
|
@ -12,6 +12,7 @@
|
|||
export let lang = '';
|
||||
export let code = '';
|
||||
|
||||
let highlightedCode = null;
|
||||
let executing = false;
|
||||
|
||||
let stdout = null;
|
||||
|
|
@ -202,11 +203,12 @@ __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>
|
||||
|
||||
{#if code}
|
||||
<div class="mb-4" dir="ltr">
|
||||
<div class="mb-4" dir="ltr">
|
||||
<div
|
||||
class="flex justify-between bg-[#202123] text-white text-xs px-4 pt-1 pb-0.5 rounded-t-lg overflow-x-auto"
|
||||
>
|
||||
|
|
@ -257,5 +259,4 @@ __builtins__.input = input`);
|
|||
<div class="text-sm">{stdout || stderr || result}</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -13,8 +13,6 @@
|
|||
|
||||
export let parentMessage;
|
||||
|
||||
export let selectedModelfiles;
|
||||
|
||||
export let updateChatMessages: Function;
|
||||
export let confirmEditResponseMessage: Function;
|
||||
export let rateMessage: Function;
|
||||
|
|
@ -130,7 +128,6 @@
|
|||
>
|
||||
<ResponseMessage
|
||||
message={groupedMessages[model].messages[groupedMessagesIdx[model]]}
|
||||
modelfiles={selectedModelfiles}
|
||||
siblings={groupedMessages[model].messages.map((m) => m.id)}
|
||||
isLastMessage={true}
|
||||
{updateChatMessages}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<script lang="ts">
|
||||
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 { blur, fade } from 'svelte/transition';
|
||||
|
|
@ -9,23 +9,20 @@
|
|||
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
export let modelIds = [];
|
||||
export let models = [];
|
||||
export let modelfiles = [];
|
||||
|
||||
export let submitPrompt;
|
||||
export let suggestionPrompts;
|
||||
|
||||
let mounted = false;
|
||||
let modelfile = null;
|
||||
let selectedModelIdx = 0;
|
||||
|
||||
$: modelfile =
|
||||
models[selectedModelIdx] in modelfiles ? modelfiles[models[selectedModelIdx]] : null;
|
||||
|
||||
$: if (models.length > 0) {
|
||||
$: if (modelIds.length > 0) {
|
||||
selectedModelIdx = models.length - 1;
|
||||
}
|
||||
|
||||
$: models = modelIds.map((id) => $_models.find((m) => m.id === id));
|
||||
|
||||
onMount(() => {
|
||||
mounted = true;
|
||||
});
|
||||
|
|
@ -41,25 +38,14 @@
|
|||
selectedModelIdx = modelIdx;
|
||||
}}
|
||||
>
|
||||
{#if model in modelfiles}
|
||||
<img
|
||||
crossorigin="anonymous"
|
||||
src={modelfiles[model]?.imageUrl ?? `${WEBUI_BASE_URL}/static/favicon.png`}
|
||||
alt="modelfile"
|
||||
class=" size-[2.7rem] rounded-full border-[1px] border-gray-200 dark:border-none"
|
||||
draggable="false"
|
||||
/>
|
||||
{:else}
|
||||
<img
|
||||
crossorigin="anonymous"
|
||||
src={$i18n.language === 'dg-DG'
|
||||
? `/doge.png`
|
||||
: `${WEBUI_BASE_URL}/static/favicon.png`}
|
||||
src={model?.info?.meta?.profile_image_url ??
|
||||
($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>
|
||||
{/each}
|
||||
</div>
|
||||
|
|
@ -70,23 +56,32 @@
|
|||
>
|
||||
<div>
|
||||
<div class=" capitalize line-clamp-1" in:fade={{ duration: 200 }}>
|
||||
{#if modelfile}
|
||||
{modelfile.title}
|
||||
{#if models[selectedModelIdx]?.info}
|
||||
{models[selectedModelIdx]?.info?.name}
|
||||
{:else}
|
||||
{$i18n.t('Hello, {{name}}', { name: $user.name })}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div in:fade={{ duration: 200, delay: 200 }}>
|
||||
{#if modelfile}
|
||||
<div class="mt-0.5 text-base font-normal text-gray-500 dark:text-gray-400">
|
||||
{modelfile.desc}
|
||||
{#if models[selectedModelIdx]?.info}
|
||||
<div class="mt-0.5 text-base font-normal text-gray-500 dark:text-gray-400 line-clamp-3">
|
||||
{models[selectedModelIdx]?.info?.meta?.description}
|
||||
</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">
|
||||
By <a href="https://openwebui.com/m/{modelfile.user.username}"
|
||||
>{modelfile.user.name ? modelfile.user.name : `@${modelfile.user.username}`}</a
|
||||
By
|
||||
{#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>
|
||||
{/if}
|
||||
{:else}
|
||||
|
|
@ -99,7 +94,11 @@
|
|||
</div>
|
||||
|
||||
<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>
|
||||
{/key}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
import { config, settings } from '$lib/stores';
|
||||
import { config, models, settings } from '$lib/stores';
|
||||
import { synthesizeOpenAISpeech } from '$lib/apis/audio';
|
||||
import { imageGenerations } from '$lib/apis/images';
|
||||
import {
|
||||
|
|
@ -34,7 +34,6 @@
|
|||
import RateComment from './RateComment.svelte';
|
||||
import CitationsModal from '$lib/components/chat/Messages/CitationsModal.svelte';
|
||||
|
||||
export let modelfiles = [];
|
||||
export let message;
|
||||
export let siblings;
|
||||
|
||||
|
|
@ -52,6 +51,9 @@
|
|||
export let continueGeneration: Function;
|
||||
export let regenerateResponse: Function;
|
||||
|
||||
let model = null;
|
||||
$: model = $models.find((m) => m.id === message.model);
|
||||
|
||||
let edit = false;
|
||||
let editedContent = '';
|
||||
let editTextAreaElement: HTMLTextAreaElement;
|
||||
|
|
@ -78,6 +80,13 @@
|
|||
return `<code>${code.replaceAll('&', '&')}</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 & {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
extensions: any;
|
||||
|
|
@ -338,17 +347,13 @@
|
|||
dir={$settings.chatDirection}
|
||||
>
|
||||
<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`)}
|
||||
/>
|
||||
|
||||
<div class="w-full overflow-hidden pl-1">
|
||||
<Name>
|
||||
{#if message.model in modelfiles}
|
||||
{modelfiles[message.model]?.title}
|
||||
{:else}
|
||||
{message.model ? ` ${message.model}` : ''}
|
||||
{/if}
|
||||
{model?.name ?? message.model}
|
||||
|
||||
{#if message.timestamp}
|
||||
<span
|
||||
|
|
@ -442,8 +447,8 @@
|
|||
{#if token.type === 'code'}
|
||||
<CodeBlock
|
||||
id={`${message.id}-${tokenIdx}`}
|
||||
lang={token.lang}
|
||||
code={revertSanitizedResponseContent(token.text)}
|
||||
lang={token?.lang ?? ''}
|
||||
code={revertSanitizedResponseContent(token?.text ?? '')}
|
||||
/>
|
||||
{:else}
|
||||
{@html marked.parse(token.raw, {
|
||||
|
|
@ -688,7 +693,7 @@
|
|||
</button>
|
||||
</Tooltip>
|
||||
|
||||
{#if $config.images && !readOnly}
|
||||
{#if $config.enable_image_generation && !readOnly}
|
||||
<Tooltip content="Generate Image" placement="bottom">
|
||||
<button
|
||||
class="{isLastMessage
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
import { tick, createEventDispatcher, getContext } from 'svelte';
|
||||
import Name from './Name.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 { user as _user } from '$lib/stores';
|
||||
|
|
@ -60,8 +60,7 @@
|
|||
{#if !($settings?.chatBubble ?? true)}
|
||||
<ProfileImage
|
||||
src={message.user
|
||||
? $modelfiles.find((modelfile) => modelfile.tagName === message.user)?.imageUrl ??
|
||||
'/user.png'
|
||||
? $models.find((m) => m.id === message.user)?.info?.meta?.profile_image_url ?? '/user.png'
|
||||
: user?.profile_image_url ?? '/user.png'}
|
||||
/>
|
||||
{/if}
|
||||
|
|
@ -70,12 +69,8 @@
|
|||
<div>
|
||||
<Name>
|
||||
{#if message.user}
|
||||
{#if $modelfiles.map((modelfile) => modelfile.tagName).includes(message.user)}
|
||||
{$modelfiles.find((modelfile) => modelfile.tagName === message.user)?.title}
|
||||
{: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}
|
||||
{user.name}
|
||||
{:else}
|
||||
|
|
|
|||
|
|
@ -45,12 +45,10 @@
|
|||
<div class="mr-1 max-w-full">
|
||||
<Selector
|
||||
placeholder={$i18n.t('Select a model')}
|
||||
items={$models
|
||||
.filter((model) => model.name !== 'hr')
|
||||
.map((model) => ({
|
||||
items={$models.map((model) => ({
|
||||
value: model.id,
|
||||
label: model.name,
|
||||
info: model
|
||||
model: model
|
||||
}))}
|
||||
bind:value={selectedModel}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,9 @@
|
|||
|
||||
import { user, MODEL_DOWNLOAD_POOL, models, mobile } from '$lib/stores';
|
||||
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';
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
|
@ -23,7 +25,12 @@
|
|||
export let searchEnabled = true;
|
||||
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]';
|
||||
|
||||
|
|
@ -239,19 +246,37 @@
|
|||
}}
|
||||
>
|
||||
<div class="flex items-center gap-2">
|
||||
<div class="flex items-center">
|
||||
<div class="line-clamp-1">
|
||||
{item.label}
|
||||
|
||||
<span class=" text-xs font-medium text-gray-600 dark:text-gray-400"
|
||||
>{item.info?.details?.parameter_size ?? ''}</span
|
||||
</div>
|
||||
{#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>
|
||||
|
||||
<!-- {JSON.stringify(item.info)} -->
|
||||
|
||||
{#if item.info.external}
|
||||
<Tooltip content={item.info?.source ?? 'External'}>
|
||||
<div class=" mr-2">
|
||||
{#if item.model.owned_by === 'openai'}
|
||||
<Tooltip content={`${'External'}`}>
|
||||
<div class="">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 16 16"
|
||||
|
|
@ -271,15 +296,15 @@
|
|||
</svg>
|
||||
</div>
|
||||
</Tooltip>
|
||||
{:else}
|
||||
{/if}
|
||||
|
||||
{#if item.model?.info?.meta?.description}
|
||||
<Tooltip
|
||||
content={`${
|
||||
item.info?.details?.quantization_level
|
||||
? item.info?.details?.quantization_level + ' '
|
||||
: ''
|
||||
}${item.info.size ? `(${(item.info.size / 1024 ** 3).toFixed(1)}GB)` : ''}`}
|
||||
content={`${sanitizeResponseContent(
|
||||
item.model?.info?.meta?.description
|
||||
).replaceAll('\n', '<br>')}`}
|
||||
>
|
||||
<div class=" mr-2">
|
||||
<div class="">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -1,14 +1,16 @@
|
|||
<script lang="ts">
|
||||
import { getContext } from 'svelte';
|
||||
import { getContext, createEventDispatcher } from 'svelte';
|
||||
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
export let options = {
|
||||
export let params = {
|
||||
// Advanced
|
||||
seed: 0,
|
||||
stop: '',
|
||||
stop: null,
|
||||
temperature: '',
|
||||
repeat_penalty: '',
|
||||
frequency_penalty: '',
|
||||
repeat_last_n: '',
|
||||
mirostat: '',
|
||||
mirostat_eta: '',
|
||||
|
|
@ -17,40 +19,86 @@
|
|||
top_p: '',
|
||||
tfs_z: '',
|
||||
num_ctx: '',
|
||||
num_predict: ''
|
||||
max_tokens: '',
|
||||
template: null
|
||||
};
|
||||
|
||||
let customFieldName = '';
|
||||
let customFieldValue = '';
|
||||
|
||||
$: if (params) {
|
||||
dispatch('change', params);
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class=" space-y-3 text-xs">
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div class=" w-20 text-xs font-medium self-center">{$i18n.t('Seed')}</div>
|
||||
<div class=" flex-1 self-center">
|
||||
<div class=" space-y-1 text-xs">
|
||||
<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('Seed')}</div>
|
||||
|
||||
<button
|
||||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
params.seed = (params?.seed ?? null) === null ? 0 : null;
|
||||
}}
|
||||
>
|
||||
{#if (params?.seed ?? 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?.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={options.seed}
|
||||
bind:value={params.seed}
|
||||
autocomplete="off"
|
||||
min="0"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div class=" w-20 text-xs font-medium self-center">{$i18n.t('Stop Sequence')}</div>
|
||||
<div class=" flex-1 self-center">
|
||||
<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('Stop Sequence')}</div>
|
||||
|
||||
<button
|
||||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
params.stop = (params?.stop ?? null) === null ? '' : null;
|
||||
}}
|
||||
>
|
||||
{#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>
|
||||
|
||||
{#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={options.stop}
|
||||
bind:value={params.stop}
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class=" py-0.5 w-full justify-between">
|
||||
|
|
@ -61,10 +109,10 @@
|
|||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center"> {$i18n.t('Custom')} </span>
|
||||
|
|
@ -72,7 +120,7 @@
|
|||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.temperature !== ''}
|
||||
{#if (params?.temperature ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -81,13 +129,13 @@
|
|||
min="0"
|
||||
max="1"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
bind:value={options.temperature}
|
||||
bind:value={params.temperature}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="0"
|
||||
|
|
@ -107,18 +155,18 @@
|
|||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.mirostat !== ''}
|
||||
{#if (params?.mirostat ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -127,13 +175,13 @@
|
|||
min="0"
|
||||
max="2"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
bind:value={options.mirostat}
|
||||
bind:value={params.mirostat}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="0"
|
||||
|
|
@ -153,18 +201,18 @@
|
|||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.mirostat_eta !== ''}
|
||||
{#if (params?.mirostat_eta ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -173,13 +221,13 @@
|
|||
min="0"
|
||||
max="1"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
bind:value={options.mirostat_eta}
|
||||
bind:value={params.mirostat_eta}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="0"
|
||||
|
|
@ -199,10 +247,10 @@
|
|||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
|
|
@ -210,7 +258,7 @@
|
|||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.mirostat_tau !== ''}
|
||||
{#if (params?.mirostat_tau ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -219,13 +267,13 @@
|
|||
min="0"
|
||||
max="10"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
bind:value={options.mirostat_tau}
|
||||
bind:value={params.mirostat_tau}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="0"
|
||||
|
|
@ -245,18 +293,18 @@
|
|||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.top_k !== ''}
|
||||
{#if (params?.top_k ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -265,13 +313,13 @@
|
|||
min="0"
|
||||
max="100"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
bind:value={options.top_k}
|
||||
bind:value={params.top_k}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="0"
|
||||
|
|
@ -291,18 +339,18 @@
|
|||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.top_p !== ''}
|
||||
{#if (params?.top_p ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -311,13 +359,13 @@
|
|||
min="0"
|
||||
max="1"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
bind:value={options.top_p}
|
||||
bind:value={params.top_p}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="0"
|
||||
|
|
@ -331,24 +379,24 @@
|
|||
|
||||
<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('Repeat Penalty')}</div>
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Frequencey Penalty')}</div>
|
||||
|
||||
<button
|
||||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.repeat_penalty !== ''}
|
||||
{#if (params?.frequency_penalty ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -357,13 +405,13 @@
|
|||
min="0"
|
||||
max="2"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
bind:value={options.repeat_penalty}
|
||||
bind:value={params.frequency_penalty}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="0"
|
||||
|
|
@ -383,18 +431,18 @@
|
|||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.repeat_last_n !== ''}
|
||||
{#if (params?.repeat_last_n ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -403,13 +451,13 @@
|
|||
min="-1"
|
||||
max="128"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
bind:value={options.repeat_last_n}
|
||||
bind:value={params.repeat_last_n}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="-1"
|
||||
|
|
@ -429,18 +477,18 @@
|
|||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.tfs_z !== ''}
|
||||
{#if (params?.tfs_z ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -449,13 +497,13 @@
|
|||
min="0"
|
||||
max="2"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
bind:value={options.tfs_z}
|
||||
bind:value={params.tfs_z}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="0"
|
||||
|
|
@ -475,18 +523,18 @@
|
|||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.num_ctx !== ''}
|
||||
{#if (params?.num_ctx ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -495,13 +543,13 @@
|
|||
min="-1"
|
||||
max="10240000"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div class="">
|
||||
<input
|
||||
bind:value={options.num_ctx}
|
||||
bind:value={params.num_ctx}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="-1"
|
||||
|
|
@ -513,24 +561,24 @@
|
|||
</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('Max Tokens')}</div>
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Max Tokens (num_predict)')}</div>
|
||||
|
||||
<button
|
||||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
type="button"
|
||||
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>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
|
||||
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if options.num_predict !== ''}
|
||||
{#if (params?.max_tokens ?? '') !== ''}
|
||||
<div class="flex mt-0.5 space-x-2">
|
||||
<div class=" flex-1">
|
||||
<input
|
||||
|
|
@ -539,13 +587,13 @@
|
|||
min="-2"
|
||||
max="16000"
|
||||
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"
|
||||
/>
|
||||
</div>
|
||||
<div class="">
|
||||
<input
|
||||
bind:value={options.num_predict}
|
||||
bind:value={params.max_tokens}
|
||||
type="number"
|
||||
class=" bg-transparent text-center w-14"
|
||||
min="-2"
|
||||
|
|
@ -556,4 +604,36 @@
|
|||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class=" py-0.5 w-full justify-between">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('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>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
import { chats, user, config } from '$lib/stores';
|
||||
|
||||
import {
|
||||
archiveAllChats,
|
||||
createNewChat,
|
||||
deleteAllChats,
|
||||
getAllChats,
|
||||
|
|
@ -22,7 +23,10 @@
|
|||
// Chats
|
||||
let saveChatHistory = true;
|
||||
let importFiles;
|
||||
|
||||
let showArchiveConfirm = false;
|
||||
let showDeleteConfirm = false;
|
||||
|
||||
let chatImportInputElement: HTMLInputElement;
|
||||
|
||||
$: if (importFiles) {
|
||||
|
|
@ -68,14 +72,15 @@
|
|||
saveAs(blob, `chat-export-${Date.now()}.json`);
|
||||
};
|
||||
|
||||
const exportAllUserChats = async () => {
|
||||
let blob = new Blob([JSON.stringify(await getAllUserChats(localStorage.token))], {
|
||||
type: 'application/json'
|
||||
const archiveAllChatsHandler = async () => {
|
||||
await goto('/');
|
||||
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 deleteAllChats(localStorage.token).catch((error) => {
|
||||
toast.error(error);
|
||||
|
|
@ -217,6 +222,94 @@
|
|||
|
||||
<hr class=" dark:border-gray-700" />
|
||||
|
||||
<div class="flex flex-col">
|
||||
{#if showArchiveConfirm}
|
||||
<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={() => {
|
||||
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">
|
||||
|
|
@ -240,7 +333,7 @@
|
|||
<button
|
||||
class="hover:text-white transition"
|
||||
on:click={() => {
|
||||
deleteChats();
|
||||
deleteAllChatsHandler();
|
||||
showDeleteConfirm = false;
|
||||
}}
|
||||
>
|
||||
|
|
@ -297,38 +390,9 @@
|
|||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class=" self-center text-sm font-medium">{$i18n.t('Delete Chats')}</div>
|
||||
<div class=" self-center text-sm font-medium">{$i18n.t('Delete All 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>
|
||||
|
|
|
|||
|
|
@ -41,21 +41,21 @@
|
|||
let requestFormat = '';
|
||||
let keepAlive = null;
|
||||
|
||||
let options = {
|
||||
let params = {
|
||||
// Advanced
|
||||
seed: 0,
|
||||
temperature: '',
|
||||
repeat_penalty: '',
|
||||
frequency_penalty: '',
|
||||
repeat_last_n: '',
|
||||
mirostat: '',
|
||||
mirostat_eta: '',
|
||||
mirostat_tau: '',
|
||||
top_k: '',
|
||||
top_p: '',
|
||||
stop: '',
|
||||
stop: null,
|
||||
tfs_z: '',
|
||||
num_ctx: '',
|
||||
num_predict: ''
|
||||
max_tokens: ''
|
||||
};
|
||||
|
||||
const toggleRequestFormat = async () => {
|
||||
|
|
@ -80,14 +80,14 @@
|
|||
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(',');
|
||||
params.seed = settings.seed ?? 0;
|
||||
params.temperature = settings.temperature ?? '';
|
||||
params.frequency_penalty = settings.frequency_penalty ?? '';
|
||||
params.top_k = settings.top_k ?? '';
|
||||
params.top_p = settings.top_p ?? '';
|
||||
params.num_ctx = settings.num_ctx ?? '';
|
||||
params = { ...params, ...settings.params };
|
||||
params.stop = settings?.params?.stop ? (settings?.params?.stop ?? []).join(',') : null;
|
||||
});
|
||||
|
||||
const applyTheme = (_theme: string) => {
|
||||
|
|
@ -228,7 +228,7 @@
|
|||
</div>
|
||||
|
||||
{#if showAdvanced}
|
||||
<AdvancedParams bind:options />
|
||||
<AdvancedParams bind:params />
|
||||
<hr class=" dark:border-gray-700" />
|
||||
|
||||
<div class=" py-1 w-full justify-between">
|
||||
|
|
@ -300,20 +300,21 @@
|
|||
on:click={() => {
|
||||
saveSettings({
|
||||
system: system !== '' ? system : undefined,
|
||||
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
|
||||
params: {
|
||||
seed: (params.seed !== 0 ? params.seed : undefined) ?? undefined,
|
||||
stop: params.stop ? params.stop.split(',').filter((e) => e) : undefined,
|
||||
temperature: params.temperature !== '' ? params.temperature : undefined,
|
||||
frequency_penalty:
|
||||
params.frequency_penalty !== '' ? params.frequency_penalty : undefined,
|
||||
repeat_last_n: params.repeat_last_n !== '' ? params.repeat_last_n : undefined,
|
||||
mirostat: params.mirostat !== '' ? params.mirostat : undefined,
|
||||
mirostat_eta: params.mirostat_eta !== '' ? params.mirostat_eta : undefined,
|
||||
mirostat_tau: params.mirostat_tau !== '' ? params.mirostat_tau : undefined,
|
||||
top_k: params.top_k !== '' ? params.top_k : undefined,
|
||||
top_p: params.top_p !== '' ? params.top_p : undefined,
|
||||
tfs_z: params.tfs_z !== '' ? params.tfs_z : 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
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
<script lang="ts">
|
||||
import queue from 'async/queue';
|
||||
import { toast } from 'svelte-sonner';
|
||||
|
||||
import {
|
||||
|
|
@ -12,32 +11,20 @@
|
|||
cancelOllamaRequest,
|
||||
uploadModel
|
||||
} from '$lib/apis/ollama';
|
||||
|
||||
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 { onMount, getContext } from 'svelte';
|
||||
import { addLiteLLMModel, deleteLiteLLMModel, getLiteLLMModelInfo } from '$lib/apis/litellm';
|
||||
|
||||
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
||||
import Spinner from '$lib/components/common/Spinner.svelte';
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
export let getModels: Function;
|
||||
|
||||
let showLiteLLM = false;
|
||||
let showLiteLLMParams = false;
|
||||
let modelUploadInputElement: HTMLInputElement;
|
||||
let liteLLMModelInfo = [];
|
||||
|
||||
let liteLLMModel = '';
|
||||
let liteLLMModelName = '';
|
||||
let liteLLMAPIBase = '';
|
||||
let liteLLMAPIKey = '';
|
||||
let liteLLMRPM = '';
|
||||
let liteLLMMaxTokens = '';
|
||||
|
||||
let deleteLiteLLMModelName = '';
|
||||
|
||||
$: liteLLMModelName = liteLLMModel;
|
||||
|
||||
// Models
|
||||
|
||||
|
|
@ -48,7 +35,8 @@
|
|||
let updateProgress = null;
|
||||
|
||||
let showExperimentalOllama = false;
|
||||
let ollamaVersion = '';
|
||||
|
||||
let ollamaVersion = null;
|
||||
const MAX_PARALLEL_DOWNLOADS = 3;
|
||||
|
||||
let modelTransferring = false;
|
||||
|
|
@ -70,8 +58,11 @@
|
|||
const updateModelsHandler = async () => {
|
||||
for (const model of $models.filter(
|
||||
(m) =>
|
||||
m.size != null &&
|
||||
(selectedOllamaUrlIdx === null ? true : (m?.urls ?? []).includes(selectedOllamaUrlIdx))
|
||||
!(m?.preset ?? false) &&
|
||||
m.owned_by === 'ollama' &&
|
||||
(selectedOllamaUrlIdx === null
|
||||
? true
|
||||
: (m?.ollama?.urls ?? []).includes(selectedOllamaUrlIdx))
|
||||
)) {
|
||||
console.log(model);
|
||||
|
||||
|
|
@ -439,60 +430,9 @@
|
|||
}
|
||||
};
|
||||
|
||||
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 () => {
|
||||
await Promise.all([
|
||||
(async () => {
|
||||
OLLAMA_URLS = await getOllamaUrls(localStorage.token).catch((error) => {
|
||||
toast.error(error);
|
||||
return [];
|
||||
|
|
@ -501,15 +441,17 @@
|
|||
if (OLLAMA_URLS.length > 0) {
|
||||
selectedOllamaUrlIdx = 0;
|
||||
}
|
||||
|
||||
})(),
|
||||
(async () => {
|
||||
ollamaVersion = await getOllamaVersion(localStorage.token).catch((error) => false);
|
||||
liteLLMModelInfo = await getLiteLLMModelInfo(localStorage.token);
|
||||
})()
|
||||
]);
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="flex flex-col h-full justify-between text-sm">
|
||||
<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="text-sm font-medium">{$i18n.t('Manage Ollama Models')}</div>
|
||||
|
||||
|
|
@ -587,24 +529,28 @@
|
|||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
><style>
|
||||
>
|
||||
<style>
|
||||
.spinner_ajPY {
|
||||
transform-origin: center;
|
||||
animation: spinner_AtaB 0.75s infinite linear;
|
||||
}
|
||||
|
||||
@keyframes spinner_AtaB {
|
||||
100% {
|
||||
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"
|
||||
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"
|
||||
class="spinner_ajPY"
|
||||
/></svg
|
||||
>
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
{:else}
|
||||
<svg
|
||||
|
|
@ -703,9 +649,12 @@
|
|||
{#if !deleteModelTag}
|
||||
<option value="" disabled selected>{$i18n.t('Select a model')}</option>
|
||||
{/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"
|
||||
>{model.name + ' (' + (model.size / 1024 ** 3).toFixed(1) + ' GB)'}</option
|
||||
>{model.name +
|
||||
' (' +
|
||||
(model.ollama.size / 1024 ** 3).toFixed(1) +
|
||||
' GB)'}</option
|
||||
>
|
||||
{/each}
|
||||
</select>
|
||||
|
|
@ -833,24 +782,28 @@
|
|||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
><style>
|
||||
>
|
||||
<style>
|
||||
.spinner_ajPY {
|
||||
transform-origin: center;
|
||||
animation: spinner_AtaB 0.75s infinite linear;
|
||||
}
|
||||
|
||||
@keyframes spinner_AtaB {
|
||||
100% {
|
||||
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"
|
||||
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"
|
||||
class="spinner_ajPY"
|
||||
/></svg
|
||||
>
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
{:else}
|
||||
<svg
|
||||
|
|
@ -929,203 +882,14 @@
|
|||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<hr class=" dark:border-gray-700 my-2" />
|
||||
{/if}
|
||||
|
||||
<div class=" space-y-3">
|
||||
<div class="mt-2 space-y-3 pr-1.5">
|
||||
<div>
|
||||
<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>
|
||||
{:else if ollamaVersion === false}
|
||||
<div>Ollama Not Detected</div>
|
||||
{:else}
|
||||
<div class="flex h-full justify-center">
|
||||
<div class="my-auto">
|
||||
<Spinner className="size-6" />
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
import { toast } from 'svelte-sonner';
|
||||
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 Account from './Settings/Account.svelte';
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<script lang="ts">
|
||||
import { getContext, onMount } from 'svelte';
|
||||
import { models } from '$lib/stores';
|
||||
|
||||
import { toast } from 'svelte-sonner';
|
||||
import { deleteSharedChatById, getChatById, shareChatById } from '$lib/apis/chats';
|
||||
import { modelfiles } from '$lib/stores';
|
||||
import { copyToClipboard } from '$lib/utils';
|
||||
|
||||
import Modal from '../common/Modal.svelte';
|
||||
|
|
@ -43,9 +43,7 @@
|
|||
tab.postMessage(
|
||||
JSON.stringify({
|
||||
chat: _chat,
|
||||
modelfiles: $modelfiles.filter((modelfile) =>
|
||||
_chat.models.includes(modelfile.tagName)
|
||||
)
|
||||
models: $models.filter((m) => _chat.models.includes(m.id))
|
||||
}),
|
||||
'*'
|
||||
);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
dispatch('change', _state);
|
||||
}
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
<div class="top-0 left-0 absolute w-full flex justify-center">
|
||||
{#if _state === 'checked'}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<script lang="ts">
|
||||
export let className: string = '';
|
||||
export let className: string = 'size-5';
|
||||
</script>
|
||||
|
||||
<div class="flex justify-center text-center {className}">
|
||||
<svg class="size-5" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
|
||||
<div class="flex justify-center text-center">
|
||||
<svg class={className} viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
|
||||
><style>
|
||||
.spinner_ajPY {
|
||||
transform-origin: center;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
export let placement = 'top';
|
||||
export let content = `I'm a tooltip!`;
|
||||
export let touch = true;
|
||||
export let className = 'flex';
|
||||
|
||||
let tooltipElement;
|
||||
let tooltipInstance;
|
||||
|
|
@ -29,6 +30,6 @@
|
|||
});
|
||||
</script>
|
||||
|
||||
<div bind:this={tooltipElement} aria-label={content} class="flex">
|
||||
<div bind:this={tooltipElement} aria-label={content} class={className}>
|
||||
<slot />
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
WEBUI_NAME,
|
||||
chatId,
|
||||
mobile,
|
||||
modelfiles,
|
||||
settings,
|
||||
showArchivedChats,
|
||||
showSettings,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
<script lang="ts">
|
||||
import fileSaver from 'file-saver';
|
||||
const { saveAs } = fileSaver;
|
||||
import { toast } from 'svelte-sonner';
|
||||
import dayjs from 'dayjs';
|
||||
import { getContext, createEventDispatcher } from 'svelte';
|
||||
|
|
@ -13,6 +15,8 @@
|
|||
|
||||
export let show = false;
|
||||
|
||||
let searchValue = '';
|
||||
|
||||
let chats = [];
|
||||
|
||||
const unarchiveChatHandler = async (chatId) => {
|
||||
|
|
@ -33,6 +37,13 @@
|
|||
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) {
|
||||
(async () => {
|
||||
chats = await getArchivedChatList(localStorage.token);
|
||||
|
|
@ -63,10 +74,35 @@
|
|||
</button>
|
||||
</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">
|
||||
{#if chats.length > 0}
|
||||
<div class="text-left text-sm w-full mb-4 max-h-[22rem] overflow-y-scroll">
|
||||
<div>
|
||||
<div class="text-left text-sm w-full mb-3 max-h-[22rem] overflow-y-scroll">
|
||||
<div class="relative overflow-x-auto">
|
||||
<table class="w-full text-sm text-left text-gray-600 dark:text-gray-400 table-auto">
|
||||
<thead
|
||||
|
|
@ -74,12 +110,16 @@
|
|||
>
|
||||
<tr>
|
||||
<th scope="col" class="px-3 py-2"> {$i18n.t('Name')} </th>
|
||||
<th scope="col" class="px-3 py-2 hidden md:flex"> {$i18n.t('Created At')} </th>
|
||||
<th scope="col" class="px-3 py-2 hidden md:flex">
|
||||
{$i18n.t('Created At')}
|
||||
</th>
|
||||
<th scope="col" class="px-3 py-2 text-right" />
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each chats as chat, idx}
|
||||
{#each chats.filter((c) => searchValue === '' || c.title
|
||||
.toLowerCase()
|
||||
.includes(searchValue.toLowerCase())) as chat, idx}
|
||||
<tr
|
||||
class="bg-transparent {idx !== chats.length - 1 &&
|
||||
'border-b'} dark:bg-gray-900 dark:border-gray-850 text-xs"
|
||||
|
|
@ -154,11 +194,16 @@
|
|||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- {#each chats as chat}
|
||||
<div>
|
||||
{JSON.stringify(chat)}
|
||||
</div>
|
||||
{/each} -->
|
||||
|
||||
<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>
|
||||
{:else}
|
||||
<div class="text-left text-sm w-full mb-8">
|
||||
|
|
|
|||
|
|
@ -5,67 +5,84 @@
|
|||
|
||||
import { onMount, getContext } from 'svelte';
|
||||
|
||||
import { WEBUI_NAME, modelfiles, settings, user } from '$lib/stores';
|
||||
import { createModel, deleteModel } from '$lib/apis/ollama';
|
||||
import {
|
||||
createNewModelfile,
|
||||
deleteModelfileByTagName,
|
||||
getModelfiles
|
||||
} from '$lib/apis/modelfiles';
|
||||
import { WEBUI_NAME, modelfiles, models, settings, user } from '$lib/stores';
|
||||
import { addNewModel, deleteModelById, getModelInfos } from '$lib/apis/models';
|
||||
|
||||
import { deleteModel } from '$lib/apis/ollama';
|
||||
import { goto } from '$app/navigation';
|
||||
|
||||
import { getModels } from '$lib/apis';
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
let localModelfiles = [];
|
||||
|
||||
let importFiles;
|
||||
let modelfilesImportInputElement: HTMLInputElement;
|
||||
const deleteModelHandler = async (tagName) => {
|
||||
let success = null;
|
||||
let modelsImportInputElement: HTMLInputElement;
|
||||
|
||||
success = await deleteModel(localStorage.token, tagName).catch((err) => {
|
||||
toast.error(err);
|
||||
let searchValue = '';
|
||||
|
||||
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;
|
||||
});
|
||||
|
||||
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) => {
|
||||
await deleteModelHandler(tagName);
|
||||
await deleteModelfileByTagName(localStorage.token, tagName);
|
||||
await modelfiles.set(await getModelfiles(localStorage.token));
|
||||
const cloneModelHandler = async (model) => {
|
||||
if ((model?.info?.base_model_id ?? null) === null) {
|
||||
toast.error($i18n.t('You cannot clone a base model'));
|
||||
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'));
|
||||
|
||||
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(
|
||||
'message',
|
||||
(event) => {
|
||||
if (event.origin !== url) return;
|
||||
if (event.data === 'loaded') {
|
||||
tab.postMessage(JSON.stringify(modelfile), '*');
|
||||
tab.postMessage(JSON.stringify(model), '*');
|
||||
}
|
||||
},
|
||||
false
|
||||
);
|
||||
};
|
||||
|
||||
const saveModelfiles = async (modelfiles) => {
|
||||
let blob = new Blob([JSON.stringify(modelfiles)], {
|
||||
const downloadModels = async (models) => {
|
||||
let blob = new Blob([JSON.stringify(models)], {
|
||||
type: 'application/json'
|
||||
});
|
||||
saveAs(blob, `modelfiles-export-${Date.now()}.json`);
|
||||
saveAs(blob, `models-export-${Date.now()}.json`);
|
||||
};
|
||||
|
||||
onMount(() => {
|
||||
// Legacy code to sync localModelfiles with models
|
||||
localModelfiles = JSON.parse(localStorage.getItem('modelfiles') ?? '[]');
|
||||
|
||||
if (localModelfiles) {
|
||||
|
|
@ -76,13 +93,56 @@
|
|||
|
||||
<svelte:head>
|
||||
<title>
|
||||
{$i18n.t('Modelfiles')} | {$WEBUI_NAME}
|
||||
{$i18n.t('Models')} | {$WEBUI_NAME}
|
||||
</title>
|
||||
</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="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 class=" self-center">
|
||||
<div class=" font-bold">{$i18n.t('Create a modelfile')}</div>
|
||||
<div class=" text-sm">{$i18n.t('Customize Ollama models for a specific purpose')}</div>
|
||||
<div class=" font-bold">{$i18n.t('Create a model')}</div>
|
||||
<div class=" text-sm">{$i18n.t('Customize models for a specific purpose')}</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<hr class=" dark:border-gray-850" />
|
||||
|
||||
<div class=" my-2 mb-5">
|
||||
{#each $modelfiles as modelfile}
|
||||
{#each $models.filter((m) => searchValue === '' || m.name
|
||||
.toLowerCase()
|
||||
.includes(searchValue.toLowerCase())) as model}
|
||||
<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"
|
||||
>
|
||||
<a
|
||||
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=" rounded-full bg-stone-700">
|
||||
<img
|
||||
src={modelfile.imageUrl ?? '/user.png'}
|
||||
src={model?.info?.meta?.profile_image_url ?? '/favicon.png'}
|
||||
alt="modelfile profile"
|
||||
class=" rounded-full w-full h-auto object-cover"
|
||||
/>
|
||||
|
|
@ -125,9 +187,9 @@
|
|||
</div>
|
||||
|
||||
<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">
|
||||
{modelfile.desc}
|
||||
{!!model?.info?.meta?.description ? model?.info?.meta?.description : model.id}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
|
@ -135,7 +197,7 @@
|
|||
<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"
|
||||
type="button"
|
||||
href={`/workspace/modelfiles/edit?tag=${encodeURIComponent(modelfile.tagName)}`}
|
||||
href={`/workspace/models/edit?id=${encodeURIComponent(model.id)}`}
|
||||
>
|
||||
<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"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
// console.log(modelfile);
|
||||
sessionStorage.modelfile = JSON.stringify(modelfile);
|
||||
goto('/workspace/modelfiles/create');
|
||||
cloneModelHandler(model);
|
||||
}}
|
||||
>
|
||||
<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"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
shareModelfile(modelfile);
|
||||
shareModelHandler(model);
|
||||
}}
|
||||
>
|
||||
<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"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
deleteModelfile(modelfile.tagName);
|
||||
deleteModelHandler(model);
|
||||
}}
|
||||
>
|
||||
<svg
|
||||
|
|
@ -231,8 +291,8 @@
|
|||
<div class=" flex justify-end w-full mb-3">
|
||||
<div class="flex space-x-1">
|
||||
<input
|
||||
id="modelfiles-import-input"
|
||||
bind:this={modelfilesImportInputElement}
|
||||
id="models-import-input"
|
||||
bind:this={modelsImportInputElement}
|
||||
bind:files={importFiles}
|
||||
type="file"
|
||||
accept=".json"
|
||||
|
|
@ -242,16 +302,18 @@
|
|||
|
||||
let reader = new FileReader();
|
||||
reader.onload = async (event) => {
|
||||
let savedModelfiles = JSON.parse(event.target.result);
|
||||
console.log(savedModelfiles);
|
||||
let savedModels = JSON.parse(event.target.result);
|
||||
console.log(savedModels);
|
||||
|
||||
for (const modelfile of savedModelfiles) {
|
||||
await createNewModelfile(localStorage.token, modelfile).catch((error) => {
|
||||
for (const model of savedModels) {
|
||||
if (model?.info ?? false) {
|
||||
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]);
|
||||
|
|
@ -261,10 +323,10 @@
|
|||
<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"
|
||||
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">
|
||||
<svg
|
||||
|
|
@ -285,10 +347,10 @@
|
|||
<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"
|
||||
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">
|
||||
<svg
|
||||
|
|
@ -314,47 +376,13 @@
|
|||
</div>
|
||||
|
||||
<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
|
||||
class="self-center w-fit text-sm p-1.5 border dark:border-gray-600 rounded-xl flex"
|
||||
on:click={async () => {
|
||||
saveModelfiles(localModelfiles);
|
||||
downloadModels(localModelfiles);
|
||||
|
||||
localStorage.removeItem('modelfiles');
|
||||
localModelfiles = JSON.parse(localStorage.getItem('modelfiles') ?? '[]');
|
||||
await modelfiles.set(await getModelfiles(localStorage.token));
|
||||
}}
|
||||
>
|
||||
<div class=" self-center">
|
||||
|
|
@ -402,7 +430,7 @@
|
|||
</div>
|
||||
|
||||
<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>
|
||||
</a>
|
||||
|
|
@ -5,12 +5,7 @@
|
|||
|
||||
import { toast } from 'svelte-sonner';
|
||||
|
||||
import {
|
||||
LITELLM_API_BASE_URL,
|
||||
OLLAMA_API_BASE_URL,
|
||||
OPENAI_API_BASE_URL,
|
||||
WEBUI_API_BASE_URL
|
||||
} from '$lib/constants';
|
||||
import { 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 { cancelOllamaRequest, generateChatCompletion } from '$lib/apis/ollama';
|
||||
|
|
@ -79,11 +74,7 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
model.external
|
||||
? model.source === 'litellm'
|
||||
? `${LITELLM_API_BASE_URL}/v1`
|
||||
: `${OPENAI_API_BASE_URL}`
|
||||
: `${OLLAMA_API_BASE_URL}/v1`
|
||||
model?.owned_by === 'openai' ? `${OPENAI_API_BASE_URL}` : `${OLLAMA_API_BASE_URL}/v1`
|
||||
);
|
||||
|
||||
if (res && res.ok) {
|
||||
|
|
@ -150,11 +141,7 @@
|
|||
...messages
|
||||
].filter((message) => message)
|
||||
},
|
||||
model.external
|
||||
? model.source === 'litellm'
|
||||
? `${LITELLM_API_BASE_URL}/v1`
|
||||
: `${OPENAI_API_BASE_URL}`
|
||||
: `${OLLAMA_API_BASE_URL}/v1`
|
||||
model?.owned_by === 'openai' ? `${OPENAI_API_BASE_URL}` : `${OLLAMA_API_BASE_URL}/v1`
|
||||
);
|
||||
|
||||
let responseMessage;
|
||||
|
|
@ -321,12 +308,10 @@
|
|||
<div class="max-w-full">
|
||||
<Selector
|
||||
placeholder={$i18n.t('Select a model')}
|
||||
items={$models
|
||||
.filter((model) => model.name !== 'hr')
|
||||
.map((model) => ({
|
||||
items={$models.map((model) => ({
|
||||
value: model.id,
|
||||
label: model.name,
|
||||
info: model
|
||||
model: model
|
||||
}))}
|
||||
bind:value={selectedModelId}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -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 LITELLM_API_BASE_URL = `${WEBUI_BASE_URL}/litellm/api`;
|
||||
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 IMAGES_API_BASE_URL = `${WEBUI_BASE_URL}/images/api/v1`;
|
||||
export const RAG_API_BASE_URL = `${WEBUI_BASE_URL}/rag/api/v1`;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(تجريبي)",
|
||||
"(e.g. `sh webui.sh --api`)": "( `sh webui.sh --api`مثال)",
|
||||
"(latest)": "(الأخير)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} ...يفكر",
|
||||
"{{user}}'s Chats": "دردشات {{user}}",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} مطلوب",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "الحساب",
|
||||
"Accurate information": "معلومات دقيقة",
|
||||
"Add": "أضف",
|
||||
"Add a model": "أضف موديل",
|
||||
"Add a model tag name": "ضع علامة للأسم الموديل",
|
||||
"Add a short description about what this modelfile does": "أضف وصفًا قصيرًا حول ما يفعله ملف الموديل هذا",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "أضف عنوانًا قصيرًا لبداء المحادثة",
|
||||
"Add a tag": "أضافة تاق",
|
||||
"Add custom prompt": "أضافة مطالبة مخصصه",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "لوحة التحكم",
|
||||
"Admin Settings": "اعدادات المشرف",
|
||||
"Advanced Parameters": "التعليمات المتقدمة",
|
||||
"Advanced Params": "",
|
||||
"all": "الكل",
|
||||
"All Documents": "جميع الملفات",
|
||||
"All Users": "جميع المستخدمين",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "API مفتاح",
|
||||
"API Key created.": "API تم أنشاء المفتاح",
|
||||
"API keys": "مفاتيح واجهة برمجة التطبيقات",
|
||||
"API RPM": "API RPM",
|
||||
"April": "أبريل",
|
||||
"Archive": "الأرشيف",
|
||||
"Archived Chats": "الأرشيف المحادثات",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "متاح",
|
||||
"Back": "خلف",
|
||||
"Bad Response": "استجابة خطاء",
|
||||
"Base Model (From)": "",
|
||||
"before": "قبل",
|
||||
"Being lazy": "كون كسول",
|
||||
"Builder Mode": "بناء الموديل",
|
||||
"Bypass SSL verification for Websites": "تجاوز التحقق من SSL للموقع",
|
||||
"Cancel": "اللغاء",
|
||||
"Categories": "التصنيفات",
|
||||
"Capabilities": "",
|
||||
"Change Password": "تغير الباسورد",
|
||||
"Chat": "المحادثة",
|
||||
"Chat Bubble UI": "UI الدردشة",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "اقتباس",
|
||||
"Click here for help.": "أضغط هنا للمساعدة",
|
||||
"Click here to": "أضغط هنا الانتقال",
|
||||
"Click here to check other modelfiles.": "انقر هنا للتحقق من ملفات الموديلات الأخرى",
|
||||
"Click here to select": "أضغط هنا للاختيار",
|
||||
"Click here to select a csv file.": "أضغط هنا للاختيار ملف csv",
|
||||
"Click here to select documents.": "انقر هنا لاختيار المستندات",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "أنسخ الرابط",
|
||||
"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 modelfile": "إنشاء ملف نموذجي",
|
||||
"Create a model": "",
|
||||
"Create Account": "إنشاء حساب",
|
||||
"Create new key": "عمل مفتاح جديد",
|
||||
"Create new secret key": "عمل سر جديد",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "الموديل المختار",
|
||||
"Current Password": "كلمة السر الحالية",
|
||||
"Custom": "مخصص",
|
||||
"Customize Ollama models for a specific purpose": "تخصيص الموديل Ollama لغرض محدد",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "مظلم",
|
||||
"Dashboard": "لوحة التحكم",
|
||||
"Database": "قاعدة البيانات",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "حذف",
|
||||
"Delete": "حذف",
|
||||
"Delete a model": "حذف الموديل",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "حذف المحادثه",
|
||||
"Delete Chat": "حذف المحادثه.",
|
||||
"Delete Chats": "حذف المحادثات",
|
||||
"delete this link": "أحذف هذا الرابط",
|
||||
"Delete User": "حذف المستخدم",
|
||||
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف",
|
||||
"Deleted {{tagName}}": "{{tagName}} حذف",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "وصف",
|
||||
"Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل",
|
||||
"Disabled": "تعطيل",
|
||||
"Discover a modelfile": "اكتشاف ملف نموذجي",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "اكتشاف موجه",
|
||||
"Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة",
|
||||
"Discover, download, and explore model presets": "اكتشاف وتنزيل واستكشاف الإعدادات المسبقة للنموذج",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "أدخل Chunk الحجم",
|
||||
"Enter Image Size (e.g. 512x512)": "(e.g. 512x512) أدخل حجم الصورة ",
|
||||
"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 Number of Steps (e.g. 50)": "(e.g. 50) أدخل عدد الخطوات",
|
||||
"Enter Score": "أدخل النتيجة",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "تصدير جميع الدردشات (جميع المستخدمين)",
|
||||
"Export Chats": "تصدير جميع الدردشات",
|
||||
"Export Documents Mapping": "تصدير وثائق الخرائط",
|
||||
"Export Modelfiles": "تصدير ملفات النماذج",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "مطالبات التصدير",
|
||||
"Failed to create API Key.": "فشل في إنشاء مفتاح API.",
|
||||
"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "التركيز على إدخال الدردشة",
|
||||
"Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه",
|
||||
"Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:",
|
||||
"From (Base Model)": "من (الموديل الافتراضي)",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "وضع ملء الشاشة",
|
||||
"General": "عام",
|
||||
"General Settings": "الاعدادات العامة",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": " {{name}} مرحبا",
|
||||
"Help": "مساعدة",
|
||||
"Hide": "أخفاء",
|
||||
"Hide Additional Params": "إخفاء المعلمات الإضافية",
|
||||
"How can I help you today?": "كيف استطيع مساعدتك اليوم؟",
|
||||
"Hybrid Search": "البحث الهجين",
|
||||
"Image Generation (Experimental)": "توليد الصور (تجريبي)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "الصور",
|
||||
"Import Chats": "استيراد الدردشات",
|
||||
"Import Documents Mapping": "استيراد خرائط المستندات",
|
||||
"Import Modelfiles": "استيراد ملفات النماذج",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "مطالبات الاستيراد",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "قم بتضمين علامة `-api` عند تشغيل Stable-diffusion-webui",
|
||||
"Input commands": "إدخال الأوامر",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "يناير",
|
||||
"join our Discord for help.": "انضم إلى Discord للحصول على المساعدة.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "يوليو",
|
||||
"June": "يونيو",
|
||||
"JWT Expiration": "JWT تجريبي",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "من جهة اليسار إلى اليمين",
|
||||
"Made by OpenWebUI Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ",
|
||||
"Make sure to enclose them with": "تأكد من إرفاقها",
|
||||
"Manage LiteLLM Models": "LiteLLM إدارة نماذج ",
|
||||
"Manage Models": "إدارة النماذج",
|
||||
"Manage Ollama Models": "Ollama إدارة موديلات ",
|
||||
"March": "مارس",
|
||||
"Max Tokens": "Max Tokens",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.",
|
||||
"May": "مايو",
|
||||
"Memories accessible by LLMs will be shown here.": "",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "تم تحميل النموذج '{{modelName}}' بنجاح",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "النموذج '{{modelTag}}' موجود بالفعل في قائمة الانتظار للتحميل",
|
||||
"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 Name": "أسم الموديل",
|
||||
"Model ID": "",
|
||||
"Model not selected": "لم تختار موديل",
|
||||
"Model Tag Name": "أسم التاق للموديل",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "القائمة البيضاء للموديل",
|
||||
"Model(s) Whitelisted": "القائمة البيضاء الموديل",
|
||||
"Modelfile": "ملف نموذجي",
|
||||
"Modelfile Advanced Settings": "الإعدادات المتقدمة لملف النموذج",
|
||||
"Modelfile Content": "محتوى الملف النموذجي",
|
||||
"Modelfiles": "ملفات الموديل",
|
||||
"Models": "الموديلات",
|
||||
"More": "المزيد",
|
||||
"Name": "الأسم",
|
||||
"Name Tag": "أسم التاق",
|
||||
"Name your modelfile": "قم بتسمية ملف النموذج الخاص بك",
|
||||
"Name your model": "",
|
||||
"New Chat": "دردشة جديدة",
|
||||
"New Password": "كلمة المرور الجديدة",
|
||||
"No results found": "لا توجد نتايج",
|
||||
"No source available": "لا يوجد مصدر متاح",
|
||||
"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.": "ملاحظة: إذا قمت بتعيين الحد الأدنى من النقاط، فلن يؤدي البحث إلا إلى إرجاع المستندات التي لها نقاط أكبر من أو تساوي الحد الأدنى من النقاط.",
|
||||
"Notifications": "إشعارات",
|
||||
"November": "نوفمبر",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "أو",
|
||||
"Other": "آخر",
|
||||
"Overview": "عرض",
|
||||
"Parameters": "Parameters",
|
||||
"Password": "الباسورد",
|
||||
"PDF document (.pdf)": "PDF ملف (.pdf)",
|
||||
"PDF Extract Images (OCR)": "PDF أستخرج الصور (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "مطالبات",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com \"{{searchValue}}\" أسحب من ",
|
||||
"Pull a model from Ollama.com": "Ollama.com سحب الموديل من ",
|
||||
"Pull Progress": "سحب التقدم",
|
||||
"Query Params": "Query Params",
|
||||
"RAG Template": "RAG تنمبلت",
|
||||
"Raw Format": "Raw فورمات",
|
||||
"Read Aloud": "أقراء لي",
|
||||
"Record voice": "سجل صوت",
|
||||
"Redirecting you to OpenWebUI Community": "OpenWebUI إعادة توجيهك إلى مجتمع ",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "حذف الموديل",
|
||||
"Rename": "إعادة تسمية",
|
||||
"Repeat Last N": "N كرر آخر",
|
||||
"Repeat Penalty": "كرر المخالفة",
|
||||
"Request Mode": "وضع الطلب",
|
||||
"Reranking Model": "إعادة تقييم النموذج",
|
||||
"Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "البحث",
|
||||
"Search a model": "البحث عن موديل",
|
||||
"Search Documents": "البحث المستندات",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "أبحث حث",
|
||||
"See readme.md for instructions": "readme.md للحصول على التعليمات",
|
||||
"See what's new": "ما الجديد",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "أختار موديل",
|
||||
"Select a model": "أختار الموديل",
|
||||
"Select an Ollama instance": "أختار سيرفر ",
|
||||
"Select model": " أختار موديل",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "تم",
|
||||
"Send a Message": "يُرجى إدخال طلبك هنا",
|
||||
"Send message": "يُرجى إدخال طلبك هنا.",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "OpenWebUI شارك في مجتمع",
|
||||
"short-summary": "ملخص قصير",
|
||||
"Show": "عرض",
|
||||
"Show Additional Params": "إظهار المعلمات الإضافية",
|
||||
"Show shortcuts": "إظهار الاختصارات",
|
||||
"Showcased creativity": "أظهر الإبداع",
|
||||
"sidebar": "الشريط الجانبي",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "نجاح",
|
||||
"Successfully updated.": "تم التحديث بنجاح",
|
||||
"Suggested": "مقترحات",
|
||||
"Sync All": "مزامنة الكل",
|
||||
"System": "النظام",
|
||||
"System Prompt": "محادثة النظام",
|
||||
"Tags": "الوسوم",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"Write a summary in 50 words that summarizes [topic or keyword].": "اكتب ملخصًا في 50 كلمة يلخص [الموضوع أو الكلمة الرئيسية]",
|
||||
"Yesterday": "أمس",
|
||||
"You": "انت",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "لا تملك محادثات محفوظه",
|
||||
"You have shared this chat": "تم مشاركة هذه المحادثة",
|
||||
"You're a helpful assistant.": "مساعدك المفيد هنا",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Бета)",
|
||||
"(e.g. `sh webui.sh --api`)": "(например `sh webui.sh --api`)",
|
||||
"(latest)": "(последна)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} мисли ...",
|
||||
"{{user}}'s Chats": "{{user}}'s чатове",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} Изисква се Бекенд",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Акаунт",
|
||||
"Accurate information": "Точни информация",
|
||||
"Add": "Добавяне",
|
||||
"Add a model": "Добавяне на модел",
|
||||
"Add a model tag name": "Добавяне на име на таг за модел",
|
||||
"Add a short description about what this modelfile does": "Добавяне на кратко описание за това какво прави този модфайл",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "Добавяне на кратко заглавие за този промпт",
|
||||
"Add a tag": "Добавяне на таг",
|
||||
"Add custom prompt": "Добавяне на собствен промпт",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "Панел на Администратор",
|
||||
"Admin Settings": "Настройки на Администратор",
|
||||
"Advanced Parameters": "Разширени Параметри",
|
||||
"Advanced Params": "",
|
||||
"all": "всички",
|
||||
"All Documents": "Всички Документи",
|
||||
"All Users": "Всички Потребители",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "API Ключ",
|
||||
"API Key created.": "API Ключ създаден.",
|
||||
"API keys": "API Ключове",
|
||||
"API RPM": "API RPM",
|
||||
"April": "Април",
|
||||
"Archive": "Архивирани Чатове",
|
||||
"Archived Chats": "Архивирани Чатове",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "наличен!",
|
||||
"Back": "Назад",
|
||||
"Bad Response": "Невалиден отговор от API",
|
||||
"Base Model (From)": "",
|
||||
"before": "преди",
|
||||
"Being lazy": "Да бъдеш мързелив",
|
||||
"Builder Mode": "Режим на Създаване",
|
||||
"Bypass SSL verification for Websites": "Изключване на SSL проверката за сайтове",
|
||||
"Cancel": "Отказ",
|
||||
"Categories": "Категории",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Промяна на Парола",
|
||||
"Chat": "Чат",
|
||||
"Chat Bubble UI": "UI за чат бублон",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "Цитат",
|
||||
"Click here for help.": "Натиснете тук за помощ.",
|
||||
"Click here to": "Натиснете тук за",
|
||||
"Click here to check other modelfiles.": "Натиснете тук за проверка на други моделфайлове.",
|
||||
"Click here to select": "Натиснете тук, за да изберете",
|
||||
"Click here to select a csv file.": "Натиснете тук, за да изберете csv файл.",
|
||||
"Click here to select documents.": "Натиснете тук, за да изберете документи.",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "Копиране на връзка",
|
||||
"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 modelfile": "Създаване на модфайл",
|
||||
"Create a model": "",
|
||||
"Create Account": "Създаване на Акаунт",
|
||||
"Create new key": "Създаване на нов ключ",
|
||||
"Create new secret key": "Създаване на нов секретен ключ",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "Текущ модел",
|
||||
"Current Password": "Текуща Парола",
|
||||
"Custom": "Персонализиран",
|
||||
"Customize Ollama models for a specific purpose": "Персонализиране на Ollama моделите за конкретна цел",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "Тъмен",
|
||||
"Dashboard": "Панел",
|
||||
"Database": "База данни",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "изтриване",
|
||||
"Delete": "Изтриване",
|
||||
"Delete a model": "Изтриване на модел",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Изтриване на чат",
|
||||
"Delete Chat": "Изтриване на Чат",
|
||||
"Delete Chats": "Изтриване на Чатове",
|
||||
"delete this link": "Изтриване на този линк",
|
||||
"Delete User": "Изтриване на потребител",
|
||||
"Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}",
|
||||
"Deleted {{tagName}}": "Изтрито {{tagName}}",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Описание",
|
||||
"Didn't fully follow instructions": "Не следва инструкциите",
|
||||
"Disabled": "Деактивиран",
|
||||
"Discover a modelfile": "Откриване на модфайл",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "Откриване на промпт",
|
||||
"Discover, download, and explore custom prompts": "Откриване, сваляне и преглед на персонализирани промптове",
|
||||
"Discover, download, and explore model presets": "Откриване, сваляне и преглед на пресетове на модели",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "Въведете Chunk Size",
|
||||
"Enter Image Size (e.g. 512x512)": "Въведете размер на изображението (напр. 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "Въведете брой стъпки (напр. 50)",
|
||||
"Enter Score": "Въведете оценка",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "Експортване на всички чатове (За всички потребители)",
|
||||
"Export Chats": "Експортване на чатове",
|
||||
"Export Documents Mapping": "Експортване на документен мапинг",
|
||||
"Export Modelfiles": "Експортване на модфайлове",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Експортване на промптове",
|
||||
"Failed to create API Key.": "Неуспешно създаване на API ключ.",
|
||||
"Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "Фокусиране на чат вход",
|
||||
"Followed instructions perfectly": "Следвайте инструкциите перфектно",
|
||||
"Format your variables using square brackets like this:": "Форматирайте вашите променливи, като използвате квадратни скоби, както следва:",
|
||||
"From (Base Model)": "От (Базов модел)",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "На Цял екран",
|
||||
"General": "Основни",
|
||||
"General Settings": "Основни Настройки",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Здравей, {{name}}",
|
||||
"Help": "Помощ",
|
||||
"Hide": "Скрий",
|
||||
"Hide Additional Params": "Скрий допълнителни параметри",
|
||||
"How can I help you today?": "Как мога да ви помогна днес?",
|
||||
"Hybrid Search": "Hybrid Search",
|
||||
"Image Generation (Experimental)": "Генерация на изображения (Експериментално)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Изображения",
|
||||
"Import Chats": "Импортване на чатове",
|
||||
"Import Documents Mapping": "Импортване на документен мапинг",
|
||||
"Import Modelfiles": "Импортване на модфайлове",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "Импортване на промптове",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "Включете флага `--api`, когато стартирате stable-diffusion-webui",
|
||||
"Input commands": "Въведете команди",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "Януари",
|
||||
"join our Discord for help.": "свържете се с нашия Discord за помощ.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "Июл",
|
||||
"June": "Июн",
|
||||
"JWT Expiration": "JWT Expiration",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "Направено от OpenWebUI общността",
|
||||
"Make sure to enclose them with": "Уверете се, че са заключени с",
|
||||
"Manage LiteLLM Models": "Управление на LiteLLM Моделите",
|
||||
"Manage Models": "Управление на Моделите",
|
||||
"Manage Ollama Models": "Управление на Ollama Моделите",
|
||||
"March": "Март",
|
||||
"Max Tokens": "Max Tokens",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 модели могат да бъдат сваляни едновременно. Моля, опитайте отново по-късно.",
|
||||
"May": "Май",
|
||||
"Memories accessible by LLMs will be shown here.": "Мемории достъпни от LLMs ще бъдат показани тук.",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "Моделът '{{modelName}}' беше успешно свален.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Моделът '{{modelTag}}' е вече в очакване за сваляне.",
|
||||
"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 Name": "Име на модел",
|
||||
"Model ID": "",
|
||||
"Model not selected": "Не е избран модел",
|
||||
"Model Tag Name": "Име на таг на модел",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "Модел Whitelisting",
|
||||
"Model(s) Whitelisted": "Модели Whitelisted",
|
||||
"Modelfile": "Модфайл",
|
||||
"Modelfile Advanced Settings": "Разширени настройки на модфайл",
|
||||
"Modelfile Content": "Съдържание на модфайл",
|
||||
"Modelfiles": "Модфайлове",
|
||||
"Models": "Модели",
|
||||
"More": "Повече",
|
||||
"Name": "Име",
|
||||
"Name Tag": "Име Таг",
|
||||
"Name your modelfile": "Име на модфайла",
|
||||
"Name your model": "",
|
||||
"New Chat": "Нов чат",
|
||||
"New Password": "Нова парола",
|
||||
"No results found": "Няма намерени резултати",
|
||||
"No source available": "Няма наличен източник",
|
||||
"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.": "Забележка: Ако зададете минимален резултат, търсенето ще върне само документи с резултат, по-голям или равен на минималния резултат.",
|
||||
"Notifications": "Десктоп Известия",
|
||||
"November": "Ноември",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "или",
|
||||
"Other": "Other",
|
||||
"Overview": "Обзор",
|
||||
"Parameters": "Параметри",
|
||||
"Password": "Парола",
|
||||
"PDF document (.pdf)": "PDF документ (.pdf)",
|
||||
"PDF Extract Images (OCR)": "PDF Extract Images (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Промптове",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Извади \"{{searchValue}}\" от Ollama.com",
|
||||
"Pull a model from Ollama.com": "Издърпайте модел от Ollama.com",
|
||||
"Pull Progress": "Прогрес на издърпването",
|
||||
"Query Params": "Query Параметри",
|
||||
"RAG Template": "RAG Шаблон",
|
||||
"Raw Format": "Raw Формат",
|
||||
"Read Aloud": "Прочети на Голос",
|
||||
"Record voice": "Записване на глас",
|
||||
"Redirecting you to OpenWebUI Community": "Пренасочване към OpenWebUI общността",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "Изтриване на модела",
|
||||
"Rename": "Преименуване",
|
||||
"Repeat Last N": "Repeat Last N",
|
||||
"Repeat Penalty": "Repeat Penalty",
|
||||
"Request Mode": "Request Mode",
|
||||
"Reranking Model": "Reranking Model",
|
||||
"Reranking model disabled": "Reranking model disabled",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Търси",
|
||||
"Search a model": "Търси модел",
|
||||
"Search Documents": "Търси Документи",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Търси Промптове",
|
||||
"See readme.md for instructions": "Виж readme.md за инструкции",
|
||||
"See what's new": "Виж какво е новото",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Изберете режим",
|
||||
"Select a model": "Изберете модел",
|
||||
"Select an Ollama instance": "Изберете Ollama инстанция",
|
||||
"Select model": "Изберете модел",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "Изпрати",
|
||||
"Send a Message": "Изпращане на Съобщение",
|
||||
"Send message": "Изпращане на съобщение",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Споделите с OpenWebUI Общността",
|
||||
"short-summary": "short-summary",
|
||||
"Show": "Покажи",
|
||||
"Show Additional Params": "Покажи допълнителни параметри",
|
||||
"Show shortcuts": "Покажи",
|
||||
"Showcased creativity": "Показана креативност",
|
||||
"sidebar": "sidebar",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Успех",
|
||||
"Successfully updated.": "Успешно обновено.",
|
||||
"Suggested": "Препоръчано",
|
||||
"Sync All": "Синхронизиране на всички",
|
||||
"System": "Система",
|
||||
"System Prompt": "Системен Промпт",
|
||||
"Tags": "Тагове",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"Write a summary in 50 words that summarizes [topic or keyword].": "Напиши описание в 50 знака, което описва [тема или ключова дума].",
|
||||
"Yesterday": "вчера",
|
||||
"You": "вие",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "Нямате архивирани разговори.",
|
||||
"You have shared this chat": "Вие сте споделели този чат",
|
||||
"You're a helpful assistant.": "Вие сте полезен асистент.",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(পরিক্ষামূলক)",
|
||||
"(e.g. `sh webui.sh --api`)": "(যেমন `sh webui.sh --api`)",
|
||||
"(latest)": "(সর্বশেষ)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} চিন্তা করছে...",
|
||||
"{{user}}'s Chats": "{{user}}র চ্যাটস",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} ব্যাকএন্ড আবশ্যক",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "একাউন্ট",
|
||||
"Accurate information": "সঠিক তথ্য",
|
||||
"Add": "যোগ করুন",
|
||||
"Add a model": "একটি মডেল যোগ করুন",
|
||||
"Add a model tag name": "একটি মডেল ট্যাগ যোগ করুন",
|
||||
"Add a short description about what this modelfile does": "এই মডেলফাইলটির সম্পর্কে সংক্ষিপ্ত বিবরণ যোগ করুন",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "এই প্রম্পটের জন্য একটি সংক্ষিপ্ত টাইটেল যোগ করুন",
|
||||
"Add a tag": "একটি ট্যাগ যোগ করুন",
|
||||
"Add custom prompt": "একটি কাস্টম প্রম্পট যোগ করুন",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "এডমিন প্যানেল",
|
||||
"Admin Settings": "এডমিন সেটিংস",
|
||||
"Advanced Parameters": "এডভান্সড প্যারামিটার্স",
|
||||
"Advanced Params": "",
|
||||
"all": "সব",
|
||||
"All Documents": "সব ডকুমেন্ট",
|
||||
"All Users": "সব ইউজার",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "এপিআই কোড",
|
||||
"API Key created.": "একটি এপিআই কোড তৈরি করা হয়েছে.",
|
||||
"API keys": "এপিআই কোডস",
|
||||
"API RPM": "এপিআই আরপিএম",
|
||||
"April": "আপ্রিল",
|
||||
"Archive": "আর্কাইভ",
|
||||
"Archived Chats": "চ্যাট ইতিহাস সংরক্ষণাগার",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "উপলব্ধ!",
|
||||
"Back": "পেছনে",
|
||||
"Bad Response": "খারাপ প্রতিক্রিয়া",
|
||||
"Base Model (From)": "",
|
||||
"before": "পূর্ববর্তী",
|
||||
"Being lazy": "অলস হওয়া",
|
||||
"Builder Mode": "বিল্ডার মোড",
|
||||
"Bypass SSL verification for Websites": "ওয়েবসাইটের জন্য SSL যাচাই বাতিল করুন",
|
||||
"Cancel": "বাতিল",
|
||||
"Categories": "ক্যাটাগরিসমূহ",
|
||||
"Capabilities": "",
|
||||
"Change Password": "পাসওয়ার্ড পরিবর্তন করুন",
|
||||
"Chat": "চ্যাট",
|
||||
"Chat Bubble UI": "চ্যাট বাবল UI",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "উদ্ধৃতি",
|
||||
"Click here for help.": "সাহায্যের জন্য এখানে ক্লিক করুন",
|
||||
"Click here to": "এখানে ক্লিক করুন",
|
||||
"Click here to check other modelfiles.": "অন্যান্য মডেলফাইল চেক করার জন্য এখানে ক্লিক করুন",
|
||||
"Click here to select": "নির্বাচন করার জন্য এখানে ক্লিক করুন",
|
||||
"Click here to select a csv file.": "একটি csv ফাইল নির্বাচন করার জন্য এখানে ক্লিক করুন",
|
||||
"Click here to select documents.": "ডকুমেন্টগুলো নির্বাচন করার জন্য এখানে ক্লিক করুন",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "লিংক কপি করুন",
|
||||
"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 modelfile": "একটি মডেলফাইল তৈরি করুন",
|
||||
"Create a model": "",
|
||||
"Create Account": "একাউন্ট তৈরি করুন",
|
||||
"Create new key": "একটি নতুন কী তৈরি করুন",
|
||||
"Create new secret key": "একটি নতুন সিক্রেট কী তৈরি করুন",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "বর্তমান মডেল",
|
||||
"Current Password": "বর্তমান পাসওয়ার্ড",
|
||||
"Custom": "কাস্টম",
|
||||
"Customize Ollama models for a specific purpose": "নির্দিষ্ট উদ্দেশ্যে Ollama মডেল পরিবর্তন করুন",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "ডার্ক",
|
||||
"Dashboard": "ড্যাশবোর্ড",
|
||||
"Database": "ডেটাবেজ",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "মুছে ফেলুন",
|
||||
"Delete": "মুছে ফেলুন",
|
||||
"Delete a model": "একটি মডেল মুছে ফেলুন",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "চ্যাট মুছে ফেলুন",
|
||||
"Delete Chat": "চ্যাট মুছে ফেলুন",
|
||||
"Delete Chats": "চ্যাটগুলো মুছে ফেলুন",
|
||||
"delete this link": "এই লিংক মুছে ফেলুন",
|
||||
"Delete User": "ইউজার মুছে ফেলুন",
|
||||
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} মুছে ফেলা হয়েছে",
|
||||
"Deleted {{tagName}}": "{{tagName}} মুছে ফেলা হয়েছে",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "বিবরণ",
|
||||
"Didn't fully follow instructions": "ইনস্ট্রাকশন সম্পূর্ণ অনুসরণ করা হয়নি",
|
||||
"Disabled": "অক্ষম",
|
||||
"Discover a modelfile": "একটি মডেলফাইল খুঁজে বের করুন",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "একটি প্রম্পট খুঁজে বের করুন",
|
||||
"Discover, download, and explore custom prompts": "কাস্টম প্রম্পটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন",
|
||||
"Discover, download, and explore model presets": "মডেল প্রিসেটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "চাংক সাইজ লিখুন",
|
||||
"Enter Image Size (e.g. 512x512)": "ছবির মাপ লিখুন (যেমন 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "ধাপের সংখ্যা দিন (যেমন: 50)",
|
||||
"Enter Score": "স্কোর দিন",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "সব চ্যাট এক্সপোর্ট করুন (সব ইউজারের)",
|
||||
"Export Chats": "চ্যাটগুলো এক্সপোর্ট করুন",
|
||||
"Export Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং এক্সপোর্ট করুন",
|
||||
"Export Modelfiles": "মডেলফাইলগুলো এক্সপোর্ট করুন",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "প্রম্পটগুলো একপোর্ট করুন",
|
||||
"Failed to create API Key.": "API Key তৈরি করা যায়নি।",
|
||||
"Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "চ্যাট ইনপুট ফোকাস করুন",
|
||||
"Followed instructions perfectly": "নির্দেশাবলী নিখুঁতভাবে অনুসরণ করা হয়েছে",
|
||||
"Format your variables using square brackets like this:": "আপনার ভেরিয়বলগুলো এভাবে স্কয়ার ব্রাকেটের মাধ্যমে সাজান",
|
||||
"From (Base Model)": "উৎস (বেজ মডেল)",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "ফুলস্ক্রিন মোড",
|
||||
"General": "সাধারণ",
|
||||
"General Settings": "সাধারণ সেটিংসমূহ",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "হ্যালো, {{name}}",
|
||||
"Help": "সহায়তা",
|
||||
"Hide": "লুকান",
|
||||
"Hide Additional Params": "অতিরিক্ত প্যারামিটাগুলো লুকান",
|
||||
"How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?",
|
||||
"Hybrid Search": "হাইব্রিড অনুসন্ধান",
|
||||
"Image Generation (Experimental)": "ইমেজ জেনারেশন (পরিক্ষামূলক)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "ছবিসমূহ",
|
||||
"Import Chats": "চ্যাটগুলি ইমপোর্ট করুন",
|
||||
"Import Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং ইমপোর্ট করুন",
|
||||
"Import Modelfiles": "মডেলফাইলগুলো ইমপোর্ট করুন",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "প্রম্পটগুলো ইমপোর্ট করুন",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui চালু করার সময় `--api` ফ্ল্যাগ সংযুক্ত করুন",
|
||||
"Input commands": "ইনপুট কমান্ডস",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "জানুয়ারী",
|
||||
"join our Discord for help.": "সাহায্যের জন্য আমাদের Discord-এ যুক্ত হোন",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "জুলাই",
|
||||
"June": "জুন",
|
||||
"JWT Expiration": "JWT-র মেয়াদ",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "OpenWebUI কমিউনিটিকর্তৃক নির্মিত",
|
||||
"Make sure to enclose them with": "এটা দিয়ে বন্ধনী দিতে ভুলবেন না",
|
||||
"Manage LiteLLM Models": "LiteLLM মডেল ব্যবস্থাপনা করুন",
|
||||
"Manage Models": "মডেলসমূহ ব্যবস্থাপনা করুন",
|
||||
"Manage Ollama Models": "Ollama মডেলসূহ ব্যবস্থাপনা করুন",
|
||||
"March": "মার্চ",
|
||||
"Max Tokens": "সর্বোচ্চ টোকন",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "একসঙ্গে সর্বোচ্চ তিনটি মডেল ডাউনলোড করা যায়। দয়া করে পরে আবার চেষ্টা করুন।",
|
||||
"May": "মে",
|
||||
"Memories accessible by LLMs will be shown here.": "LLMs দ্বারা অ্যাক্সেসযোগ্য মেমোরিগুলি এখানে দেখানো হবে।",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' মডেল সফলভাবে ডাউনলোড হয়েছে।",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "{{modelTag}} ডাউনলোডের জন্য আগে থেকেই অপেক্ষমান আছে।",
|
||||
"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 Name": "মডেলের নাম",
|
||||
"Model ID": "",
|
||||
"Model not selected": "মডেল নির্বাচন করা হয়নি",
|
||||
"Model Tag Name": "মডেলের ট্যাগ নাম",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "মডেল হোয়াইটলিস্টিং",
|
||||
"Model(s) Whitelisted": "হোয়াইটলিস্টেড মডেল(সমূহ)",
|
||||
"Modelfile": "মডেলফাইল",
|
||||
"Modelfile Advanced Settings": "মডেলফাইল এডভান্সড সেটিসমূহ",
|
||||
"Modelfile Content": "মডেলফাইল কনটেন্ট",
|
||||
"Modelfiles": "মডেলফাইলসমূহ",
|
||||
"Models": "মডেলসমূহ",
|
||||
"More": "আরো",
|
||||
"Name": "নাম",
|
||||
"Name Tag": "নামের ট্যাগ",
|
||||
"Name your modelfile": "আপনার মডেলফাইলের নাম দিন",
|
||||
"Name your model": "",
|
||||
"New Chat": "নতুন চ্যাট",
|
||||
"New Password": "নতুন পাসওয়ার্ড",
|
||||
"No results found": "কোন ফলাফল পাওয়া যায়নি",
|
||||
"No source available": "কোন উৎস পাওয়া যায়নি",
|
||||
"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.": "দ্রষ্টব্য: আপনি যদি ন্যূনতম স্কোর সেট করেন তবে অনুসন্ধানটি কেবলমাত্র ন্যূনতম স্কোরের চেয়ে বেশি বা সমান স্কোর সহ নথিগুলি ফেরত দেবে।",
|
||||
"Notifications": "নোটিফিকেশনসমূহ",
|
||||
"November": "নভেম্বর",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "অথবা",
|
||||
"Other": "অন্যান্য",
|
||||
"Overview": "বিবরণ",
|
||||
"Parameters": "প্যারামিটারসমূহ",
|
||||
"Password": "পাসওয়ার্ড",
|
||||
"PDF document (.pdf)": "PDF ডকুমেন্ট (.pdf)",
|
||||
"PDF Extract Images (OCR)": "পিডিএফ এর ছবি থেকে লেখা বের করুন (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "প্রম্পটসমূহ",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com থেকে \"{{searchValue}}\" টানুন",
|
||||
"Pull a model from Ollama.com": "Ollama.com থেকে একটি টেনে আনুন আনুন",
|
||||
"Pull Progress": "Pull চলমান",
|
||||
"Query Params": "Query প্যারামিটারসমূহ",
|
||||
"RAG Template": "RAG টেম্পলেট",
|
||||
"Raw Format": "Raw ফরম্যাট",
|
||||
"Read Aloud": "পড়াশোনা করুন",
|
||||
"Record voice": "ভয়েস রেকর্ড করুন",
|
||||
"Redirecting you to OpenWebUI Community": "আপনাকে OpenWebUI কমিউনিটিতে পাঠানো হচ্ছে",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "মডেল রিমুভ করুন",
|
||||
"Rename": "রেনেম",
|
||||
"Repeat Last N": "রিপিট Last N",
|
||||
"Repeat Penalty": "রিপিট প্যানাল্টি",
|
||||
"Request Mode": "রিকোয়েস্ট মোড",
|
||||
"Reranking Model": "রির্যাক্টিং মডেল",
|
||||
"Reranking model disabled": "রির্যাক্টিং মডেল নিষ্ক্রিয় করা",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "অনুসন্ধান",
|
||||
"Search a model": "মডেল অনুসন্ধান করুন",
|
||||
"Search Documents": "ডকুমেন্টসমূহ অনুসন্ধান করুন",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "প্রম্পটসমূহ অনুসন্ধান করুন",
|
||||
"See readme.md for instructions": "নির্দেশিকার জন্য readme.md দেখুন",
|
||||
"See what's new": "নতুন কী আছে দেখুন",
|
||||
"Seed": "সীড",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "একটি মডেল নির্বাচন করুন",
|
||||
"Select a model": "একটি মডেল নির্বাচন করুন",
|
||||
"Select an Ollama instance": "একটি Ollama ইন্সট্যান্স নির্বাচন করুন",
|
||||
"Select model": "মডেল নির্বাচন করুন",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "পাঠান",
|
||||
"Send a Message": "একটি মেসেজ পাঠান",
|
||||
"Send message": "মেসেজ পাঠান",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "OpenWebUI কমিউনিটিতে শেয়ার করুন",
|
||||
"short-summary": "সংক্ষিপ্ত বিবরণ",
|
||||
"Show": "দেখান",
|
||||
"Show Additional Params": "অতিরিক্ত প্যারামিটারগুলো দেখান",
|
||||
"Show shortcuts": "শর্টকাটগুলো দেখান",
|
||||
"Showcased creativity": "সৃজনশীলতা প্রদর্শন",
|
||||
"sidebar": "সাইডবার",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "সফল",
|
||||
"Successfully updated.": "সফলভাবে আপডেট হয়েছে",
|
||||
"Suggested": "প্রস্তাবিত",
|
||||
"Sync All": "সব সিংক্রোনাইজ করুন",
|
||||
"System": "সিস্টেম",
|
||||
"System Prompt": "সিস্টেম প্রম্পট",
|
||||
"Tags": "ট্যাগসমূহ",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"Write a summary in 50 words that summarizes [topic or keyword].": "৫০ শব্দের মধ্যে [topic or keyword] এর একটি সারসংক্ষেপ লিখুন।",
|
||||
"Yesterday": "আগামী",
|
||||
"You": "আপনি",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "আপনার কোনও আর্কাইভ করা কথোপকথন নেই।",
|
||||
"You have shared this chat": "আপনি এই চ্যাটটি শেয়ার করেছেন",
|
||||
"You're a helpful assistant.": "আপনি একজন উপকারী এসিস্ট্যান্ট",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Beta)",
|
||||
"(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)",
|
||||
"(latest)": "(últim)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} està pensant...",
|
||||
"{{user}}'s Chats": "{{user}}'s Chats",
|
||||
"{{webUIName}} Backend Required": "Es requereix Backend de {{webUIName}}",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Compte",
|
||||
"Accurate information": "Informació precisa",
|
||||
"Add": "Afegir",
|
||||
"Add a model": "Afegeix un model",
|
||||
"Add a model tag name": "Afegeix un nom d'etiqueta de model",
|
||||
"Add a short description about what this modelfile does": "Afegeix una descripció curta del que fa aquest arxiu de model",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "Afegeix un títol curt per aquest prompt",
|
||||
"Add a tag": "Afegeix una etiqueta",
|
||||
"Add custom prompt": "Afegir un prompt personalitzat",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "Panell d'Administració",
|
||||
"Admin Settings": "Configuració d'Administració",
|
||||
"Advanced Parameters": "Paràmetres Avançats",
|
||||
"Advanced Params": "",
|
||||
"all": "tots",
|
||||
"All Documents": "Tots els Documents",
|
||||
"All Users": "Tots els Usuaris",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "Clau de l'API",
|
||||
"API Key created.": "Clau de l'API creada.",
|
||||
"API keys": "Claus de l'API",
|
||||
"API RPM": "RPM de l'API",
|
||||
"April": "Abril",
|
||||
"Archive": "Arxiu",
|
||||
"Archived Chats": "Arxiu d'historial de xat",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "disponible!",
|
||||
"Back": "Enrere",
|
||||
"Bad Response": "Resposta Erroni",
|
||||
"Base Model (From)": "",
|
||||
"before": "abans",
|
||||
"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",
|
||||
"Cancel": "Cancel·la",
|
||||
"Categories": "Categories",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Canvia la Contrasenya",
|
||||
"Chat": "Xat",
|
||||
"Chat Bubble UI": "Chat Bubble UI",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "Citació",
|
||||
"Click here for help.": "Fes clic aquí per ajuda.",
|
||||
"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 a csv file.": "Fes clic aquí per seleccionar un fitxer csv.",
|
||||
"Click here to select documents.": "Fes clic aquí per seleccionar documents.",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "Copiar l'enllaç",
|
||||
"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 modelfile": "Crea un fitxer de model",
|
||||
"Create a model": "",
|
||||
"Create Account": "Crea un Compte",
|
||||
"Create new key": "Crea una nova clau",
|
||||
"Create new secret key": "Crea una nova clau secreta",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "Model Actual",
|
||||
"Current Password": "Contrasenya Actual",
|
||||
"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",
|
||||
"Dashboard": "Tauler",
|
||||
"Database": "Base de Dades",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "esborra",
|
||||
"Delete": "Esborra",
|
||||
"Delete a model": "Esborra un model",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Esborra xat",
|
||||
"Delete Chat": "Esborra Xat",
|
||||
"Delete Chats": "Esborra Xats",
|
||||
"delete this link": "Esborra aquest enllaç",
|
||||
"Delete User": "Esborra Usuari",
|
||||
"Deleted {{deleteModelTag}}": "Esborrat {{deleteModelTag}}",
|
||||
"Deleted {{tagName}}": "Esborrat {{tagName}}",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Descripció",
|
||||
"Didn't fully follow instructions": "No s'ha completat els instruccions",
|
||||
"Disabled": "Desactivat",
|
||||
"Discover a modelfile": "Descobreix un fitxer de model",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "Descobreix un prompt",
|
||||
"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",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "Introdueix la Mida del Bloc",
|
||||
"Enter Image Size (e.g. 512x512)": "Introdueix la Mida de la Imatge (p. ex. 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "Introdueix el Nombre de Passos (p. ex. 50)",
|
||||
"Enter Score": "Introdueix el Puntuació",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "Exporta Tots els Xats (Tots els Usuaris)",
|
||||
"Export Chats": "Exporta Xats",
|
||||
"Export Documents Mapping": "Exporta el Mapatge de Documents",
|
||||
"Export Modelfiles": "Exporta Fitxers de Model",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Exporta Prompts",
|
||||
"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",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "Enfoca l'entrada del xat",
|
||||
"Followed instructions perfectly": "Siguiu les instruccions perfeicte",
|
||||
"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",
|
||||
"General": "General",
|
||||
"General Settings": "Configuració General",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Hola, {{name}}",
|
||||
"Help": "Ajuda",
|
||||
"Hide": "Amaga",
|
||||
"Hide Additional Params": "Amaga Paràmetres Addicionals",
|
||||
"How can I help you today?": "Com et puc ajudar avui?",
|
||||
"Hybrid Search": "Cerca Hibrida",
|
||||
"Image Generation (Experimental)": "Generació d'Imatges (Experimental)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Imatges",
|
||||
"Import Chats": "Importa Xats",
|
||||
"Import Documents Mapping": "Importa el Mapa de Documents",
|
||||
"Import Modelfiles": "Importa Fitxers de Model",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "Importa Prompts",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "Inclou la bandera `--api` quan executis stable-diffusion-webui",
|
||||
"Input commands": "Entra ordres",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "Gener",
|
||||
"join our Discord for help.": "uneix-te al nostre Discord per ajuda.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "Juliol",
|
||||
"June": "Juny",
|
||||
"JWT Expiration": "Expiració de JWT",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "Creat per la Comunitat OpenWebUI",
|
||||
"Make sure to enclose them with": "Assegura't d'envoltar-los amb",
|
||||
"Manage LiteLLM Models": "Gestiona Models LiteLLM",
|
||||
"Manage Models": "Gestiona Models",
|
||||
"Manage Ollama Models": "Gestiona Models Ollama",
|
||||
"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.",
|
||||
"May": "Maig",
|
||||
"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 '{{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 {{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 Name": "Nom del Model",
|
||||
"Model ID": "",
|
||||
"Model not selected": "Model no seleccionat",
|
||||
"Model Tag Name": "Nom de l'Etiqueta del Model",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "Llista Blanca de Models",
|
||||
"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",
|
||||
"Modelfiles": "Fitxers de Model",
|
||||
"Models": "Models",
|
||||
"More": "Més",
|
||||
"Name": "Nom",
|
||||
"Name Tag": "Etiqueta de Nom",
|
||||
"Name your modelfile": "Nomena el teu fitxer de model",
|
||||
"Name your model": "",
|
||||
"New Chat": "Xat Nou",
|
||||
"New Password": "Nova Contrasenya",
|
||||
"No results found": "No s'han trobat resultats",
|
||||
"No source available": "Sense font disponible",
|
||||
"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.",
|
||||
"Notifications": "Notificacions d'Escriptori",
|
||||
"November": "Novembre",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "o",
|
||||
"Other": "Altres",
|
||||
"Overview": "Visió general",
|
||||
"Parameters": "Paràmetres",
|
||||
"Password": "Contrasenya",
|
||||
"PDF document (.pdf)": "Document PDF (.pdf)",
|
||||
"PDF Extract Images (OCR)": "Extreu Imatges de PDF (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Prompts",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Treu \"{{searchValue}}\" de 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",
|
||||
"RAG Template": "Plantilla RAG",
|
||||
"Raw Format": "Format Brut",
|
||||
"Read Aloud": "Llegiu al voltant",
|
||||
"Record voice": "Enregistra veu",
|
||||
"Redirecting you to OpenWebUI Community": "Redirigint-te a la Comunitat OpenWebUI",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "Elimina Model",
|
||||
"Rename": "Canvia el nom",
|
||||
"Repeat Last N": "Repeteix Últim N",
|
||||
"Repeat Penalty": "Penalització de Repetició",
|
||||
"Request Mode": "Mode de Sol·licitud",
|
||||
"Reranking Model": "Model de Reranking desactivat",
|
||||
"Reranking model disabled": "Model de Reranking desactivat",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Cerca",
|
||||
"Search a model": "Cerca un model",
|
||||
"Search Documents": "Cerca Documents",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Cerca Prompts",
|
||||
"See readme.md for instructions": "Consulta el readme.md per a instruccions",
|
||||
"See what's new": "Veure novetats",
|
||||
"Seed": "Llavor",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Selecciona un mode",
|
||||
"Select a model": "Selecciona un model",
|
||||
"Select an Ollama instance": "Selecciona una instància d'Ollama",
|
||||
"Select model": "Selecciona un model",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "Envia",
|
||||
"Send a Message": "Envia un Missatge",
|
||||
"Send message": "Envia missatge",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Comparteix amb la Comunitat OpenWebUI",
|
||||
"short-summary": "resum curt",
|
||||
"Show": "Mostra",
|
||||
"Show Additional Params": "Mostra Paràmetres Addicionals",
|
||||
"Show shortcuts": "Mostra dreceres",
|
||||
"Showcased creativity": "Mostra la creativitat",
|
||||
"sidebar": "barra lateral",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Èxit",
|
||||
"Successfully updated.": "Actualitzat amb èxit.",
|
||||
"Suggested": "Suggerit",
|
||||
"Sync All": "Sincronitza Tot",
|
||||
"System": "Sistema",
|
||||
"System Prompt": "Prompt del Sistema",
|
||||
"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].",
|
||||
"Yesterday": "Ayer",
|
||||
"You": "Tu",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "No tens converses arxivades.",
|
||||
"You have shared this chat": "Has compartit aquest xat",
|
||||
"You're a helpful assistant.": "Ets un assistent útil.",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Beta)",
|
||||
"(e.g. `sh webui.sh --api`)": "(pananglitan `sh webui.sh --api`)",
|
||||
"(latest)": "",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} hunahunaa...",
|
||||
"{{user}}'s Chats": "",
|
||||
"{{webUIName}} Backend Required": "Backend {{webUIName}} gikinahanglan",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Account",
|
||||
"Accurate information": "",
|
||||
"Add": "",
|
||||
"Add a model": "Pagdugang ug template",
|
||||
"Add a model tag name": "Pagdugang usa ka ngalan sa tag alang sa template",
|
||||
"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 description about what this model does": "",
|
||||
"Add a short title for this prompt": "Pagdugang og usa ka mubo nga titulo alang niini nga prompt",
|
||||
"Add a tag": "Pagdugang og tag",
|
||||
"Add custom prompt": "Pagdugang og custom prompt",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "Admin Panel",
|
||||
"Admin Settings": "Mga setting sa administratibo",
|
||||
"Advanced Parameters": "advanced settings",
|
||||
"Advanced Params": "",
|
||||
"all": "tanan",
|
||||
"All Documents": "",
|
||||
"All Users": "Ang tanan nga mga tiggamit",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "yawe sa API",
|
||||
"API Key created.": "",
|
||||
"API keys": "",
|
||||
"API RPM": "RPM API",
|
||||
"April": "",
|
||||
"Archive": "",
|
||||
"Archived Chats": "pagrekord sa chat",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "magamit!",
|
||||
"Back": "Balik",
|
||||
"Bad Response": "",
|
||||
"Base Model (From)": "",
|
||||
"before": "",
|
||||
"Being lazy": "",
|
||||
"Builder Mode": "Mode sa Magtutukod",
|
||||
"Bypass SSL verification for Websites": "",
|
||||
"Cancel": "Pagkanselar",
|
||||
"Categories": "Mga kategoriya",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Usba ang password",
|
||||
"Chat": "Panaghisgot",
|
||||
"Chat Bubble UI": "",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "Mga kinutlo",
|
||||
"Click here for help.": "I-klik dinhi alang sa tabang.",
|
||||
"Click here to": "",
|
||||
"Click here to check other modelfiles.": "Pag-klik dinhi aron susihon ang ubang mga file sa template.",
|
||||
"Click here to select": "I-klik dinhi aron makapili",
|
||||
"Click here to select a csv file.": "",
|
||||
"Click here to select documents.": "Pag-klik dinhi aron mapili ang mga dokumento.",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "",
|
||||
"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 modelfile": "Paghimo ug template file",
|
||||
"Create a model": "",
|
||||
"Create Account": "Paghimo og account",
|
||||
"Create new key": "",
|
||||
"Create new secret key": "",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "Kasamtangang modelo",
|
||||
"Current Password": "Kasamtangang Password",
|
||||
"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",
|
||||
"Dashboard": "",
|
||||
"Database": "Database",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "DELETE",
|
||||
"Delete": "",
|
||||
"Delete a model": "Pagtangtang sa usa ka template",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Pagtangtang sa panaghisgot",
|
||||
"Delete Chat": "",
|
||||
"Delete Chats": "Pagtangtang sa mga chat",
|
||||
"delete this link": "",
|
||||
"Delete User": "",
|
||||
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} gipapas",
|
||||
"Deleted {{tagName}}": "",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Deskripsyon",
|
||||
"Didn't fully follow instructions": "",
|
||||
"Disabled": "Nabaldado",
|
||||
"Discover a modelfile": "Pagdiskobre ug template file",
|
||||
"Discover a model": "",
|
||||
"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 model presets": "Pagdiskobre, pag-download, ug pagsuhid sa mga preset sa template",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "Isulod ang block size",
|
||||
"Enter Image Size (e.g. 512x512)": "Pagsulod sa gidak-on sa hulagway (pananglitan 512x512)",
|
||||
"Enter language codes": "",
|
||||
"Enter LiteLLM API Base URL (litellm_params.api_base)": "Pagsulod sa LiteLLM API base URL (litelm_params.api_base)",
|
||||
"Enter LiteLLM API Key (litellm_params.api_key)": "Isulod ang LiteLLM API key (litelm_params.api_key)",
|
||||
"Enter LiteLLM API RPM (litellm_params.rpm)": "Isulod ang LiteLLM API RPM (litelm_params.rpm)",
|
||||
"Enter LiteLLM Model (litellm_params.model)": "Pagsulod sa LiteLLM nga modelo (litelm_params.model)",
|
||||
"Enter Max Tokens (litellm_params.max_tokens)": "Pagsulod sa max nga gidaghanon sa mga token (litelm_params.max_tokens)",
|
||||
"Enter model tag (e.g. {{modelTag}})": "Pagsulod sa template tag (e.g. {{modelTag}})",
|
||||
"Enter Number of Steps (e.g. 50)": "Pagsulod sa gidaghanon sa mga lakang (e.g. 50)",
|
||||
"Enter Score": "",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "I-export ang tanan nga mga chat (Tanan nga tiggamit)",
|
||||
"Export Chats": "I-export ang mga chat",
|
||||
"Export Documents Mapping": "I-export ang pagmapa sa dokumento",
|
||||
"Export Modelfiles": "I-export ang mga file sa modelo",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Export prompts",
|
||||
"Failed to create API Key.": "",
|
||||
"Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "Pag-focus sa entry sa diskusyon",
|
||||
"Followed instructions perfectly": "",
|
||||
"Format your variables using square brackets like this:": "I-format ang imong mga variable gamit ang square brackets sama niini:",
|
||||
"From (Base Model)": "Gikan sa (Basic nga modelo)",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "Full screen mode",
|
||||
"General": "Heneral",
|
||||
"General Settings": "kinatibuk-ang mga setting",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Maayong buntag, {{name}}",
|
||||
"Help": "",
|
||||
"Hide": "Tagoa",
|
||||
"Hide Additional Params": "Tagoa ang dugang nga mga setting",
|
||||
"How can I help you today?": "Unsaon nako pagtabang kanimo karon?",
|
||||
"Hybrid Search": "",
|
||||
"Image Generation (Experimental)": "Pagmugna og hulagway (Eksperimento)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Mga hulagway",
|
||||
"Import Chats": "Import nga mga chat",
|
||||
"Import Documents Mapping": "Import nga pagmapa sa dokumento",
|
||||
"Import Modelfiles": "Import nga mga file sa modelo",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "Import prompt",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "Iapil ang `--api` nga bandila kung nagdagan nga stable-diffusion-webui",
|
||||
"Input commands": "Pagsulod sa input commands",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "",
|
||||
"join our Discord for help.": "Apil sa among Discord alang sa tabang.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "",
|
||||
"June": "",
|
||||
"JWT Expiration": "Pag-expire sa JWT",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "",
|
||||
"Made by OpenWebUI Community": "Gihimo sa komunidad sa OpenWebUI",
|
||||
"Make sure to enclose them with": "Siguruha nga palibutan sila",
|
||||
"Manage LiteLLM Models": "Pagdumala sa mga modelo sa LiteLLM",
|
||||
"Manage Models": "Pagdumala sa mga templates",
|
||||
"Manage Ollama Models": "Pagdumala sa mga modelo sa Ollama",
|
||||
"March": "",
|
||||
"Max Tokens": "Maximum nga mga token",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Ang labing taas nga 3 nga mga disenyo mahimong ma-download nga dungan. ",
|
||||
"May": "",
|
||||
"Memories accessible by LLMs will be shown here.": "",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "Ang modelo'{{modelName}}' malampuson nga na-download.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Ang modelo'{{modelTag}}' naa na sa pila para ma-download.",
|
||||
"Model {{modelId}} not found": "Modelo {{modelId}} wala makit-an",
|
||||
"Model {{modelName}} already exists.": "Ang modelo {{modelName}} Anaa na.",
|
||||
"Model {{modelName}} is not vision capable": "",
|
||||
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "",
|
||||
"Model Name": "Ngalan sa Modelo",
|
||||
"Model ID": "",
|
||||
"Model not selected": "Wala gipili ang modelo",
|
||||
"Model Tag Name": "Ngalan sa tag sa modelo",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "Whitelist sa modelo",
|
||||
"Model(s) Whitelisted": "Gi-whitelist nga (mga) modelo",
|
||||
"Modelfile": "File sa template",
|
||||
"Modelfile Advanced Settings": "Advanced nga template file setting",
|
||||
"Modelfile Content": "Mga sulod sa template file",
|
||||
"Modelfiles": "Mga file sa modelo",
|
||||
"Models": "Mga modelo",
|
||||
"More": "",
|
||||
"Name": "Ngalan",
|
||||
"Name Tag": "Tag sa ngalan",
|
||||
"Name your modelfile": "Ngalan ang imong template file",
|
||||
"Name your model": "",
|
||||
"New Chat": "Bag-ong diskusyon",
|
||||
"New Password": "Bag-ong Password",
|
||||
"No results found": "",
|
||||
"No source available": "Walay tinubdan nga anaa",
|
||||
"Not factually correct": "",
|
||||
"Not sure what to add?": "Dili sigurado kung unsa ang idugang?",
|
||||
"Not sure what to write? Switch to": "Dili sigurado kung unsa ang isulat? ",
|
||||
"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": "Mga pahibalo sa desktop",
|
||||
"November": "",
|
||||
|
|
@ -302,7 +291,7 @@
|
|||
"Okay, Let's Go!": "Okay, lakaw na!",
|
||||
"OLED Dark": "",
|
||||
"Ollama": "",
|
||||
"Ollama Base URL": "Ollama Base URL",
|
||||
"Ollama API": "",
|
||||
"Ollama Version": "Ollama nga bersyon",
|
||||
"On": "Gipaandar",
|
||||
"Only": "Lamang",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "O",
|
||||
"Other": "",
|
||||
"Overview": "",
|
||||
"Parameters": "Mga setting",
|
||||
"Password": "Password",
|
||||
"PDF document (.pdf)": "",
|
||||
"PDF Extract Images (OCR)": "PDF Image Extraction (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Mga aghat",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "",
|
||||
"Pull a model from Ollama.com": "Pagkuha ug template gikan sa Ollama.com",
|
||||
"Pull Progress": "Pag-uswag sa pag-download",
|
||||
"Query Params": "Mga parameter sa pangutana",
|
||||
"RAG Template": "RAG nga modelo",
|
||||
"Raw Format": "Hilaw nga pormat",
|
||||
"Read Aloud": "",
|
||||
"Record voice": "Irekord ang tingog",
|
||||
"Redirecting you to OpenWebUI Community": "Gi-redirect ka sa komunidad sa OpenWebUI",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "",
|
||||
"Rename": "",
|
||||
"Repeat Last N": "Balika ang katapusang N",
|
||||
"Repeat Penalty": "Balika ang silot",
|
||||
"Request Mode": "Query mode",
|
||||
"Reranking Model": "",
|
||||
"Reranking model disabled": "",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Pagpanukiduki",
|
||||
"Search a model": "",
|
||||
"Search Documents": "Pangitaa ang mga dokumento",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Pangitaa ang mga prompt",
|
||||
"See readme.md for instructions": "Tan-awa ang readme.md alang sa mga panudlo",
|
||||
"See what's new": "Tan-awa unsay bag-o",
|
||||
"Seed": "Binhi",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Pagpili og mode",
|
||||
"Select a model": "Pagpili og modelo",
|
||||
"Select an Ollama instance": "Pagpili usa ka pananglitan sa Ollama",
|
||||
"Select model": "Pagpili og modelo",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "",
|
||||
"Send a Message": "Magpadala ug mensahe",
|
||||
"Send message": "Magpadala ug mensahe",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Ipakigbahin sa komunidad sa OpenWebUI",
|
||||
"short-summary": "mubo nga summary",
|
||||
"Show": "Pagpakita",
|
||||
"Show Additional Params": "Ipakita ang dugang nga mga setting",
|
||||
"Show shortcuts": "Ipakita ang mga shortcut",
|
||||
"Showcased creativity": "",
|
||||
"sidebar": "lateral bar",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Kalampusan",
|
||||
"Successfully updated.": "Malampuson nga na-update.",
|
||||
"Suggested": "",
|
||||
"Sync All": "I-synchronize ang tanan",
|
||||
"System": "Sistema",
|
||||
"System Prompt": "Madasig nga Sistema",
|
||||
"Tags": "Mga tag",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"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 cannot clone a base model": "",
|
||||
"You have no archived conversations.": "",
|
||||
"You have shared this chat": "",
|
||||
"You're a helpful assistant.": "Usa ka ka mapuslanon nga katabang",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Beta)",
|
||||
"(e.g. `sh webui.sh --api`)": "(z.B. `sh webui.sh --api`)",
|
||||
"(latest)": "(neueste)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} denkt nach...",
|
||||
"{{user}}'s Chats": "{{user}}s Chats",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}}-Backend erforderlich",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Account",
|
||||
"Accurate information": "Genaue Information",
|
||||
"Add": "Hinzufügen",
|
||||
"Add a model": "Füge ein Modell hinzu",
|
||||
"Add a model tag name": "Benenne deinen Modell-Tag",
|
||||
"Add a short description about what this modelfile does": "Füge eine kurze Beschreibung hinzu, was dieses Modelfile kann",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "Füge einen kurzen Titel für diesen Prompt hinzu",
|
||||
"Add a tag": "benenne",
|
||||
"Add custom prompt": "Eigenen Prompt hinzufügen",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "Admin Panel",
|
||||
"Admin Settings": "Admin Einstellungen",
|
||||
"Advanced Parameters": "Erweiterte Parameter",
|
||||
"Advanced Params": "",
|
||||
"all": "Alle",
|
||||
"All Documents": "Alle Dokumente",
|
||||
"All Users": "Alle Benutzer",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "API Key",
|
||||
"API Key created.": "API Key erstellt",
|
||||
"API keys": "API Schlüssel",
|
||||
"API RPM": "API RPM",
|
||||
"April": "April",
|
||||
"Archive": "Archivieren",
|
||||
"Archived Chats": "Archivierte Chats",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "verfügbar!",
|
||||
"Back": "Zurück",
|
||||
"Bad Response": "Schlechte Antwort",
|
||||
"Base Model (From)": "",
|
||||
"before": "bereits geteilt",
|
||||
"Being lazy": "Faul sein",
|
||||
"Builder Mode": "Builder Modus",
|
||||
"Bypass SSL verification for Websites": "Bypass SSL-Verifizierung für Websites",
|
||||
"Cancel": "Abbrechen",
|
||||
"Categories": "Kategorien",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Passwort ändern",
|
||||
"Chat": "Chat",
|
||||
"Chat Bubble UI": "Chat Bubble UI",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "Zitate",
|
||||
"Click here for help.": "Klicke hier für Hilfe.",
|
||||
"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 a csv file.": "Klicke hier um eine CSV-Datei auszuwählen.",
|
||||
"Click here to select documents.": "Klicke hier um Dokumente auszuwählen",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "Link kopieren",
|
||||
"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 modelfile": "Modelfiles erstellen",
|
||||
"Create a model": "",
|
||||
"Create Account": "Konto erstellen",
|
||||
"Create new key": "Neuen Schlüssel erstellen",
|
||||
"Create new secret key": "Neuen API Schlüssel erstellen",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "Aktuelles Modell",
|
||||
"Current Password": "Aktuelles Passwort",
|
||||
"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",
|
||||
"Dashboard": "Dashboard",
|
||||
"Database": "Datenbank",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "löschen",
|
||||
"Delete": "Löschen",
|
||||
"Delete a model": "Ein Modell löschen",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Chat löschen",
|
||||
"Delete Chat": "Chat löschen",
|
||||
"Delete Chats": "Chats löschen",
|
||||
"delete this link": "diesen Link zu löschen",
|
||||
"Delete User": "Benutzer löschen",
|
||||
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} gelöscht",
|
||||
"Deleted {{tagName}}": "{{tagName}} gelöscht",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Beschreibung",
|
||||
"Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt",
|
||||
"Disabled": "Deaktiviert",
|
||||
"Discover a modelfile": "Ein Modelfile entdecken",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "Einen Prompt entdecken",
|
||||
"Discover, download, and explore custom prompts": "Benutzerdefinierte Prompts 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 Image Size (e.g. 512x512)": "Gib die Bildgröße ein (z.B. 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "Gib die Anzahl an Schritten ein (z.B. 50)",
|
||||
"Enter Score": "Score eingeben",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "Alle Chats exportieren (alle Benutzer)",
|
||||
"Export Chats": "Chats exportieren",
|
||||
"Export Documents Mapping": "Dokumentenmapping exportieren",
|
||||
"Export Modelfiles": "Modelfiles exportieren",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Prompts exportieren",
|
||||
"Failed to create API Key.": "API Key erstellen fehlgeschlagen",
|
||||
"Failed to read clipboard contents": "Fehler beim Lesen des Zwischenablageninhalts",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "Chat-Eingabe fokussieren",
|
||||
"Followed instructions perfectly": "Anweisungen perfekt befolgt",
|
||||
"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",
|
||||
"General": "Allgemein",
|
||||
"General Settings": "Allgemeine Einstellungen",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Hallo, {{name}}",
|
||||
"Help": "Hilfe",
|
||||
"Hide": "Verbergen",
|
||||
"Hide Additional Params": "Verstecke zusätzliche Parameter",
|
||||
"How can I help you today?": "Wie kann ich dir heute helfen?",
|
||||
"Hybrid Search": "Hybride Suche",
|
||||
"Image Generation (Experimental)": "Bildgenerierung (experimentell)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Bilder",
|
||||
"Import Chats": "Chats importieren",
|
||||
"Import Documents Mapping": "Dokumentenmapping importieren",
|
||||
"Import Modelfiles": "Modelfiles importieren",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "Prompts importieren",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "Füge das `--api`-Flag hinzu, wenn du stable-diffusion-webui nutzt",
|
||||
"Input commands": "Eingabebefehle",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "Januar",
|
||||
"join our Discord for help.": "Trete unserem Discord bei, um Hilfe zu erhalten.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "Juli",
|
||||
"June": "Juni",
|
||||
"JWT Expiration": "JWT-Ablauf",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "Von der OpenWebUI-Community",
|
||||
"Make sure to enclose them with": "Formatiere deine Variablen mit:",
|
||||
"Manage LiteLLM Models": "LiteLLM-Modelle verwalten",
|
||||
"Manage Models": "Modelle verwalten",
|
||||
"Manage Ollama Models": "Ollama-Modelle verwalten",
|
||||
"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.",
|
||||
"May": "Mai",
|
||||
"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 '{{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 {{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 Name": "Modellname",
|
||||
"Model ID": "",
|
||||
"Model not selected": "Modell nicht ausgewählt",
|
||||
"Model Tag Name": "Modell-Tag-Name",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "Modell-Whitelisting",
|
||||
"Model(s) Whitelisted": "Modell(e) auf der Whitelist",
|
||||
"Modelfile": "Modelfiles",
|
||||
"Modelfile Advanced Settings": "Erweiterte Modelfileseinstellungen",
|
||||
"Modelfile Content": "Modelfile Content",
|
||||
"Modelfiles": "Modelfiles",
|
||||
"Models": "Modelle",
|
||||
"More": "Mehr",
|
||||
"Name": "Name",
|
||||
"Name Tag": "Namens-Tag",
|
||||
"Name your modelfile": "Benenne dein modelfile",
|
||||
"Name your model": "",
|
||||
"New Chat": "Neuer Chat",
|
||||
"New Password": "Neues Passwort",
|
||||
"No results found": "Keine Ergebnisse gefunden",
|
||||
"No source available": "Keine Quelle verfügbar.",
|
||||
"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.",
|
||||
"Notifications": "Desktop-Benachrichtigungen",
|
||||
"November": "November",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "oder",
|
||||
"Other": "Andere",
|
||||
"Overview": "Übersicht",
|
||||
"Parameters": "Parameter",
|
||||
"Password": "Passwort",
|
||||
"PDF document (.pdf)": "PDF-Dokument (.pdf)",
|
||||
"PDF Extract Images (OCR)": "Text von Bildern aus PDFs extrahieren (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Prompts",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "\"{{searchValue}}\" von Ollama.com herunterladen",
|
||||
"Pull a model from Ollama.com": "Ein Modell von Ollama.com abrufen",
|
||||
"Pull Progress": "Fortschritt abrufen",
|
||||
"Query Params": "Query Parameter",
|
||||
"RAG Template": "RAG-Vorlage",
|
||||
"Raw Format": "Rohformat",
|
||||
"Read Aloud": "Vorlesen",
|
||||
"Record voice": "Stimme aufnehmen",
|
||||
"Redirecting you to OpenWebUI Community": "Du wirst zur OpenWebUI-Community weitergeleitet",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "Modell entfernen",
|
||||
"Rename": "Umbenennen",
|
||||
"Repeat Last N": "Repeat Last N",
|
||||
"Repeat Penalty": "Repeat Penalty",
|
||||
"Request Mode": "Request-Modus",
|
||||
"Reranking Model": "Reranking Modell",
|
||||
"Reranking model disabled": "Rranking Modell deaktiviert",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Suchen",
|
||||
"Search a model": "Nach einem Modell suchen",
|
||||
"Search Documents": "Dokumente suchen",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Prompts suchen",
|
||||
"See readme.md for instructions": "Anleitung in readme.md anzeigen",
|
||||
"See what's new": "Was gibt's Neues",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Einen Modus auswählen",
|
||||
"Select a model": "Ein Modell auswählen",
|
||||
"Select an Ollama instance": "Eine Ollama Instanz auswählen",
|
||||
"Select model": "Modell auswählen",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "Senden",
|
||||
"Send a Message": "Eine Nachricht senden",
|
||||
"Send message": "Nachricht senden",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Mit OpenWebUI Community teilen",
|
||||
"short-summary": "kurze-zusammenfassung",
|
||||
"Show": "Anzeigen",
|
||||
"Show Additional Params": "Zusätzliche Parameter anzeigen",
|
||||
"Show shortcuts": "Verknüpfungen anzeigen",
|
||||
"Showcased creativity": "Kreativität zur Schau gestellt",
|
||||
"sidebar": "Seitenleiste",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Erfolg",
|
||||
"Successfully updated.": "Erfolgreich aktualisiert.",
|
||||
"Suggested": "Vorgeschlagen",
|
||||
"Sync All": "Alles synchronisieren",
|
||||
"System": "System",
|
||||
"System Prompt": "System-Prompt",
|
||||
"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.",
|
||||
"Yesterday": "Gestern",
|
||||
"You": "Du",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "Du hast keine archivierten Unterhaltungen.",
|
||||
"You have shared this chat": "Du hast diesen Chat",
|
||||
"You're a helpful assistant.": "Du bist ein hilfreicher Assistent.",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Beta)",
|
||||
"(e.g. `sh webui.sh --api`)": "(such e.g. `sh webui.sh --api`)",
|
||||
"(latest)": "(much latest)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} is thinkin'...",
|
||||
"{{user}}'s Chats": "",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} Backend Much Required",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Account",
|
||||
"Accurate information": "",
|
||||
"Add": "",
|
||||
"Add a model": "Add a model",
|
||||
"Add a model tag name": "Add a model tag name",
|
||||
"Add a short description about what this modelfile does": "Add short description about what this modelfile does",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "Add short title for this prompt",
|
||||
"Add a tag": "Add such tag",
|
||||
"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 Users": "All Users",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "API Key",
|
||||
"API Key created.": "",
|
||||
"API keys": "",
|
||||
"API RPM": "API RPM",
|
||||
"April": "",
|
||||
"Archive": "",
|
||||
"Archived Chats": "",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "available! So excite!",
|
||||
"Back": "Back",
|
||||
"Bad Response": "",
|
||||
"Base Model (From)": "",
|
||||
"before": "",
|
||||
"Being lazy": "",
|
||||
"Builder Mode": "Builder Mode",
|
||||
"Bypass SSL verification for Websites": "",
|
||||
"Cancel": "Cancel",
|
||||
"Categories": "Categories",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Change Password",
|
||||
"Chat": "Chat",
|
||||
"Chat Bubble UI": "",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "",
|
||||
"Click here for help.": "Click for help. Much assist.",
|
||||
"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 a csv file.": "",
|
||||
"Click here to select documents.": "Click to select documents",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "",
|
||||
"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 modelfile": "Create modelfile",
|
||||
"Create a model": "",
|
||||
"Create Account": "Create Account",
|
||||
"Create new 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 Ollama models for purpose",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "Dark",
|
||||
"Dashboard": "",
|
||||
"Database": "Database",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "delete",
|
||||
"Delete": "",
|
||||
"Delete a model": "Delete a model",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Delete chat",
|
||||
"Delete Chat": "",
|
||||
"Delete Chats": "Delete Chats",
|
||||
"delete this link": "",
|
||||
"Delete User": "",
|
||||
"Deleted {{deleteModelTag}}": "Deleted {{deleteModelTag}}",
|
||||
"Deleted {{tagName}}": "",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Description",
|
||||
"Didn't fully follow instructions": "",
|
||||
"Disabled": "Disabled",
|
||||
"Discover a modelfile": "Discover 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 Size of Chunk",
|
||||
"Enter Image Size (e.g. 512x512)": "Enter Size of Wow (e.g. 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "Enter Number of Steps (e.g. 50)",
|
||||
"Enter Score": "",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "Export All Chats (All Doggos)",
|
||||
"Export Chats": "Export Barks",
|
||||
"Export Documents Mapping": "Export Mappings of Dogos",
|
||||
"Export Modelfiles": "Export Modelfiles",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Export Promptos",
|
||||
"Failed to create API Key.": "",
|
||||
"Failed to read clipboard contents": "Failed to read clipboard borks",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "Focus chat bork",
|
||||
"Followed instructions perfectly": "",
|
||||
"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",
|
||||
"General": "Woweral",
|
||||
"General Settings": "General Doge Settings",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Much helo, {{name}}",
|
||||
"Help": "",
|
||||
"Hide": "Hide",
|
||||
"Hide Additional Params": "Hide Extra Barkos",
|
||||
"How can I help you today?": "How can I halp u today?",
|
||||
"Hybrid Search": "",
|
||||
"Image Generation (Experimental)": "Image Wow (Much Experiment)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Wowmages",
|
||||
"Import Chats": "Import Barks",
|
||||
"Import Documents Mapping": "Import Doge Mapping",
|
||||
"Import Modelfiles": "Import Modelfiles",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "Import Promptos",
|
||||
"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": "",
|
||||
"join our Discord for help.": "join our Discord for help.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "",
|
||||
"June": "",
|
||||
"JWT Expiration": "JWT Expire",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"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 LiteLLM Models",
|
||||
"Manage Models": "Manage Wowdels",
|
||||
"Manage Ollama Models": "Manage Ollama Wowdels",
|
||||
"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.",
|
||||
"May": "",
|
||||
"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}} 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 Name": "Wowdel Name",
|
||||
"Model ID": "",
|
||||
"Model not selected": "Model not selected",
|
||||
"Model Tag Name": "Wowdel Tag Name",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "Wowdel Whitelisting",
|
||||
"Model(s) Whitelisted": "Wowdel(s) Whitelisted",
|
||||
"Modelfile": "Modelfile",
|
||||
"Modelfile Advanced Settings": "Modelfile Wow Settings",
|
||||
"Modelfile Content": "Modelfile Content",
|
||||
"Modelfiles": "Modelfiles",
|
||||
"Models": "Wowdels",
|
||||
"More": "",
|
||||
"Name": "Name",
|
||||
"Name Tag": "Name Tag",
|
||||
"Name your modelfile": "Name your modelfile",
|
||||
"Name your model": "",
|
||||
"New Chat": "New Bark",
|
||||
"New Password": "New Barkword",
|
||||
"No results found": "",
|
||||
"No source available": "No source available",
|
||||
"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.": "",
|
||||
"Notifications": "Notifications",
|
||||
"November": "",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "or",
|
||||
"Other": "",
|
||||
"Overview": "",
|
||||
"Parameters": "Parametos",
|
||||
"Password": "Barkword",
|
||||
"PDF document (.pdf)": "",
|
||||
"PDF Extract Images (OCR)": "PDF Extract Wowmages (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Promptos",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "",
|
||||
"Pull a model from Ollama.com": "Pull a wowdel from Ollama.com",
|
||||
"Pull Progress": "Pull Progress",
|
||||
"Query Params": "Query Bark",
|
||||
"RAG Template": "RAG Template",
|
||||
"Raw Format": "Raw Wowmat",
|
||||
"Read Aloud": "",
|
||||
"Record voice": "Record Bark",
|
||||
"Redirecting you to OpenWebUI Community": "Redirecting you to OpenWebUI Community",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "",
|
||||
"Rename": "",
|
||||
"Repeat Last N": "Repeat Last N",
|
||||
"Repeat Penalty": "Repeat Penalty",
|
||||
"Request Mode": "Request Bark",
|
||||
"Reranking Model": "",
|
||||
"Reranking model disabled": "",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Search very search",
|
||||
"Search a model": "",
|
||||
"Search Documents": "Search Documents much find",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Search Prompts much wow",
|
||||
"See readme.md for instructions": "See readme.md for instructions wow",
|
||||
"See what's new": "See what's new so amaze",
|
||||
"Seed": "Seed very plant",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Select a mode very choose",
|
||||
"Select a model": "Select a model much choice",
|
||||
"Select an Ollama instance": "Select an Ollama instance very choose",
|
||||
"Select model": "Select model much choice",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "",
|
||||
"Send a Message": "Send a Message much message",
|
||||
"Send message": "Send message very send",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Share to OpenWebUI Community much community",
|
||||
"short-summary": "short-summary so short",
|
||||
"Show": "Show much show",
|
||||
"Show Additional Params": "Show Additional Params very many params",
|
||||
"Show shortcuts": "Show shortcuts much shortcut",
|
||||
"Showcased creativity": "",
|
||||
"sidebar": "sidebar much side",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Success very success",
|
||||
"Successfully updated.": "Successfully updated. Very updated.",
|
||||
"Suggested": "",
|
||||
"Sync All": "Sync All much sync",
|
||||
"System": "System very system",
|
||||
"System Prompt": "System Prompt much prompt",
|
||||
"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.",
|
||||
"Yesterday": "",
|
||||
"You": "",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "",
|
||||
"You have shared this chat": "",
|
||||
"You're a helpful assistant.": "You're a helpful assistant. Much helpful.",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "",
|
||||
"(e.g. `sh webui.sh --api`)": "",
|
||||
"(latest)": "",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "",
|
||||
"{{user}}'s Chats": "",
|
||||
"{{webUIName}} Backend Required": "",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "",
|
||||
"Accurate information": "",
|
||||
"Add": "",
|
||||
"Add a model": "",
|
||||
"Add a model tag name": "",
|
||||
"Add a short description about what this modelfile does": "",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "",
|
||||
"Add a tag": "",
|
||||
"Add custom prompt": "",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "",
|
||||
"Admin Settings": "",
|
||||
"Advanced Parameters": "",
|
||||
"Advanced Params": "",
|
||||
"all": "",
|
||||
"All Documents": "",
|
||||
"All Users": "",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "",
|
||||
"API Key created.": "",
|
||||
"API keys": "",
|
||||
"API RPM": "",
|
||||
"April": "",
|
||||
"Archive": "",
|
||||
"Archived Chats": "",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "",
|
||||
"Back": "",
|
||||
"Bad Response": "",
|
||||
"Base Model (From)": "",
|
||||
"before": "",
|
||||
"Being lazy": "",
|
||||
"Builder Mode": "",
|
||||
"Bypass SSL verification for Websites": "",
|
||||
"Cancel": "",
|
||||
"Categories": "",
|
||||
"Capabilities": "",
|
||||
"Change Password": "",
|
||||
"Chat": "",
|
||||
"Chat Bubble UI": "",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "",
|
||||
"Click here for help.": "",
|
||||
"Click here to": "",
|
||||
"Click here to check other modelfiles.": "",
|
||||
"Click here to select": "",
|
||||
"Click here to select a csv file.": "",
|
||||
"Click here to select documents.": "",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "",
|
||||
"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 modelfile": "",
|
||||
"Create a model": "",
|
||||
"Create Account": "",
|
||||
"Create new key": "",
|
||||
"Create new secret key": "",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "",
|
||||
"Current Password": "",
|
||||
"Custom": "",
|
||||
"Customize Ollama models for a specific purpose": "",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "",
|
||||
"Dashboard": "",
|
||||
"Database": "",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "",
|
||||
"Delete": "",
|
||||
"Delete a model": "",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "",
|
||||
"Delete Chat": "",
|
||||
"Delete Chats": "",
|
||||
"delete this link": "",
|
||||
"Delete User": "",
|
||||
"Deleted {{deleteModelTag}}": "",
|
||||
"Deleted {{tagName}}": "",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "",
|
||||
"Didn't fully follow instructions": "",
|
||||
"Disabled": "",
|
||||
"Discover a modelfile": "",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "",
|
||||
"Discover, download, and explore custom prompts": "",
|
||||
"Discover, download, and explore model presets": "",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "",
|
||||
"Enter Image Size (e.g. 512x512)": "",
|
||||
"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 Number of Steps (e.g. 50)": "",
|
||||
"Enter Score": "",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "",
|
||||
"Export Chats": "",
|
||||
"Export Documents Mapping": "",
|
||||
"Export Modelfiles": "",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "",
|
||||
"Failed to create API Key.": "",
|
||||
"Failed to read clipboard contents": "",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "",
|
||||
"Followed instructions perfectly": "",
|
||||
"Format your variables using square brackets like this:": "",
|
||||
"From (Base Model)": "",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "",
|
||||
"General": "",
|
||||
"General Settings": "",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "",
|
||||
"Help": "",
|
||||
"Hide": "",
|
||||
"Hide Additional Params": "",
|
||||
"How can I help you today?": "",
|
||||
"Hybrid Search": "",
|
||||
"Image Generation (Experimental)": "",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "",
|
||||
"Import Chats": "",
|
||||
"Import Documents Mapping": "",
|
||||
"Import Modelfiles": "",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "",
|
||||
"Input commands": "",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "",
|
||||
"join our Discord for help.": "",
|
||||
"JSON": "",
|
||||
"JSON Preview": "",
|
||||
"July": "",
|
||||
"June": "",
|
||||
"JWT Expiration": "",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "",
|
||||
"Made by OpenWebUI Community": "",
|
||||
"Make sure to enclose them with": "",
|
||||
"Manage LiteLLM Models": "",
|
||||
"Manage Models": "",
|
||||
"Manage Ollama Models": "",
|
||||
"March": "",
|
||||
"Max Tokens": "",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "",
|
||||
"May": "",
|
||||
"Memories accessible by LLMs will be shown here.": "",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "",
|
||||
"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 Name": "",
|
||||
"Model ID": "",
|
||||
"Model not selected": "",
|
||||
"Model Tag Name": "",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "",
|
||||
"Model(s) Whitelisted": "",
|
||||
"Modelfile": "",
|
||||
"Modelfile Advanced Settings": "",
|
||||
"Modelfile Content": "",
|
||||
"Modelfiles": "",
|
||||
"Models": "",
|
||||
"More": "",
|
||||
"Name": "",
|
||||
"Name Tag": "",
|
||||
"Name your modelfile": "",
|
||||
"Name your model": "",
|
||||
"New Chat": "",
|
||||
"New Password": "",
|
||||
"No results found": "",
|
||||
"No source available": "",
|
||||
"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.": "",
|
||||
"Notifications": "",
|
||||
"November": "",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "",
|
||||
"Other": "",
|
||||
"Overview": "",
|
||||
"Parameters": "",
|
||||
"Password": "",
|
||||
"PDF document (.pdf)": "",
|
||||
"PDF Extract Images (OCR)": "",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "",
|
||||
"Pull a model from Ollama.com": "",
|
||||
"Pull Progress": "",
|
||||
"Query Params": "",
|
||||
"RAG Template": "",
|
||||
"Raw Format": "",
|
||||
"Read Aloud": "",
|
||||
"Record voice": "",
|
||||
"Redirecting you to OpenWebUI Community": "",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "",
|
||||
"Rename": "",
|
||||
"Repeat Last N": "",
|
||||
"Repeat Penalty": "",
|
||||
"Request Mode": "",
|
||||
"Reranking Model": "",
|
||||
"Reranking model disabled": "",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "",
|
||||
"Search a model": "",
|
||||
"Search Documents": "",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "",
|
||||
"See readme.md for instructions": "",
|
||||
"See what's new": "",
|
||||
"Seed": "",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "",
|
||||
"Select a model": "",
|
||||
"Select an Ollama instance": "",
|
||||
"Select model": "",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "",
|
||||
"Send a Message": "",
|
||||
"Send message": "",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "",
|
||||
"short-summary": "",
|
||||
"Show": "",
|
||||
"Show Additional Params": "",
|
||||
"Show shortcuts": "",
|
||||
"Showcased creativity": "",
|
||||
"sidebar": "",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "",
|
||||
"Successfully updated.": "",
|
||||
"Suggested": "",
|
||||
"Sync All": "",
|
||||
"System": "",
|
||||
"System Prompt": "",
|
||||
"Tags": "",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"Write a summary in 50 words that summarizes [topic or keyword].": "",
|
||||
"Yesterday": "",
|
||||
"You": "",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "",
|
||||
"You have shared this chat": "",
|
||||
"You're a helpful assistant.": "",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "",
|
||||
"(e.g. `sh webui.sh --api`)": "",
|
||||
"(latest)": "",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "",
|
||||
"{{user}}'s Chats": "",
|
||||
"{{webUIName}} Backend Required": "",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "",
|
||||
"Accurate information": "",
|
||||
"Add": "",
|
||||
"Add a model": "",
|
||||
"Add a model tag name": "",
|
||||
"Add a short description about what this modelfile does": "",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "",
|
||||
"Add a tag": "",
|
||||
"Add custom prompt": "",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "",
|
||||
"Admin Settings": "",
|
||||
"Advanced Parameters": "",
|
||||
"Advanced Params": "",
|
||||
"all": "",
|
||||
"All Documents": "",
|
||||
"All Users": "",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "",
|
||||
"API Key created.": "",
|
||||
"API keys": "",
|
||||
"API RPM": "",
|
||||
"April": "",
|
||||
"Archive": "",
|
||||
"Archived Chats": "",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "",
|
||||
"Back": "",
|
||||
"Bad Response": "",
|
||||
"Base Model (From)": "",
|
||||
"before": "",
|
||||
"Being lazy": "",
|
||||
"Builder Mode": "",
|
||||
"Bypass SSL verification for Websites": "",
|
||||
"Cancel": "",
|
||||
"Categories": "",
|
||||
"Capabilities": "",
|
||||
"Change Password": "",
|
||||
"Chat": "",
|
||||
"Chat Bubble UI": "",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "",
|
||||
"Click here for help.": "",
|
||||
"Click here to": "",
|
||||
"Click here to check other modelfiles.": "",
|
||||
"Click here to select": "",
|
||||
"Click here to select a csv file.": "",
|
||||
"Click here to select documents.": "",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "",
|
||||
"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 modelfile": "",
|
||||
"Create a model": "",
|
||||
"Create Account": "",
|
||||
"Create new key": "",
|
||||
"Create new secret key": "",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "",
|
||||
"Current Password": "",
|
||||
"Custom": "",
|
||||
"Customize Ollama models for a specific purpose": "",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "",
|
||||
"Dashboard": "",
|
||||
"Database": "",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "",
|
||||
"Delete": "",
|
||||
"Delete a model": "",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "",
|
||||
"Delete Chat": "",
|
||||
"Delete Chats": "",
|
||||
"delete this link": "",
|
||||
"Delete User": "",
|
||||
"Deleted {{deleteModelTag}}": "",
|
||||
"Deleted {{tagName}}": "",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "",
|
||||
"Didn't fully follow instructions": "",
|
||||
"Disabled": "",
|
||||
"Discover a modelfile": "",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "",
|
||||
"Discover, download, and explore custom prompts": "",
|
||||
"Discover, download, and explore model presets": "",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "",
|
||||
"Enter Image Size (e.g. 512x512)": "",
|
||||
"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 Number of Steps (e.g. 50)": "",
|
||||
"Enter Score": "",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "",
|
||||
"Export Chats": "",
|
||||
"Export Documents Mapping": "",
|
||||
"Export Modelfiles": "",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "",
|
||||
"Failed to create API Key.": "",
|
||||
"Failed to read clipboard contents": "",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "",
|
||||
"Followed instructions perfectly": "",
|
||||
"Format your variables using square brackets like this:": "",
|
||||
"From (Base Model)": "",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "",
|
||||
"General": "",
|
||||
"General Settings": "",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "",
|
||||
"Help": "",
|
||||
"Hide": "",
|
||||
"Hide Additional Params": "",
|
||||
"How can I help you today?": "",
|
||||
"Hybrid Search": "",
|
||||
"Image Generation (Experimental)": "",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "",
|
||||
"Import Chats": "",
|
||||
"Import Documents Mapping": "",
|
||||
"Import Modelfiles": "",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "",
|
||||
"Input commands": "",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "",
|
||||
"join our Discord for help.": "",
|
||||
"JSON": "",
|
||||
"JSON Preview": "",
|
||||
"July": "",
|
||||
"June": "",
|
||||
"JWT Expiration": "",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "",
|
||||
"Made by OpenWebUI Community": "",
|
||||
"Make sure to enclose them with": "",
|
||||
"Manage LiteLLM Models": "",
|
||||
"Manage Models": "",
|
||||
"Manage Ollama Models": "",
|
||||
"March": "",
|
||||
"Max Tokens": "",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "",
|
||||
"May": "",
|
||||
"Memories accessible by LLMs will be shown here.": "",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "",
|
||||
"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 Name": "",
|
||||
"Model ID": "",
|
||||
"Model not selected": "",
|
||||
"Model Tag Name": "",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "",
|
||||
"Model(s) Whitelisted": "",
|
||||
"Modelfile": "",
|
||||
"Modelfile Advanced Settings": "",
|
||||
"Modelfile Content": "",
|
||||
"Modelfiles": "",
|
||||
"Models": "",
|
||||
"More": "",
|
||||
"Name": "",
|
||||
"Name Tag": "",
|
||||
"Name your modelfile": "",
|
||||
"Name your model": "",
|
||||
"New Chat": "",
|
||||
"New Password": "",
|
||||
"No results found": "",
|
||||
"No source available": "",
|
||||
"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.": "",
|
||||
"Notifications": "",
|
||||
"November": "",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "",
|
||||
"Other": "",
|
||||
"Overview": "",
|
||||
"Parameters": "",
|
||||
"Password": "",
|
||||
"PDF document (.pdf)": "",
|
||||
"PDF Extract Images (OCR)": "",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "",
|
||||
"Pull a model from Ollama.com": "",
|
||||
"Pull Progress": "",
|
||||
"Query Params": "",
|
||||
"RAG Template": "",
|
||||
"Raw Format": "",
|
||||
"Read Aloud": "",
|
||||
"Record voice": "",
|
||||
"Redirecting you to OpenWebUI Community": "",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "",
|
||||
"Rename": "",
|
||||
"Repeat Last N": "",
|
||||
"Repeat Penalty": "",
|
||||
"Request Mode": "",
|
||||
"Reranking Model": "",
|
||||
"Reranking model disabled": "",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "",
|
||||
"Search a model": "",
|
||||
"Search Documents": "",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "",
|
||||
"See readme.md for instructions": "",
|
||||
"See what's new": "",
|
||||
"Seed": "",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "",
|
||||
"Select a model": "",
|
||||
"Select an Ollama instance": "",
|
||||
"Select model": "",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "",
|
||||
"Send a Message": "",
|
||||
"Send message": "",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "",
|
||||
"short-summary": "",
|
||||
"Show": "",
|
||||
"Show Additional Params": "",
|
||||
"Show shortcuts": "",
|
||||
"Showcased creativity": "",
|
||||
"sidebar": "",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "",
|
||||
"Successfully updated.": "",
|
||||
"Suggested": "",
|
||||
"Sync All": "",
|
||||
"System": "",
|
||||
"System Prompt": "",
|
||||
"Tags": "",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"Write a summary in 50 words that summarizes [topic or keyword].": "",
|
||||
"Yesterday": "",
|
||||
"You": "",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "",
|
||||
"You have shared this chat": "",
|
||||
"You're a helpful assistant.": "",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Beta)",
|
||||
"(e.g. `sh webui.sh --api`)": "(p.ej. `sh webui.sh --api`)",
|
||||
"(latest)": "(latest)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} está pensando...",
|
||||
"{{user}}'s Chats": "{{user}}'s Chats",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} Servidor Requerido",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Cuenta",
|
||||
"Accurate information": "Información precisa",
|
||||
"Add": "Agregar",
|
||||
"Add a model": "Agregar un modelo",
|
||||
"Add a model tag name": "Agregar un nombre de etiqueta de modelo",
|
||||
"Add a short description about what this modelfile does": "Agregue una descripción corta de lo que este modelfile hace",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "Agregue un título corto para este Prompt",
|
||||
"Add a tag": "Agregar una etiqueta",
|
||||
"Add custom prompt": "Agregar un prompt personalizado",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "Panel de Administración",
|
||||
"Admin Settings": "Configuración de Administrador",
|
||||
"Advanced Parameters": "Parámetros Avanzados",
|
||||
"Advanced Params": "",
|
||||
"all": "todo",
|
||||
"All Documents": "Todos los Documentos",
|
||||
"All Users": "Todos los Usuarios",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "Clave de la API ",
|
||||
"API Key created.": "Clave de la API creada.",
|
||||
"API keys": "Claves de la API",
|
||||
"API RPM": "RPM de la API",
|
||||
"April": "Abril",
|
||||
"Archive": "Archivar",
|
||||
"Archived Chats": "Chats archivados",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "¡disponible!",
|
||||
"Back": "Volver",
|
||||
"Bad Response": "Respuesta incorrecta",
|
||||
"Base Model (From)": "",
|
||||
"before": "antes",
|
||||
"Being lazy": "Ser perezoso",
|
||||
"Builder Mode": "Modo de Constructor",
|
||||
"Bypass SSL verification for Websites": "Desactivar la verificación SSL para sitios web",
|
||||
"Cancel": "Cancelar",
|
||||
"Categories": "Categorías",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Cambia la Contraseña",
|
||||
"Chat": "Chat",
|
||||
"Chat Bubble UI": "Burbuja de chat UI",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "Cita",
|
||||
"Click here for help.": "Presiona aquí para obtener ayuda.",
|
||||
"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 a csv file.": "Presiona aquí para seleccionar un archivo csv.",
|
||||
"Click here to select documents.": "Presiona aquí para seleccionar documentos",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "Copiar enlace",
|
||||
"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 modelfile": "Crea un modelfile",
|
||||
"Create a model": "",
|
||||
"Create Account": "Crear una cuenta",
|
||||
"Create new key": "Crear una nueva clave",
|
||||
"Create new secret key": "Crear una nueva clave secreta",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "Modelo Actual",
|
||||
"Current Password": "Contraseña Actual",
|
||||
"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",
|
||||
"Dashboard": "Tablero",
|
||||
"Database": "Base de datos",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "borrar",
|
||||
"Delete": "Borrar",
|
||||
"Delete a model": "Borra un modelo",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Borrar chat",
|
||||
"Delete Chat": "Borrar Chat",
|
||||
"Delete Chats": "Borrar Chats",
|
||||
"delete this link": "Borrar este enlace",
|
||||
"Delete User": "Borrar Usuario",
|
||||
"Deleted {{deleteModelTag}}": "Se borró {{deleteModelTag}}",
|
||||
"Deleted {{tagName}}": "Se borró {{tagName}}",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Descripción",
|
||||
"Didn't fully follow instructions": "No siguió las instrucciones",
|
||||
"Disabled": "Desactivado",
|
||||
"Discover a modelfile": "Descubre un modelfile",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "Descubre un Prompt",
|
||||
"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",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"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 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 Number of Steps (e.g. 50)": "Ingrese el número de pasos (p.ej., 50)",
|
||||
"Enter Score": "Ingrese la puntuación",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "Exportar todos los chats (Todos los usuarios)",
|
||||
"Export Chats": "Exportar Chats",
|
||||
"Export Documents Mapping": "Exportar el mapeo de documentos",
|
||||
"Export Modelfiles": "Exportar Modelfiles",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Exportar Prompts",
|
||||
"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",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "Enfoca la entrada del chat",
|
||||
"Followed instructions perfectly": "Siguió las instrucciones perfectamente",
|
||||
"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",
|
||||
"General": "General",
|
||||
"General Settings": "Opciones Generales",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Hola, {{name}}",
|
||||
"Help": "Ayuda",
|
||||
"Hide": "Esconder",
|
||||
"Hide Additional Params": "Esconde los Parámetros Adicionales",
|
||||
"How can I help you today?": "¿Cómo puedo ayudarte hoy?",
|
||||
"Hybrid Search": "Búsqueda Híbrida",
|
||||
"Image Generation (Experimental)": "Generación de imágenes (experimental)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Imágenes",
|
||||
"Import Chats": "Importar chats",
|
||||
"Import Documents Mapping": "Importar Mapeo de Documentos",
|
||||
"Import Modelfiles": "Importar Modelfiles",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "Importar Prompts",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "Incluir el indicador `--api` al ejecutar stable-diffusion-webui",
|
||||
"Input commands": "Ingresar comandos",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "Enero",
|
||||
"join our Discord for help.": "Únase a nuestro Discord para obtener ayuda.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "Julio",
|
||||
"June": "Junio",
|
||||
"JWT Expiration": "Expiración del JWT",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "Hecho por la comunidad de OpenWebUI",
|
||||
"Make sure to enclose them with": "Asegúrese de adjuntarlos con",
|
||||
"Manage LiteLLM Models": "Administrar Modelos LiteLLM",
|
||||
"Manage Models": "Administrar Modelos",
|
||||
"Manage Ollama Models": "Administrar Modelos Ollama",
|
||||
"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.",
|
||||
"May": "Mayo",
|
||||
"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 '{{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 {{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 Name": "Nombre del modelo",
|
||||
"Model ID": "",
|
||||
"Model not selected": "Modelo no seleccionado",
|
||||
"Model Tag Name": "Nombre de la etiqueta del modelo",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "Listado de Modelos habilitados",
|
||||
"Model(s) Whitelisted": "Modelo(s) habilitados",
|
||||
"Modelfile": "Modelfile",
|
||||
"Modelfile Advanced Settings": "Opciones avanzadas del Modelfile",
|
||||
"Modelfile Content": "Contenido del Modelfile",
|
||||
"Modelfiles": "Modelfiles",
|
||||
"Models": "Modelos",
|
||||
"More": "Más",
|
||||
"Name": "Nombre",
|
||||
"Name Tag": "Nombre de etiqueta",
|
||||
"Name your modelfile": "Nombra tu modelfile",
|
||||
"Name your model": "",
|
||||
"New Chat": "Nuevo Chat",
|
||||
"New Password": "Nueva Contraseña",
|
||||
"No results found": "No se han encontrado resultados",
|
||||
"No source available": "No hay fuente disponible",
|
||||
"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.",
|
||||
"Notifications": "Notificaciones",
|
||||
"November": "Noviembre",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "o",
|
||||
"Other": "Otro",
|
||||
"Overview": "Resumen",
|
||||
"Parameters": "Parámetros",
|
||||
"Password": "Contraseña",
|
||||
"PDF document (.pdf)": "PDF document (.pdf)",
|
||||
"PDF Extract Images (OCR)": "Extraer imágenes de PDF (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Prompts",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Extraer \"{{searchValue}}\" 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",
|
||||
"RAG Template": "Plantilla de RAG",
|
||||
"Raw Format": "Formato sin procesar",
|
||||
"Read Aloud": "Leer al oído",
|
||||
"Record voice": "Grabar voz",
|
||||
"Redirecting you to OpenWebUI Community": "Redireccionándote a la comunidad OpenWebUI",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "Eliminar modelo",
|
||||
"Rename": "Renombrar",
|
||||
"Repeat Last N": "Repetir las últimas N",
|
||||
"Repeat Penalty": "Penalidad de repetición",
|
||||
"Request Mode": "Modo de petición",
|
||||
"Reranking Model": "Modelo de reranking",
|
||||
"Reranking model disabled": "Modelo de reranking deshabilitado",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Buscar",
|
||||
"Search a model": "Buscar un modelo",
|
||||
"Search Documents": "Buscar Documentos",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Buscar Prompts",
|
||||
"See readme.md for instructions": "Vea el readme.md para instrucciones",
|
||||
"See what's new": "Ver las novedades",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Selecciona un modo",
|
||||
"Select a model": "Selecciona un modelo",
|
||||
"Select an Ollama instance": "Seleccione una instancia de Ollama",
|
||||
"Select model": "Selecciona un modelo",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "Enviar",
|
||||
"Send a Message": "Enviar un Mensaje",
|
||||
"Send message": "Enviar Mensaje",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Compartir con la comunidad OpenWebUI",
|
||||
"short-summary": "resumen-corto",
|
||||
"Show": "Mostrar",
|
||||
"Show Additional Params": "Mostrar parámetros adicionales",
|
||||
"Show shortcuts": "Mostrar atajos",
|
||||
"Showcased creativity": "Mostrar creatividad",
|
||||
"sidebar": "barra lateral",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Éxito",
|
||||
"Successfully updated.": "Actualizado exitosamente.",
|
||||
"Suggested": "Sugerido",
|
||||
"Sync All": "Sincronizar todo",
|
||||
"System": "Sistema",
|
||||
"System Prompt": "Prompt del sistema",
|
||||
"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].",
|
||||
"Yesterday": "Ayer",
|
||||
"You": "Usted",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "No tiene conversaciones archivadas.",
|
||||
"You have shared this chat": "Usted ha compartido esta conversación",
|
||||
"You're a helpful assistant.": "Usted es un asistente útil.",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(بتا)",
|
||||
"(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)",
|
||||
"(latest)": "(آخرین)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} در حال فکر کردن است...",
|
||||
"{{user}}'s Chats": "{{user}} چت ها",
|
||||
"{{webUIName}} Backend Required": "بکند {{webUIName}} نیاز است.",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "حساب کاربری",
|
||||
"Accurate information": "اطلاعات دقیق",
|
||||
"Add": "اضافه کردن",
|
||||
"Add a model": "اضافه کردن یک مدل",
|
||||
"Add a model tag name": "اضافه کردن یک نام تگ برای مدل",
|
||||
"Add a short description about what this modelfile does": "توضیح کوتاهی در مورد کاری که این فایل\u200cمدل انجام می دهد اضافه کنید",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "یک عنوان کوتاه برای این درخواست اضافه کنید",
|
||||
"Add a tag": "اضافه کردن یک تگ",
|
||||
"Add custom prompt": "اضافه کردن یک درخواست سفارشی",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "پنل مدیریت",
|
||||
"Admin Settings": "تنظیمات مدیریت",
|
||||
"Advanced Parameters": "پارامترهای پیشرفته",
|
||||
"Advanced Params": "",
|
||||
"all": "همه",
|
||||
"All Documents": "تمام سند ها",
|
||||
"All Users": "همه کاربران",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "API Key",
|
||||
"API Key created.": "API Key created.",
|
||||
"API keys": "API keys",
|
||||
"API RPM": "API RPM",
|
||||
"April": "ژوئن",
|
||||
"Archive": "آرشیو",
|
||||
"Archived Chats": "آرشیو تاریخچه چت",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "در دسترس!",
|
||||
"Back": "بازگشت",
|
||||
"Bad Response": "پاسخ خوب نیست",
|
||||
"Base Model (From)": "",
|
||||
"before": "قبل",
|
||||
"Being lazy": "حالت سازنده",
|
||||
"Builder Mode": "حالت سازنده",
|
||||
"Bypass SSL verification for Websites": "عبور از تأیید SSL برای وب سایت ها",
|
||||
"Cancel": "لغو",
|
||||
"Categories": "دسته\u200cبندی\u200cها",
|
||||
"Capabilities": "",
|
||||
"Change Password": "تغییر رمز عبور",
|
||||
"Chat": "گپ",
|
||||
"Chat Bubble UI": "UI\u200cی\u200c گفتگو\u200c",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "استناد",
|
||||
"Click here for help.": "برای کمک اینجا را کلیک کنید.",
|
||||
"Click here to": "برای کمک اینجا را کلیک کنید.",
|
||||
"Click here to check other modelfiles.": "برای بررسی سایر فایل\u200cهای مدل اینجا را کلیک کنید.",
|
||||
"Click here to select": "برای انتخاب اینجا کلیک کنید",
|
||||
"Click here to select a csv file.": "برای انتخاب یک فایل csv اینجا را کلیک کنید.",
|
||||
"Click here to select documents.": "برای انتخاب اسناد اینجا را کلیک کنید.",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "کپی لینک",
|
||||
"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 modelfile": "ایجاد یک فایل مدل",
|
||||
"Create a model": "",
|
||||
"Create Account": "ساخت حساب کاربری",
|
||||
"Create new key": "ساخت کلید جدید",
|
||||
"Create new secret key": "ساخت کلید gehez جدید",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "مدل فعلی",
|
||||
"Current Password": "رمز عبور فعلی",
|
||||
"Custom": "دلخواه",
|
||||
"Customize Ollama models for a specific purpose": "مدل های اولاما را برای یک هدف خاص سفارشی کنید",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "تیره",
|
||||
"Dashboard": "داشبورد",
|
||||
"Database": "پایگاه داده",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "حذف",
|
||||
"Delete": "حذف",
|
||||
"Delete a model": "حذف یک مدل",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "حذف گپ",
|
||||
"Delete Chat": "حذف گپ",
|
||||
"Delete Chats": "حذف گپ\u200cها",
|
||||
"delete this link": "حذف این لینک",
|
||||
"Delete User": "حذف کاربر",
|
||||
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} پاک شد",
|
||||
"Deleted {{tagName}}": "{{tagName}} پاک شد",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "توضیحات",
|
||||
"Didn't fully follow instructions": "نمی تواند دستورالعمل را کامل پیگیری کند",
|
||||
"Disabled": "غیرفعال",
|
||||
"Discover a modelfile": "فایل مدل را کشف کنید",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "یک اعلان را کشف کنید",
|
||||
"Discover, download, and explore custom prompts": "پرامپت\u200cهای سفارشی را کشف، دانلود و کاوش کنید",
|
||||
"Discover, download, and explore model presets": "پیش تنظیمات مدل را کشف، دانلود و کاوش کنید",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "مقدار Chunk Size را وارد کنید",
|
||||
"Enter Image Size (e.g. 512x512)": "اندازه تصویر را وارد کنید (مثال: 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "تعداد گام ها را وارد کنید (مثال: 50)",
|
||||
"Enter Score": "امتیاز را وارد کنید",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "اکسپورت از همه گپ\u200cها(همه کاربران)",
|
||||
"Export Chats": "اکسپورت از گپ\u200cها",
|
||||
"Export Documents Mapping": "اکسپورت از نگاشت اسناد",
|
||||
"Export Modelfiles": "اکسپورت از فایل\u200cهای مدل",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "اکسپورت از پرامپت\u200cها",
|
||||
"Failed to create API Key.": "ایجاد کلید API با خطا مواجه شد.",
|
||||
"Failed to read clipboard contents": "خواندن محتوای کلیپ بورد ناموفق بود",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "فوکوس کردن ورودی گپ",
|
||||
"Followed instructions perfectly": "دستورالعمل ها را کاملا دنبال کرد",
|
||||
"Format your variables using square brackets like this:": "متغیرهای خود را با استفاده از براکت مربع به شکل زیر قالب بندی کنید:",
|
||||
"From (Base Model)": "از (مدل پایه)",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "حالت تمام صفحه",
|
||||
"General": "عمومی",
|
||||
"General Settings": "تنظیمات عمومی",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "سلام، {{name}}",
|
||||
"Help": "کمک",
|
||||
"Hide": "پنهان",
|
||||
"Hide Additional Params": "پنهان کردن پارامترهای اضافه",
|
||||
"How can I help you today?": "امروز چطور می توانم کمک تان کنم؟",
|
||||
"Hybrid Search": "جستجوی همزمان",
|
||||
"Image Generation (Experimental)": "تولید تصویر (آزمایشی)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "تصاویر",
|
||||
"Import Chats": "ایمپورت گپ\u200cها",
|
||||
"Import Documents Mapping": "ایمپورت نگاشت اسناد",
|
||||
"Import Modelfiles": "ایمپورت فایل\u200cهای مدل",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "ایمپورت پرامپت\u200cها",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "فلگ `--api` را هنکام اجرای stable-diffusion-webui استفاده کنید.",
|
||||
"Input commands": "ورودی دستورات",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "ژانویه",
|
||||
"join our Discord for help.": "برای کمک به دیسکورد ما بپیوندید.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "ژوئن",
|
||||
"June": "جولای",
|
||||
"JWT Expiration": "JWT انقضای",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "ساخته شده توسط OpenWebUI Community",
|
||||
"Make sure to enclose them with": "مطمئن شوید که آنها را با این محصور کنید:",
|
||||
"Manage LiteLLM Models": "Manage LiteLLM Models",
|
||||
"Manage Models": "مدیریت مدل\u200cها",
|
||||
"Manage Ollama Models": "مدیریت مدل\u200cهای اولاما",
|
||||
"March": "مارچ",
|
||||
"Max Tokens": "حداکثر توکن",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "حداکثر 3 مدل را می توان به طور همزمان دانلود کرد. لطفاً بعداً دوباره امتحان کنید.",
|
||||
"May": "ماهی",
|
||||
"Memories accessible by LLMs will be shown here.": "حافظه های دسترسی به LLMs در اینجا نمایش داده می شوند.",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "مدل '{{modelName}}' با موفقیت دانلود شد.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "مدل '{{modelTag}}' در حال حاضر در صف برای دانلود است.",
|
||||
"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 Name": "نام مدل",
|
||||
"Model ID": "",
|
||||
"Model not selected": "مدل انتخاب نشده",
|
||||
"Model Tag Name": "نام تگ مدل",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "لیست سفید مدل",
|
||||
"Model(s) Whitelisted": "مدل در لیست سفید ثبت شد",
|
||||
"Modelfile": "فایل مدل",
|
||||
"Modelfile Advanced Settings": "تنظیمات پیشرفته فایل\u200cمدل",
|
||||
"Modelfile Content": "محتویات فایل مدل",
|
||||
"Modelfiles": "فایل\u200cهای مدل",
|
||||
"Models": "مدل\u200cها",
|
||||
"More": "بیشتر",
|
||||
"Name": "نام",
|
||||
"Name Tag": "نام تگ",
|
||||
"Name your modelfile": "فایل مدل را نام\u200cگذاری کنید",
|
||||
"Name your model": "",
|
||||
"New Chat": "گپ جدید",
|
||||
"New Password": "رمز عبور جدید",
|
||||
"No results found": "نتیجه\u200cای یافت نشد",
|
||||
"No source available": "منبعی در دسترس نیست",
|
||||
"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.": "",
|
||||
"Notifications": "اعلان",
|
||||
"November": "نوامبر",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "روشن",
|
||||
"Other": "دیگر",
|
||||
"Overview": "نمای کلی",
|
||||
"Parameters": "پارامترها",
|
||||
"Password": "رمز عبور",
|
||||
"PDF document (.pdf)": "PDF سند (.pdf)",
|
||||
"PDF Extract Images (OCR)": "استخراج تصاویر از PDF (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "پرامپت\u200cها",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "بازگرداندن \"{{searchValue}}\" از Ollama.com",
|
||||
"Pull a model from Ollama.com": "دریافت یک مدل از Ollama.com",
|
||||
"Pull Progress": "پیشرفت دریافت",
|
||||
"Query Params": "پارامترهای پرس و جو",
|
||||
"RAG Template": "RAG الگوی",
|
||||
"Raw Format": "فرمت خام",
|
||||
"Read Aloud": "خواندن به صورت صوتی",
|
||||
"Record voice": "ضبط صدا",
|
||||
"Redirecting you to OpenWebUI Community": "در حال هدایت به OpenWebUI Community",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "حذف مدل",
|
||||
"Rename": "تغییر نام",
|
||||
"Repeat Last N": "Repeat Last N",
|
||||
"Repeat Penalty": "Repeat Penalty",
|
||||
"Request Mode": "حالت درخواست",
|
||||
"Reranking Model": "مدل ری\u200cشناسی مجدد غیرفعال است",
|
||||
"Reranking model disabled": "مدل ری\u200cشناسی مجدد غیرفعال است",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "جستجو",
|
||||
"Search a model": "جستجوی مدل",
|
||||
"Search Documents": "جستجوی اسناد",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "جستجوی پرامپت\u200cها",
|
||||
"See readme.md for instructions": "برای مشاهده دستورالعمل\u200cها به readme.md مراجعه کنید",
|
||||
"See what's new": "ببینید موارد جدید چه بوده",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "یک حالت انتخاب کنید",
|
||||
"Select a model": "انتخاب یک مدل",
|
||||
"Select an Ollama instance": "انتخاب یک نمونه از اولاما",
|
||||
"Select model": "انتخاب یک مدل",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "ارسال",
|
||||
"Send a Message": "ارسال یک پیام",
|
||||
"Send message": "ارسال پیام",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "اشتراک گذاری با OpenWebUI Community",
|
||||
"short-summary": "خلاصه کوتاه",
|
||||
"Show": "نمایش",
|
||||
"Show Additional Params": "نمایش پارامترهای اضافه",
|
||||
"Show shortcuts": "نمایش میانبرها",
|
||||
"Showcased creativity": "ایده\u200cآفرینی",
|
||||
"sidebar": "نوار کناری",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "موفقیت",
|
||||
"Successfully updated.": "با موفقیت به روز شد",
|
||||
"Suggested": "پیشنهادی",
|
||||
"Sync All": "همگام سازی همه",
|
||||
"System": "سیستم",
|
||||
"System Prompt": "پرامپت سیستم",
|
||||
"Tags": "تگ\u200cها",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"Write a summary in 50 words that summarizes [topic or keyword].": "خلاصه ای در 50 کلمه بنویسید که [موضوع یا کلمه کلیدی] را خلاصه کند.",
|
||||
"Yesterday": "دیروز",
|
||||
"You": "شما",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "شما هیچ گفتگوی ذخیره شده ندارید.",
|
||||
"You have shared this chat": "شما این گفتگو را به اشتراک گذاشته اید",
|
||||
"You're a helpful assistant.": "تو یک دستیار سودمند هستی.",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Beta)",
|
||||
"(e.g. `sh webui.sh --api`)": "(esim. `sh webui.sh --api`)",
|
||||
"(latest)": "(uusin)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} miettii...",
|
||||
"{{user}}'s Chats": "{{user}}:n keskustelut",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} backend vaaditaan",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Tili",
|
||||
"Accurate information": "Tarkkaa tietoa",
|
||||
"Add": "Lisää",
|
||||
"Add a model": "Lisää malli",
|
||||
"Add a model tag name": "Lisää mallitagi",
|
||||
"Add a short description about what this modelfile does": "Lisää lyhyt kuvaus siitä, mitä tämä mallitiedosto tekee",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "Lisää lyhyt otsikko tälle kehotteelle",
|
||||
"Add a tag": "Lisää tagi",
|
||||
"Add custom prompt": "Lisää mukautettu kehote",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "Hallintapaneeli",
|
||||
"Admin Settings": "Hallinta-asetukset",
|
||||
"Advanced Parameters": "Edistyneet parametrit",
|
||||
"Advanced Params": "",
|
||||
"all": "kaikki",
|
||||
"All Documents": "Kaikki asiakirjat",
|
||||
"All Users": "Kaikki käyttäjät",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "API-avain",
|
||||
"API Key created.": "API-avain luotu.",
|
||||
"API keys": "API-avaimet",
|
||||
"API RPM": "API RPM",
|
||||
"April": "huhtikuu",
|
||||
"Archive": "Arkisto",
|
||||
"Archived Chats": "Arkistoidut keskustelut",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "saatavilla!",
|
||||
"Back": "Takaisin",
|
||||
"Bad Response": "Epäkelpo vastaus",
|
||||
"Base Model (From)": "",
|
||||
"before": "ennen",
|
||||
"Being lazy": "Oli laiska",
|
||||
"Builder Mode": "Rakentajan tila",
|
||||
"Bypass SSL verification for Websites": "Ohita SSL-varmennus verkkosivustoille",
|
||||
"Cancel": "Peruuta",
|
||||
"Categories": "Kategoriat",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Vaihda salasana",
|
||||
"Chat": "Keskustelu",
|
||||
"Chat Bubble UI": "Keskustelu-pallojen käyttöliittymä",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "Sitaatti",
|
||||
"Click here for help.": "Klikkaa tästä saadaksesi apua.",
|
||||
"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 a csv file.": "Klikkaa tästä valitaksesi CSV-tiedosto.",
|
||||
"Click here to select documents.": "Klikkaa tästä valitaksesi asiakirjoja.",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "Kopioi linkki",
|
||||
"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 modelfile": "Luo mallitiedosto",
|
||||
"Create a model": "",
|
||||
"Create Account": "Luo tili",
|
||||
"Create new key": "Luo uusi avain",
|
||||
"Create new secret key": "Luo uusi salainen avain",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "Nykyinen malli",
|
||||
"Current Password": "Nykyinen salasana",
|
||||
"Custom": "Mukautettu",
|
||||
"Customize Ollama models for a specific purpose": "Mukauta Ollama-malleja tiettyyn tarkoitukseen",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "Tumma",
|
||||
"Dashboard": "Kojelauta",
|
||||
"Database": "Tietokanta",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "poista",
|
||||
"Delete": "Poista",
|
||||
"Delete a model": "Poista malli",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Poista keskustelu",
|
||||
"Delete Chat": "Poista keskustelu",
|
||||
"Delete Chats": "Poista keskustelut",
|
||||
"delete this link": "poista tämä linkki",
|
||||
"Delete User": "Poista käyttäjä",
|
||||
"Deleted {{deleteModelTag}}": "Poistettu {{deleteModelTag}}",
|
||||
"Deleted {{tagName}}": "Poistettu {{tagName}}",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Kuvaus",
|
||||
"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
|
||||
"Disabled": "Poistettu käytöstä",
|
||||
"Discover a modelfile": "Löydä mallitiedosto",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "Löydä kehote",
|
||||
"Discover, download, and explore custom prompts": "Löydä ja lataa mukautettuja kehotteita",
|
||||
"Discover, download, and explore model presets": "Löydä ja lataa mallien esiasetuksia",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "Syötä osien koko",
|
||||
"Enter Image Size (e.g. 512x512)": "Syötä kuvan koko (esim. 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "Syötä askelien määrä (esim. 50)",
|
||||
"Enter Score": "Syötä pisteet",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "Vie kaikki keskustelut (kaikki käyttäjät)",
|
||||
"Export Chats": "Vie keskustelut",
|
||||
"Export Documents Mapping": "Vie asiakirjakartoitus",
|
||||
"Export Modelfiles": "Vie mallitiedostot",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Vie kehotteet",
|
||||
"Failed to create API Key.": "API-avaimen luonti 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",
|
||||
"Followed instructions perfectly": "Noudatti ohjeita täydellisesti",
|
||||
"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",
|
||||
"General": "Yleinen",
|
||||
"General Settings": "Yleisasetukset",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Terve, {{name}}",
|
||||
"Help": "Apua",
|
||||
"Hide": "Piilota",
|
||||
"Hide Additional Params": "Piilota lisäparametrit",
|
||||
"How can I help you today?": "Kuinka voin auttaa tänään?",
|
||||
"Hybrid Search": "Hybridihaku",
|
||||
"Image Generation (Experimental)": "Kuvagenerointi (kokeellinen)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Kuvat",
|
||||
"Import Chats": "Tuo keskustelut",
|
||||
"Import Documents Mapping": "Tuo asiakirjakartoitus",
|
||||
"Import Modelfiles": "Tuo mallitiedostoja",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "Tuo kehotteita",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "Sisällytä `--api`-parametri suorittaessasi stable-diffusion-webui",
|
||||
"Input commands": "Syötä komennot",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "tammikuu",
|
||||
"join our Discord for help.": "liity Discordiimme saadaksesi apua.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "heinäkuu",
|
||||
"June": "kesäkuu",
|
||||
"JWT Expiration": "JWT:n vanheneminen",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "Tehnyt OpenWebUI-yhteisö",
|
||||
"Make sure to enclose them with": "Varmista, että suljet ne",
|
||||
"Manage LiteLLM Models": "Hallitse LiteLLM-malleja",
|
||||
"Manage Models": "Hallitse malleja",
|
||||
"Manage Ollama Models": "Hallitse Ollama-malleja",
|
||||
"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.",
|
||||
"May": "toukokuu",
|
||||
"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 '{{modelTag}}' is already in queue for downloading.": "Malli '{{modelTag}}' on jo jonossa ladattavaksi.",
|
||||
"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 Name": "Mallin nimi",
|
||||
"Model ID": "",
|
||||
"Model not selected": "Mallia ei valittu",
|
||||
"Model Tag Name": "Mallitagin nimi",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "Mallin sallimislista",
|
||||
"Model(s) Whitelisted": "Malli(t) sallittu",
|
||||
"Modelfile": "Mallitiedosto",
|
||||
"Modelfile Advanced Settings": "Mallitiedoston edistyneet asetukset",
|
||||
"Modelfile Content": "Mallitiedoston sisältö",
|
||||
"Modelfiles": "Mallitiedostot",
|
||||
"Models": "Mallit",
|
||||
"More": "Lisää",
|
||||
"Name": "Nimi",
|
||||
"Name Tag": "Nimitagi",
|
||||
"Name your modelfile": "Nimeä mallitiedostosi",
|
||||
"Name your model": "",
|
||||
"New Chat": "Uusi keskustelu",
|
||||
"New Password": "Uusi salasana",
|
||||
"No results found": "Ei tuloksia",
|
||||
"No source available": "Ei lähdettä saatavilla",
|
||||
"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ä.",
|
||||
"Notifications": "Ilmoitukset",
|
||||
"November": "marraskuu",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "tai",
|
||||
"Other": "Muu",
|
||||
"Overview": "Yleiskatsaus",
|
||||
"Parameters": "Parametrit",
|
||||
"Password": "Salasana",
|
||||
"PDF document (.pdf)": "PDF-tiedosto (.pdf)",
|
||||
"PDF Extract Images (OCR)": "PDF-tiedoston kuvien erottelu (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Kehotteet",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Lataa \"{{searchValue}}\" Ollama.comista",
|
||||
"Pull a model from Ollama.com": "Lataa malli Ollama.comista",
|
||||
"Pull Progress": "Latauksen eteneminen",
|
||||
"Query Params": "Kyselyparametrit",
|
||||
"RAG Template": "RAG-malline",
|
||||
"Raw Format": "Raaka muoto",
|
||||
"Read Aloud": "Lue ääneen",
|
||||
"Record voice": "Nauhoita ääni",
|
||||
"Redirecting you to OpenWebUI Community": "Ohjataan sinut OpenWebUI-yhteisöön",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "Poista malli",
|
||||
"Rename": "Nimeä uudelleen",
|
||||
"Repeat Last N": "Viimeinen N -toisto",
|
||||
"Repeat Penalty": "Toistosakko",
|
||||
"Request Mode": "Pyyntötila",
|
||||
"Reranking Model": "Uudelleenpisteytysmalli",
|
||||
"Reranking model disabled": "Uudelleenpisteytysmalli poistettu käytöstä",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Haku",
|
||||
"Search a model": "Hae mallia",
|
||||
"Search Documents": "Hae asiakirjoja",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Hae kehotteita",
|
||||
"See readme.md for instructions": "Katso lisää ohjeita readme.md:stä",
|
||||
"See what's new": "Katso, mitä uutta",
|
||||
"Seed": "Siemen",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Valitse tila",
|
||||
"Select a model": "Valitse malli",
|
||||
"Select an Ollama instance": "Valitse Ollama-instanssi",
|
||||
"Select model": "Valitse malli",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "Lähetä",
|
||||
"Send a Message": "Lähetä viesti",
|
||||
"Send message": "Lähetä viesti",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Jaa OpenWebUI-yhteisöön",
|
||||
"short-summary": "lyhyt-yhteenveto",
|
||||
"Show": "Näytä",
|
||||
"Show Additional Params": "Näytä lisäparametrit",
|
||||
"Show shortcuts": "Näytä pikanäppäimet",
|
||||
"Showcased creativity": "Näytti luovuutta",
|
||||
"sidebar": "sivupalkki",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Onnistui",
|
||||
"Successfully updated.": "Päivitetty onnistuneesti.",
|
||||
"Suggested": "Suositeltu",
|
||||
"Sync All": "Synkronoi kaikki",
|
||||
"System": "Järjestelmä",
|
||||
"System Prompt": "Järjestelmäkehote",
|
||||
"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].",
|
||||
"Yesterday": "Eilen",
|
||||
"You": "Sinä",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "Sinulla ei ole arkistoituja keskusteluja.",
|
||||
"You have shared this chat": "Olet jakanut tämän keskustelun",
|
||||
"You're a helpful assistant.": "Olet avulias apulainen.",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Bêta)",
|
||||
"(e.g. `sh webui.sh --api`)": "(par ex. `sh webui.sh --api`)",
|
||||
"(latest)": "(dernière)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} réfléchit...",
|
||||
"{{user}}'s Chats": "{{user}}'s Chats",
|
||||
"{{webUIName}} Backend Required": "Backend {{webUIName}} requis",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Compte",
|
||||
"Accurate information": "Information précise",
|
||||
"Add": "Ajouter",
|
||||
"Add a model": "Ajouter un modèle",
|
||||
"Add a model tag name": "Ajouter un nom de tag pour le 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 model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "Ajouter un court titre pour ce prompt",
|
||||
"Add a tag": "Ajouter un tag",
|
||||
"Add custom prompt": "Ajouter un prompt personnalisé",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "Panneau d'administration",
|
||||
"Admin Settings": "Paramètres d'administration",
|
||||
"Advanced Parameters": "Paramètres avancés",
|
||||
"Advanced Params": "",
|
||||
"all": "tous",
|
||||
"All Documents": "Tous les documents",
|
||||
"All Users": "Tous les utilisateurs",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "Clé API",
|
||||
"API Key created.": "Clé API créée.",
|
||||
"API keys": "Clés API",
|
||||
"API RPM": "RPM API",
|
||||
"April": "Avril",
|
||||
"Archive": "Archiver",
|
||||
"Archived Chats": "enregistrement du chat",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "disponible !",
|
||||
"Back": "Retour",
|
||||
"Bad Response": "Mauvaise réponse",
|
||||
"Base Model (From)": "",
|
||||
"before": "avant",
|
||||
"Being lazy": "En manque de temps",
|
||||
"Builder Mode": "Mode Constructeur",
|
||||
"Bypass SSL verification for Websites": "Parcourir la vérification SSL pour les sites Web",
|
||||
"Cancel": "Annuler",
|
||||
"Categories": "Catégories",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Changer le mot de passe",
|
||||
"Chat": "Discussion",
|
||||
"Chat Bubble UI": "Bubble UI de discussion",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "Citations",
|
||||
"Click here for help.": "Cliquez ici pour de l'aide.",
|
||||
"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 a csv file.": "Cliquez ici pour sélectionner un fichier csv.",
|
||||
"Click here to select documents.": "Cliquez ici pour sélectionner des documents.",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "Copier le lien",
|
||||
"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 modelfile": "Créer un fichier de modèle",
|
||||
"Create a model": "",
|
||||
"Create Account": "Créer un compte",
|
||||
"Create new key": "Créer une nouvelle clé",
|
||||
"Create new secret key": "Créer une nouvelle clé secrète",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "Modèle actuel",
|
||||
"Current Password": "Mot de passe actuel",
|
||||
"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",
|
||||
"Dashboard": "Tableau de bord",
|
||||
"Database": "Base de données",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "supprimer",
|
||||
"Delete": "Supprimer",
|
||||
"Delete a model": "Supprimer un modèle",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Supprimer la discussion",
|
||||
"Delete Chat": "Supprimer la discussion",
|
||||
"Delete Chats": "Supprimer les discussions",
|
||||
"delete this link": "supprimer ce lien",
|
||||
"Delete User": "Supprimer l'utilisateur",
|
||||
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé",
|
||||
"Deleted {{tagName}}": "{{tagName}} supprimé",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Description",
|
||||
"Didn't fully follow instructions": "Ne suit pas les instructions",
|
||||
"Disabled": "Désactivé",
|
||||
"Discover a modelfile": "Découvrir un fichier de modèle",
|
||||
"Discover a model": "",
|
||||
"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 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 Image Size (e.g. 512x512)": "Entrez la taille de l'image (p. ex. 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "Entrez le nombre d'étapes (p. ex. 50)",
|
||||
"Enter Score": "Entrez le score",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "Exporter toutes les discussions (Tous les utilisateurs)",
|
||||
"Export Chats": "Exporter les discussions",
|
||||
"Export Documents Mapping": "Exporter le mappage des documents",
|
||||
"Export Modelfiles": "Exporter les fichiers de modèle",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Exporter les prompts",
|
||||
"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",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "Se concentrer sur l'entrée de la discussion",
|
||||
"Followed instructions perfectly": "Suivi des instructions parfaitement",
|
||||
"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",
|
||||
"General": "Général",
|
||||
"General Settings": "Paramètres généraux",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Bonjour, {{name}}",
|
||||
"Help": "Aide",
|
||||
"Hide": "Cacher",
|
||||
"Hide Additional Params": "Cacher les paramètres supplémentaires",
|
||||
"How can I help you today?": "Comment puis-je vous aider aujourd'hui ?",
|
||||
"Hybrid Search": "Recherche hybride",
|
||||
"Image Generation (Experimental)": "Génération d'image (Expérimental)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Images",
|
||||
"Import Chats": "Importer les discussions",
|
||||
"Import Documents Mapping": "Importer le mappage des documents",
|
||||
"Import Modelfiles": "Importer les fichiers de modèle",
|
||||
"Import Models": "",
|
||||
"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",
|
||||
"Input commands": "Entrez des commandes d'entrée",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "Janvier",
|
||||
"join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "Juillet",
|
||||
"June": "Juin",
|
||||
"JWT Expiration": "Expiration du JWT",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "Réalisé par la communauté OpenWebUI",
|
||||
"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 Ollama Models": "Gérer les modèles Ollama",
|
||||
"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.",
|
||||
"May": "Mai",
|
||||
"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 '{{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 {{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 Name": "Nom du modèle",
|
||||
"Model ID": "",
|
||||
"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(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",
|
||||
"Modelfiles": "Fichiers de modèle",
|
||||
"Models": "Modèles",
|
||||
"More": "Plus",
|
||||
"Name": "Nom",
|
||||
"Name Tag": "Tag de nom",
|
||||
"Name your modelfile": "Nommez votre fichier de modèle",
|
||||
"Name your model": "",
|
||||
"New Chat": "Nouvelle discussion",
|
||||
"New Password": "Nouveau mot de passe",
|
||||
"No results found": "Aucun résultat trouvé",
|
||||
"No source available": "Aucune source disponible",
|
||||
"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.",
|
||||
"Notifications": "Notifications de bureau",
|
||||
"November": "Novembre",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "ou",
|
||||
"Other": "Autre",
|
||||
"Overview": "Aperçu",
|
||||
"Parameters": "Paramètres",
|
||||
"Password": "Mot de passe",
|
||||
"PDF document (.pdf)": "Document PDF (.pdf)",
|
||||
"PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Prompts",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Tirer \"{{searchValue}}\" 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",
|
||||
"RAG Template": "Modèle RAG",
|
||||
"Raw Format": "Format brut",
|
||||
"Read Aloud": "Lire à l'échelle",
|
||||
"Record voice": "Enregistrer la voix",
|
||||
"Redirecting you to OpenWebUI Community": "Vous redirige vers la communauté OpenWebUI",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "Supprimer le modèle",
|
||||
"Rename": "Renommer",
|
||||
"Repeat Last N": "Répéter les N derniers",
|
||||
"Repeat Penalty": "Pénalité de répétition",
|
||||
"Request Mode": "Mode de requête",
|
||||
"Reranking Model": "Modèle de reranking",
|
||||
"Reranking model disabled": "Modèle de reranking désactivé",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Recherche",
|
||||
"Search a model": "Rechercher un modèle",
|
||||
"Search Documents": "Rechercher des documents",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Rechercher des prompts",
|
||||
"See readme.md for instructions": "Voir readme.md pour les instructions",
|
||||
"See what's new": "Voir les nouveautés",
|
||||
"Seed": "Graine",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Sélectionnez un mode",
|
||||
"Select a model": "Sélectionnez un modèle",
|
||||
"Select an Ollama instance": "Sélectionner une instance Ollama",
|
||||
"Select model": "Sélectionnez un modèle",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "Envoyer",
|
||||
"Send a Message": "Envoyer un message",
|
||||
"Send message": "Envoyer un message",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Partager avec la communauté OpenWebUI",
|
||||
"short-summary": "résumé court",
|
||||
"Show": "Afficher",
|
||||
"Show Additional Params": "Afficher les paramètres supplémentaires",
|
||||
"Show shortcuts": "Afficher les raccourcis",
|
||||
"Showcased creativity": "Créativité affichée",
|
||||
"sidebar": "barre latérale",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Succès",
|
||||
"Successfully updated.": "Mis à jour avec succès.",
|
||||
"Suggested": "Suggéré",
|
||||
"Sync All": "Synchroniser tout",
|
||||
"System": "Système",
|
||||
"System Prompt": "Prompt Système",
|
||||
"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é].",
|
||||
"Yesterday": "hier",
|
||||
"You": "Vous",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "Vous n'avez aucune conversation archivée.",
|
||||
"You have shared this chat": "Vous avez partagé cette conversation",
|
||||
"You're a helpful assistant.": "Vous êtes un assistant utile",
|
||||
|
|
|
|||
|
|
@ -2,36 +2,38 @@
|
|||
"'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ou '-1' pour aucune expiration.",
|
||||
"(Beta)": "(Bêta)",
|
||||
"(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...",
|
||||
"{{user}}'s Chats": "{{user}}'s Chats",
|
||||
"{{user}}'s Chats": "Chats de {{user}}",
|
||||
"{{webUIName}} Backend Required": "Backend {{webUIName}} requis",
|
||||
"a user": "un utilisateur",
|
||||
"About": "À propos",
|
||||
"About": "À Propos",
|
||||
"Account": "Compte",
|
||||
"Accurate information": "Information précise",
|
||||
"Add": "Ajouter",
|
||||
"Add a model": "Ajouter un modèle",
|
||||
"Add a model tag name": "Ajouter un nom de tag pour le 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 model id": "Ajouter un identifiant 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 title for this prompt": "Ajouter un court titre pour ce prompt",
|
||||
"Add a tag": "Ajouter un tag",
|
||||
"Add custom prompt": "Ajouter un prompt personnalisé",
|
||||
"Add Docs": "Ajouter des documents",
|
||||
"Add Files": "Ajouter des fichiers",
|
||||
"Add Memory": "Ajouter une mémoire",
|
||||
"Add Docs": "Ajouter des Documents",
|
||||
"Add Files": "Ajouter des Fichiers",
|
||||
"Add Memory": "Ajouter de la Mémoire",
|
||||
"Add message": "Ajouter un message",
|
||||
"Add Model": "Ajouter un modèle",
|
||||
"Add Tags": "ajouter des tags",
|
||||
"Add User": "Ajouter un utilisateur",
|
||||
"Add Model": "Ajouter un Modèle",
|
||||
"Add Tags": "Ajouter des Tags",
|
||||
"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.",
|
||||
"admin": "Administrateur",
|
||||
"Admin Panel": "Panneau d'administration",
|
||||
"Admin Settings": "Paramètres d'administration",
|
||||
"Advanced Parameters": "Paramètres avancés",
|
||||
"admin": "admin",
|
||||
"Admin Panel": "Panneau d'Administration",
|
||||
"Admin Settings": "Paramètres d'Administration",
|
||||
"Advanced Parameters": "Paramètres Avancés",
|
||||
"Advanced Params": "Params Avancés",
|
||||
"all": "tous",
|
||||
"All Documents": "Tous les documents",
|
||||
"All Users": "Tous les utilisateurs",
|
||||
"All Documents": "Tous les Documents",
|
||||
"All Users": "Tous les Utilisateurs",
|
||||
"Allow": "Autoriser",
|
||||
"Allow Chat Deletion": "Autoriser la suppression du chat",
|
||||
"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é.",
|
||||
"API Base URL": "URL de base de l'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 RPM": "RPM API",
|
||||
"April": "Avril",
|
||||
"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 you sure?": "Êtes-vous sûr ?",
|
||||
"Attach file": "Joindre un fichier",
|
||||
|
|
@ -59,16 +60,16 @@
|
|||
"AUTOMATIC1111 Base URL is required.": "L'URL de base AUTOMATIC1111 est requise.",
|
||||
"available!": "disponible !",
|
||||
"Back": "Retour",
|
||||
"Bad Response": "Mauvaise réponse",
|
||||
"Bad Response": "Mauvaise Réponse",
|
||||
"Base Model (From)": "Modèle de Base (De)",
|
||||
"before": "avant",
|
||||
"Being lazy": "En manque de temps",
|
||||
"Builder Mode": "Mode Constructeur",
|
||||
"Bypass SSL verification for Websites": "Parcourir la vérification SSL pour les sites Web",
|
||||
"Being lazy": "Est paresseux",
|
||||
"Bypass SSL verification for Websites": "Contourner la vérification SSL pour les sites Web.",
|
||||
"Cancel": "Annuler",
|
||||
"Categories": "Catégories",
|
||||
"Capabilities": "Capacités",
|
||||
"Change Password": "Changer le mot de passe",
|
||||
"Chat": "Chat",
|
||||
"Chat Bubble UI": "Chat Bubble UI",
|
||||
"Chat Bubble UI": "UI Bulles de Chat",
|
||||
"Chat direction": "Direction du chat",
|
||||
"Chat History": "Historique du chat",
|
||||
"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 Params": "Paramètres de bloc",
|
||||
"Chunk Size": "Taille de bloc",
|
||||
"Citation": "Citations",
|
||||
"Citation": "Citation",
|
||||
"Click here for help.": "Cliquez ici pour de l'aide.",
|
||||
"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 a csv file.": "Cliquez ici pour sélectionner un fichier csv.",
|
||||
"Click here to select documents.": "Cliquez ici pour sélectionner des documents.",
|
||||
|
|
@ -92,32 +92,32 @@
|
|||
"Close": "Fermer",
|
||||
"Collection": "Collection",
|
||||
"ComfyUI": "ComfyUI",
|
||||
"ComfyUI Base URL": "ComfyUI Base URL",
|
||||
"ComfyUI Base URL is required.": "ComfyUI Base URL est requis.",
|
||||
"ComfyUI Base URL": "URL de base ComfyUI",
|
||||
"ComfyUI Base URL is required.": "L'URL de base ComfyUI est requise.",
|
||||
"Command": "Commande",
|
||||
"Confirm Password": "Confirmer le mot de passe",
|
||||
"Connections": "Connexions",
|
||||
"Content": "Contenu",
|
||||
"Context Length": "Longueur du contexte",
|
||||
"Continue Response": "Continuer la réponse",
|
||||
"Continue Response": "Continuer la Réponse",
|
||||
"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 last code block": "Copier le dernier bloc de code",
|
||||
"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 !",
|
||||
"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 new key": "Créer une nouvelle clé",
|
||||
"Create new secret key": "Créer une nouvelle clé secrète",
|
||||
"Created at": "Créé le",
|
||||
"Created At": "Créé le",
|
||||
"Created At": "Crée Le",
|
||||
"Current Model": "Modèle actuel",
|
||||
"Current Password": "Mot de passe actuel",
|
||||
"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",
|
||||
"Dashboard": "Tableau de bord",
|
||||
"Database": "Base de données",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "supprimer",
|
||||
"Delete": "Supprimer",
|
||||
"Delete a model": "Supprimer un modèle",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Supprimer le chat",
|
||||
"Delete Chat": "Supprimer le chat",
|
||||
"Delete Chats": "Supprimer les chats",
|
||||
"Delete Chat": "Supprimer le Chat",
|
||||
"delete this link": "supprimer ce lien",
|
||||
"Delete User": "Supprimer l'utilisateur",
|
||||
"Delete User": "Supprimer l'Utilisateur",
|
||||
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé",
|
||||
"Deleted {{tagName}}": "{{tagName}} supprimé",
|
||||
"Deleted {{name}}": "{{name}} supprimé",
|
||||
"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é",
|
||||
"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, 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",
|
||||
|
|
@ -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.",
|
||||
"Don't Allow": "Ne pas autoriser",
|
||||
"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 canceled": "Téléchargement annulé",
|
||||
"Download Database": "Télécharger la base de données",
|
||||
|
|
@ -163,106 +163,100 @@
|
|||
"Edit Doc": "Éditer le document",
|
||||
"Edit User": "Éditer l'utilisateur",
|
||||
"Email": "Email",
|
||||
"Embedding Model": "Modèle d'embedding",
|
||||
"Embedding Model Engine": "Moteur du modèle d'embedding",
|
||||
"Embedding Model": "Modèle pour l'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}}\"",
|
||||
"Enable Chat History": "Activer l'historique du chat",
|
||||
"Enable New Sign Ups": "Activer les nouvelles inscriptions",
|
||||
"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 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 Size": "Entrez la taille du bloc",
|
||||
"Enter Image Size (e.g. 512x512)": "Entrez la taille de l'image (p. ex. 512x512)",
|
||||
"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 language codes": "Entrez les codes du language",
|
||||
"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 Score": "Entrez le score",
|
||||
"Enter Score": "Entrez le Score",
|
||||
"Enter stop sequence": "Entrez la séquence de fin",
|
||||
"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://localhost:11434)": "Entrez l'URL (p. ex. http://localhost:11434)",
|
||||
"Enter Your Email": "Entrez votre email",
|
||||
"Enter Your Full Name": "Entrez votre nom complet",
|
||||
"Enter Your Password": "Entrez votre mot de passe",
|
||||
"Enter Your Role": "Entrez votre rôle",
|
||||
"Enter Your Email": "Entrez Votre Email",
|
||||
"Enter Your Full Name": "Entrez Votre Nom Complet",
|
||||
"Enter Your Password": "Entrez Votre Mot De Passe",
|
||||
"Enter Your Role": "Entrez Votre Rôle",
|
||||
"Experimental": "Expérimental",
|
||||
"Export All Chats (All Users)": "Exporter tous les chats (tous les utilisateurs)",
|
||||
"Export Chats": "Exporter les chats",
|
||||
"Export Documents Mapping": "Exporter la correspondance des documents",
|
||||
"Export Modelfiles": "Exporter les fichiers de modèle",
|
||||
"Export Prompts": "Exporter les prompts",
|
||||
"Failed to create API Key.": "Impossible de créer la clé API.",
|
||||
"Export All Chats (All Users)": "Exporter Tous les Chats (Tous les Utilisateurs)",
|
||||
"Export Chats": "Exporter les Chats",
|
||||
"Export Documents Mapping": "Exporter la Correspondance des Documents",
|
||||
"Export Models": "Exporter les Modèles",
|
||||
"Export Prompts": "Exporter les Prompts",
|
||||
"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",
|
||||
"February": "Février",
|
||||
"Feel free to add specific details": "Vous pouvez ajouter des détails spécifiques",
|
||||
"File Mode": "Mode fichier",
|
||||
"Feel free to add specific details": "N'hésitez pas à ajouter des détails spécifiques",
|
||||
"File Mode": "Mode Fichier",
|
||||
"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",
|
||||
"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 :",
|
||||
"From (Base Model)": "De (Modèle de base)",
|
||||
"Frequencey Penalty": "Pénalité de Fréquence",
|
||||
"Full Screen Mode": "Mode plein écran",
|
||||
"General": "Général",
|
||||
"General Settings": "Paramètres généraux",
|
||||
"Generation Info": "Informations de génération",
|
||||
"Good Response": "Bonne réponse",
|
||||
"General Settings": "Paramètres Généraux",
|
||||
"Generation Info": "Informations de la Génération",
|
||||
"Good Response": "Bonne Réponse",
|
||||
"h:mm a": "h:mm a",
|
||||
"has no conversations.": "n'a pas de conversations.",
|
||||
"Hello, {{name}}": "Bonjour, {{name}}",
|
||||
"Help": "Aide",
|
||||
"Hide": "Cacher",
|
||||
"Hide Additional Params": "Hide additional params",
|
||||
"How can I help you today?": "Comment puis-je vous aider aujourd'hui ?",
|
||||
"Hybrid Search": "Recherche hybride",
|
||||
"Image Generation (Experimental)": "Génération d'image (Expérimental)",
|
||||
"Image Generation Engine": "Moteur de génération d'image",
|
||||
"Image Settings": "Paramètres d'image",
|
||||
"Hybrid Search": "Recherche Hybride",
|
||||
"Image Generation (Experimental)": "Génération d'Image (Expérimental)",
|
||||
"Image Generation Engine": "Moteur de Génération d'Image",
|
||||
"Image Settings": "Paramètres d'Image",
|
||||
"Images": "Images",
|
||||
"Import Chats": "Importer les chats",
|
||||
"Import Documents Mapping": "Importer la correspondance des documents",
|
||||
"Import Modelfiles": "Importer les fichiers de modèle",
|
||||
"Import Prompts": "Importer les prompts",
|
||||
"Import Chats": "Importer les Chats",
|
||||
"Import Documents Mapping": "Importer la Correspondance des Documents",
|
||||
"Import Models": "Importer des Modèles",
|
||||
"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",
|
||||
"Input commands": "Entrez les commandes d'entrée",
|
||||
"Interface": "Interface",
|
||||
"Invalid Tag": "Tag invalide",
|
||||
"Invalid Tag": "Tag Invalide",
|
||||
"January": "Janvier",
|
||||
"join our Discord for help.": "rejoignez notre Discord pour obtenir de l'aide.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "Aperçu JSON",
|
||||
"July": "Juillet",
|
||||
"June": "Juin",
|
||||
"JWT Expiration": "Expiration JWT",
|
||||
"JWT Token": "Jeton JWT",
|
||||
"Keep Alive": "Garder en vie",
|
||||
"Keep Alive": "Rester en vie",
|
||||
"Keyboard shortcuts": "Raccourcis clavier",
|
||||
"Language": "Langue",
|
||||
"Last Active": "Dernière activité",
|
||||
"Last Active": "Dernier Activité",
|
||||
"Light": "Clair",
|
||||
"Listening...": "Écoute...",
|
||||
"LLMs can make mistakes. Verify important information.": "Les LLMs peuvent faire des erreurs. Vérifiez les informations importantes.",
|
||||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "Réalisé par la communauté OpenWebUI",
|
||||
"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 Ollama Models": "Gérer les modèles Ollama",
|
||||
"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.",
|
||||
"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",
|
||||
"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é.",
|
||||
"Minimum Score": "Score minimum",
|
||||
"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",
|
||||
"Mirostat": "Mirostat",
|
||||
"Mirostat Eta": "Mirostat Eta",
|
||||
"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 '{{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 {{modelName}} already exists.": "Le modèle {{modelName}} existe déjà.",
|
||||
"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 {{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.": "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 ID": "ID du Modèle",
|
||||
"Model not selected": "Modèle non sélectionné",
|
||||
"Model Tag Name": "Nom de tag du modèle",
|
||||
"Model Whitelisting": "Liste blanche de modèle",
|
||||
"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",
|
||||
"Modelfiles": "Fichiers de modèle",
|
||||
"Model Params": "Paramètres du Modèle",
|
||||
"Model Whitelisting": "Liste Blanche de Modèle",
|
||||
"Model(s) Whitelisted": "Modèle(s) sur Liste Blanche",
|
||||
"Modelfile Content": "Contenu du Fichier de Modèle",
|
||||
"Models": "Modèles",
|
||||
"More": "Plus",
|
||||
"Name": "Nom",
|
||||
"Name Tag": "Tag de nom",
|
||||
"Name your modelfile": "Nommez votre fichier de modèle",
|
||||
"Name Tag": "Tag de Nom",
|
||||
"Name your model": "Nommez votre modèle",
|
||||
"New Chat": "Nouveau chat",
|
||||
"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",
|
||||
"Not factually correct": "Non, pas exactement correct",
|
||||
"Not sure what to add?": "Vous ne savez pas quoi ajouter ?",
|
||||
"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.",
|
||||
"Not factually correct": "Faits incorrects",
|
||||
"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.",
|
||||
"Notifications": "Notifications de bureau",
|
||||
"November": "Novembre",
|
||||
"October": "Octobre",
|
||||
"Off": "Désactivé",
|
||||
"Okay, Let's Go!": "D'accord, allons-y !",
|
||||
"OLED Dark": "OLED Sombre",
|
||||
"OLED Dark": "Sombre OLED",
|
||||
"Ollama": "Ollama",
|
||||
"Ollama API": "",
|
||||
"Ollama API": "API Ollama",
|
||||
"Ollama Version": "Version Ollama",
|
||||
"On": "Activé",
|
||||
"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.",
|
||||
"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! 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! 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.": "Oups ! Vous utilisez une méthode non-supportée (frontend uniquement). Veuillez également servir WebUI depuis le backend.",
|
||||
"Open": "Ouvrir",
|
||||
"Open AI": "Open AI",
|
||||
"Open AI (Dall-E)": "Open AI (Dall-E)",
|
||||
"Open new chat": "Ouvrir un nouveau chat",
|
||||
"OpenAI": "OpenAI",
|
||||
"OpenAI API": "API OpenAI",
|
||||
"OpenAI API Config": "Configuration API OpenAI",
|
||||
"OpenAI API Key is required.": "La clé API OpenAI est requise.",
|
||||
"OpenAI URL/Key required.": "L'URL/Clé OpenAI est requise.",
|
||||
"OpenAI API Config": "Config API OpenAI",
|
||||
"OpenAI API Key is required.": "La clé d'API OpenAI est requise.",
|
||||
"OpenAI URL/Key required.": "URL/Clé OpenAI requise.",
|
||||
"or": "ou",
|
||||
"Other": "Autre",
|
||||
"Overview": "Aperçu",
|
||||
"Parameters": "Paramètres",
|
||||
"Password": "Mot de passe",
|
||||
"PDF document (.pdf)": "Document PDF (.pdf)",
|
||||
"PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)",
|
||||
"pending": "en attente",
|
||||
"Permission denied when accessing microphone: {{error}}": "Permission refusée lors de l'accès au microphone : {{error}}",
|
||||
"Personalization": "Personnalisation",
|
||||
"Plain text (.txt)": "Texte brut (.txt)",
|
||||
"Plain text (.txt)": "Texte Brute (.txt)",
|
||||
"Playground": "Aire de jeu",
|
||||
"Positive attitude": "Attitude positive",
|
||||
"Previous 30 days": "30 derniers jours",
|
||||
"Previous 7 days": "7 derniers jours",
|
||||
"Profile Image": "Image de profil",
|
||||
"Positive attitude": "Attitude Positive",
|
||||
"Previous 30 days": "30 jours précédents",
|
||||
"Previous 7 days": "7 jours précédents",
|
||||
"Profile Image": "Image du Profil",
|
||||
"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 suggestions": "Suggestions de prompt",
|
||||
"Prompts": "Prompts",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Tirer \"{{searchValue}}\" de Ollama.com",
|
||||
"Pull a model from Ollama.com": "Tirer un modèle de Ollama.com",
|
||||
"Pull Progress": "Progression du tirage",
|
||||
"Query Params": "Paramètres de requête",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Récupérer \"{{searchValue}}\" de Ollama.com",
|
||||
"Pull a model from Ollama.com": "Récupérer un modèle de Ollama.com",
|
||||
"Query Params": "Paramètres de Requête",
|
||||
"RAG Template": "Modèle RAG",
|
||||
"Raw Format": "Format brut",
|
||||
"Read Aloud": "Lire à l'oreille",
|
||||
"Read Aloud": "Lire à Voix Haute",
|
||||
"Record voice": "Enregistrer la voix",
|
||||
"Redirecting you to OpenWebUI Community": "Vous redirige vers la communauté OpenWebUI",
|
||||
"Refused when it shouldn't have": "Refusé quand il ne devrait pas l'être",
|
||||
"Regenerate": "Régénérer",
|
||||
"Release Notes": "Notes de version",
|
||||
"Remove": "Supprimer",
|
||||
"Remove Model": "Supprimer le modèle",
|
||||
"Redirecting you to OpenWebUI Community": "Redirection vers la communauté OpenWebUI",
|
||||
"Refused when it shouldn't have": "Refuse quand il ne devrait pas",
|
||||
"Regenerate": "Regénérer",
|
||||
"Release Notes": "Notes de Version",
|
||||
"Remove": "Retirer",
|
||||
"Remove Model": "Retirer le Modèle",
|
||||
"Rename": "Renommer",
|
||||
"Repeat Last N": "Répéter les derniers N",
|
||||
"Repeat Penalty": "Pénalité de répétition",
|
||||
"Request Mode": "Mode de demande",
|
||||
"Reranking Model": "Modèle de reranking",
|
||||
"Reranking model disabled": "Modèle de reranking désactivé",
|
||||
"Reranking model set to \"{{reranking_model}}\"": "Modèle de reranking défini sur \"{{reranking_model}}\"",
|
||||
"Reset Vector Storage": "Réinitialiser le stockage de vecteur",
|
||||
"Response AutoCopy to Clipboard": "Copie automatique de la réponse dans le presse-papiers",
|
||||
"Repeat Last N": "Répéter les Derniers N",
|
||||
"Request Mode": "Mode de Demande",
|
||||
"Reranking Model": "Modèle de Reclassement",
|
||||
"Reranking model disabled": "Modèle de Reclassement Désactivé",
|
||||
"Reranking model set to \"{{reranking_model}}\"": "Modèle de reclassement défini sur \"{{reranking_model}}\"",
|
||||
"Reset Vector Storage": "Réinitialiser le Stockage de Vecteur",
|
||||
"Response AutoCopy to Clipboard": "Copie Automatique de la Réponse dans le Presse-papiers",
|
||||
"Role": "Rôle",
|
||||
"Rosé Pine": "Pin Rosé",
|
||||
"Rosé Pine Dawn": "Aube Pin Rosé",
|
||||
|
|
@ -376,37 +361,39 @@
|
|||
"Scan for documents from {{path}}": "Scanner des documents depuis {{path}}",
|
||||
"Search": "Recherche",
|
||||
"Search a model": "Rechercher un modèle",
|
||||
"Search Documents": "Rechercher des documents",
|
||||
"Search Prompts": "Rechercher des prompts",
|
||||
"Search Documents": "Rechercher des Documents",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Rechercher des Prompts",
|
||||
"See readme.md for instructions": "Voir readme.md pour les instructions",
|
||||
"See what's new": "Voir les nouveautés",
|
||||
"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 an Ollama instance": "Sélectionner une instance Ollama",
|
||||
"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 a Message": "Envoyer un message",
|
||||
"Send message": "Envoyer un message",
|
||||
"September": "Septembre",
|
||||
"Server connection verified": "Connexion au serveur vérifiée",
|
||||
"Set as default": "Définir 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 Image Size": "Définir la taille de l'image",
|
||||
"Set Model": "Définir le modèle",
|
||||
"Set reranking model (e.g. {{model}})": "Définir le modèle de reranking (par exemple {{model}})",
|
||||
"Set Steps": "Définir les étapes",
|
||||
"Set Title Auto-Generation Model": "Définir le modèle de génération automatique de titre",
|
||||
"Set Voice": "Définir la voix",
|
||||
"Set Default Model": "Définir le Modèle par Défaut",
|
||||
"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 Model": "Définir le Modèle",
|
||||
"Set reranking model (e.g. {{model}})": "Définir le modèle de reclassement (p. ex. {{model}})",
|
||||
"Set Steps": "Définir les Étapes",
|
||||
"Set Title Auto-Generation Model": "Définir le Modèle de Génération Automatique de Titre",
|
||||
"Set Voice": "Définir la Voix",
|
||||
"Settings": "Paramètres",
|
||||
"Settings saved successfully!": "Paramètres enregistrés avec succès !",
|
||||
"Share": "Partager",
|
||||
"Share Chat": "Partager le chat",
|
||||
"Share Chat": "Partager le Chat",
|
||||
"Share to OpenWebUI Community": "Partager avec la communauté OpenWebUI",
|
||||
"short-summary": "résumé court",
|
||||
"Show": "Montrer",
|
||||
"Show Additional Params": "Afficher les paramètres supplémentaires",
|
||||
"Show shortcuts": "Afficher les raccourcis",
|
||||
"Showcased creativity": "Créativité affichée",
|
||||
"sidebar": "barre latérale",
|
||||
|
|
@ -416,37 +403,36 @@
|
|||
"Signing in": "Connexion en cours",
|
||||
"Source": "Source",
|
||||
"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.",
|
||||
"Stop Sequence": "Séquence d'arrêt",
|
||||
"Stop Sequence": "Séquence d'Arrêt",
|
||||
"STT Settings": "Paramètres STT",
|
||||
"Submit": "Soumettre",
|
||||
"Subtitle (e.g. about the Roman Empire)": "Sous-titre (par exemple, sur l'empire romain)",
|
||||
"Submit": "Envoyer",
|
||||
"Subtitle (e.g. about the Roman Empire)": "Sous-Titres (p. ex. à propos de l'Empire Romain)",
|
||||
"Success": "Succès",
|
||||
"Successfully updated.": "Mis à jour avec succès.",
|
||||
"Suggested": "Suggéré",
|
||||
"Sync All": "Synchroniser tout",
|
||||
"System": "Système",
|
||||
"System Prompt": "Invite de système",
|
||||
"System Prompt": "Prompt du Système",
|
||||
"Tags": "Tags",
|
||||
"Tell us more:": "Donnez-nous plus:",
|
||||
"Tell us more:": "Dites-nous en plus :",
|
||||
"Temperature": "Température",
|
||||
"Template": "Modèle",
|
||||
"Text Completion": "Complétion de texte",
|
||||
"Text-to-Speech Engine": "Moteur de synthèse vocale",
|
||||
"Text Completion": "Complétion de Texte",
|
||||
"Text-to-Speech Engine": "Moteur de Synthèse Vocale",
|
||||
"Tfs Z": "Tfs Z",
|
||||
"Thanks for your feedback!": "Merci pour votre feedback!",
|
||||
"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%).",
|
||||
"Thanks for your feedback!": "Merci pour votre avis !",
|
||||
"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",
|
||||
"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.",
|
||||
"Thorough explanation": "Explication approfondie",
|
||||
"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.",
|
||||
"Thorough explanation": "Explication détaillée",
|
||||
"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 (e.g. Tell me a fun fact)": "Titre (par exemple, Dites-moi un fait amusant)",
|
||||
"Title Auto-Generation": "Génération automatique de titre",
|
||||
"Title cannot be an empty string.": "Le titre ne peut pas être une chaîne vide.",
|
||||
"Title Generation Prompt": "Prompt de génération de titre",
|
||||
"Title (e.g. Tell me a fun fact)": "Titre (p. ex. Donne moi un fait amusant)",
|
||||
"Title Auto-Generation": "Génération Automatique du Titre",
|
||||
"Title cannot be an empty string.": "Le Titre ne peut pas être vide.",
|
||||
"Title Generation Prompt": "Prompt de Génération du Titre",
|
||||
"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 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",
|
||||
"Trouble accessing Ollama?": "Problèmes d'accès à Ollama ?",
|
||||
"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}}.",
|
||||
"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 password": "Mettre à jour le mot de passe",
|
||||
"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 password": "Mettre à Jour le Mot de Passe",
|
||||
"Upload a GGUF model": "Téléverser un modèle GGUF",
|
||||
"Upload files": "Téléverser des fichiers",
|
||||
"Upload Progress": "Progression du Téléversement",
|
||||
|
|
@ -478,26 +464,27 @@
|
|||
"variable": "variable",
|
||||
"variable to have them replaced with clipboard content.": "variable pour les remplacer par le contenu du presse-papiers.",
|
||||
"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 Loader Settings": "Paramètres du chargeur Web",
|
||||
"Web Loader Settings": "Paramètres du Chargeur Web",
|
||||
"Web Params": "Paramètres Web",
|
||||
"Webhook URL": "URL Webhook",
|
||||
"Webhook URL": "URL du Webhook",
|
||||
"WebUI Add-ons": "Add-ons WebUI",
|
||||
"WebUI Settings": "Paramètres WebUI",
|
||||
"WebUI will make requests to": "WebUI effectuera des demandes à",
|
||||
"What’s 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.",
|
||||
"Whisper (Local)": "Whisper (Local)",
|
||||
"Workspace": "Espace de travail",
|
||||
"Write a prompt suggestion (e.g. Who are you?)": "Écrivez un 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é]",
|
||||
"Yesterday": "hier",
|
||||
"Workspace": "Espace de Travail",
|
||||
"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 qui résume [sujet ou mot-clé]",
|
||||
"Yesterday": "Hier",
|
||||
"You": "Vous",
|
||||
"You have no archived conversations.": "Vous n'avez aucune conversation archivée.",
|
||||
"You have shared this chat": "Vous avez partagé cette conversation.",
|
||||
"You're a helpful assistant.": "Vous êtes un assistant utile",
|
||||
"You cannot clone a base model": "Vous ne pouvez pas cloner un modèle de base",
|
||||
"You have no archived conversations.": "Vous n'avez pas de conversations archivées",
|
||||
"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é.",
|
||||
"Youtube": "Youtube",
|
||||
"Youtube Loader Settings": "Paramètres du chargeur de Youtube"
|
||||
"Youtube Loader Settings": "Paramètres du Chargeur YouTube"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(בטא)",
|
||||
"(e.g. `sh webui.sh --api`)": "(למשל `sh webui.sh --api`)",
|
||||
"(latest)": "(האחרון)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} חושב...",
|
||||
"{{user}}'s Chats": "צ'אטים של {{user}}",
|
||||
"{{webUIName}} Backend Required": "נדרש Backend של {{webUIName}}",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "חשבון",
|
||||
"Accurate information": "מידע מדויק",
|
||||
"Add": "הוסף",
|
||||
"Add a model": "הוסף מודל",
|
||||
"Add a model tag name": "הוסף שם תג למודל",
|
||||
"Add a short description about what this modelfile does": "הוסף תיאור קצר על מה שהקובץ מודל עושה",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "הוסף כותרת קצרה לפקודה זו",
|
||||
"Add a tag": "הוסף תג",
|
||||
"Add custom prompt": "הוסף פקודה מותאמת אישית",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "לוח בקרה למנהל",
|
||||
"Admin Settings": "הגדרות מנהל",
|
||||
"Advanced Parameters": "פרמטרים מתקדמים",
|
||||
"Advanced Params": "",
|
||||
"all": "הכל",
|
||||
"All Documents": "כל המסמכים",
|
||||
"All Users": "כל המשתמשים",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "מפתח API",
|
||||
"API Key created.": "מפתח API נוצר.",
|
||||
"API keys": "מפתחות API",
|
||||
"API RPM": "RPM של API",
|
||||
"April": "אפריל",
|
||||
"Archive": "ארכיון",
|
||||
"Archived Chats": "צ'אטים מאורכבים",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "זמין!",
|
||||
"Back": "חזור",
|
||||
"Bad Response": "תגובה שגויה",
|
||||
"Base Model (From)": "",
|
||||
"before": "לפני",
|
||||
"Being lazy": "להיות עצלן",
|
||||
"Builder Mode": "מצב בונה",
|
||||
"Bypass SSL verification for Websites": "עקוף אימות SSL עבור אתרים",
|
||||
"Cancel": "בטל",
|
||||
"Categories": "קטגוריות",
|
||||
"Capabilities": "",
|
||||
"Change Password": "שנה סיסמה",
|
||||
"Chat": "צ'אט",
|
||||
"Chat Bubble UI": "UI של תיבת הדיבור",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "ציטוט",
|
||||
"Click here for help.": "לחץ כאן לעזרה.",
|
||||
"Click here to": "לחץ כאן כדי",
|
||||
"Click here to check other modelfiles.": "לחץ כאן לבדיקת קבצי מודלים אחרים.",
|
||||
"Click here to select": "לחץ כאן לבחירה",
|
||||
"Click here to select a csv file.": "לחץ כאן לבחירת קובץ csv.",
|
||||
"Click here to select documents.": "לחץ כאן לבחירת מסמכים.",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "העתק קישור",
|
||||
"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 modelfile": "צור קובץ מודל",
|
||||
"Create a model": "",
|
||||
"Create Account": "צור חשבון",
|
||||
"Create new key": "צור מפתח חדש",
|
||||
"Create new secret key": "צור מפתח סודי חדש",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "המודל הנוכחי",
|
||||
"Current Password": "הסיסמה הנוכחית",
|
||||
"Custom": "מותאם אישית",
|
||||
"Customize Ollama models for a specific purpose": "התאמה אישית של מודלים של Ollama למטרה מסוימת",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "כהה",
|
||||
"Dashboard": "לוח בקרה",
|
||||
"Database": "מסד נתונים",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "מחק",
|
||||
"Delete": "מחק",
|
||||
"Delete a model": "מחק מודל",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "מחק צ'אט",
|
||||
"Delete Chat": "מחק צ'אט",
|
||||
"Delete Chats": "מחק צ'אטים",
|
||||
"delete this link": "מחק את הקישור הזה",
|
||||
"Delete User": "מחק משתמש",
|
||||
"Deleted {{deleteModelTag}}": "נמחק {{deleteModelTag}}",
|
||||
"Deleted {{tagName}}": "נמחק {{tagName}}",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "תיאור",
|
||||
"Didn't fully follow instructions": "לא עקב אחרי ההוראות באופן מלא",
|
||||
"Disabled": "מושבת",
|
||||
"Discover a modelfile": "גלה קובץ מודל",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "גלה פקודה",
|
||||
"Discover, download, and explore custom prompts": "גלה, הורד, וחקור פקודות מותאמות אישית",
|
||||
"Discover, download, and explore model presets": "גלה, הורד, וחקור הגדרות מודל מוגדרות מראש",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "הזן גודל נתונים",
|
||||
"Enter Image Size (e.g. 512x512)": "הזן גודל תמונה (למשל 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "הזן מספר שלבים (למשל 50)",
|
||||
"Enter Score": "הזן ציון",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "ייצוא כל הצ'אטים (כל המשתמשים)",
|
||||
"Export Chats": "ייצוא צ'אטים",
|
||||
"Export Documents Mapping": "ייצוא מיפוי מסמכים",
|
||||
"Export Modelfiles": "ייצוא קבצי מודלים",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "ייצוא פקודות",
|
||||
"Failed to create API Key.": "יצירת מפתח API נכשלה.",
|
||||
"Failed to read clipboard contents": "קריאת תוכן הלוח נכשלה",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "מיקוד הקלט לצ'אט",
|
||||
"Followed instructions perfectly": "עקב אחר ההוראות במושלמות",
|
||||
"Format your variables using square brackets like this:": "עצב את המשתנים שלך באמצעות סוגריים מרובעים כך:",
|
||||
"From (Base Model)": "מ (מודל בסיס)",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "מצב מסך מלא",
|
||||
"General": "כללי",
|
||||
"General Settings": "הגדרות כלליות",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "שלום, {{name}}",
|
||||
"Help": "עזרה",
|
||||
"Hide": "הסתר",
|
||||
"Hide Additional Params": "הסתר פרמטרים נוספים",
|
||||
"How can I help you today?": "כיצד אוכל לעזור לך היום?",
|
||||
"Hybrid Search": "חיפוש היברידי",
|
||||
"Image Generation (Experimental)": "יצירת תמונות (ניסיוני)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "תמונות",
|
||||
"Import Chats": "יבוא צ'אטים",
|
||||
"Import Documents Mapping": "יבוא מיפוי מסמכים",
|
||||
"Import Modelfiles": "יבוא קבצי מודלים",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "יבוא פקודות",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "כלול את הדגל `--api` בעת הרצת stable-diffusion-webui",
|
||||
"Input commands": "פקודות קלט",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "ינואר",
|
||||
"join our Discord for help.": "הצטרף ל-Discord שלנו לעזרה.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "יולי",
|
||||
"June": "יוני",
|
||||
"JWT Expiration": "תפוגת JWT",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "נוצר על ידי קהילת OpenWebUI",
|
||||
"Make sure to enclose them with": "ודא להקיף אותם עם",
|
||||
"Manage LiteLLM Models": "נהל מודלים של LiteLLM",
|
||||
"Manage Models": "נהל מודלים",
|
||||
"Manage Ollama Models": "נהל מודלים של Ollama",
|
||||
"March": "מרץ",
|
||||
"Max Tokens": "מקסימום טוקנים",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "ניתן להוריד מקסימום 3 מודלים בו זמנית. אנא נסה שוב מאוחר יותר.",
|
||||
"May": "מאי",
|
||||
"Memories accessible by LLMs will be shown here.": "מזכירים נגישים על ידי LLMs יוצגו כאן.",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "המודל '{{modelName}}' הורד בהצלחה.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "המודל '{{modelTag}}' כבר בתור להורדה.",
|
||||
"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 Name": "שם המודל",
|
||||
"Model ID": "",
|
||||
"Model not selected": "לא נבחר מודל",
|
||||
"Model Tag Name": "שם תג המודל",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "רישום לבן של מודלים",
|
||||
"Model(s) Whitelisted": "מודלים שנכללו ברשימה הלבנה",
|
||||
"Modelfile": "קובץ מודל",
|
||||
"Modelfile Advanced Settings": "הגדרות מתקדמות לקובץ מודל",
|
||||
"Modelfile Content": "תוכן קובץ מודל",
|
||||
"Modelfiles": "קבצי מודל",
|
||||
"Models": "מודלים",
|
||||
"More": "עוד",
|
||||
"Name": "שם",
|
||||
"Name Tag": "תג שם",
|
||||
"Name your modelfile": "תן שם לקובץ המודל שלך",
|
||||
"Name your model": "",
|
||||
"New Chat": "צ'אט חדש",
|
||||
"New Password": "סיסמה חדשה",
|
||||
"No results found": "לא נמצאו תוצאות",
|
||||
"No source available": "אין מקור זמין",
|
||||
"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.": "הערה: אם תקבע ציון מינימלי, החיפוש יחזיר רק מסמכים עם ציון שגבוה או שווה לציון המינימלי.",
|
||||
"Notifications": "התראות",
|
||||
"November": "נובמבר",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "או",
|
||||
"Other": "אחר",
|
||||
"Overview": "סקירה כללית",
|
||||
"Parameters": "פרמטרים",
|
||||
"Password": "סיסמה",
|
||||
"PDF document (.pdf)": "מסמך PDF (.pdf)",
|
||||
"PDF Extract Images (OCR)": "חילוץ תמונות מ-PDF (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "פקודות",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "משוך \"{{searchValue}}\" מ-Ollama.com",
|
||||
"Pull a model from Ollama.com": "משוך מודל מ-Ollama.com",
|
||||
"Pull Progress": "משוך התקדמות",
|
||||
"Query Params": "פרמטרי שאילתה",
|
||||
"RAG Template": "תבנית RAG",
|
||||
"Raw Format": "פורמט גולמי",
|
||||
"Read Aloud": "קרא בקול",
|
||||
"Record voice": "הקלט קול",
|
||||
"Redirecting you to OpenWebUI Community": "מפנה אותך לקהילת OpenWebUI",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "הסר מודל",
|
||||
"Rename": "שנה שם",
|
||||
"Repeat Last N": "חזור על ה-N האחרונים",
|
||||
"Repeat Penalty": "עונש חזרה",
|
||||
"Request Mode": "מצב בקשה",
|
||||
"Reranking Model": "מודל דירוג מחדש",
|
||||
"Reranking model disabled": "מודל דירוג מחדש מושבת",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "חפש",
|
||||
"Search a model": "חפש מודל",
|
||||
"Search Documents": "חפש מסמכים",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "חפש פקודות",
|
||||
"See readme.md for instructions": "ראה את readme.md להוראות",
|
||||
"See what's new": "ראה מה חדש",
|
||||
"Seed": "זרע",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "בחר מצב",
|
||||
"Select a model": "בחר מודל",
|
||||
"Select an Ollama instance": "בחר מופע של Ollama",
|
||||
"Select model": "בחר מודל",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "שלח",
|
||||
"Send a Message": "שלח הודעה",
|
||||
"Send message": "שלח הודעה",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "שתף לקהילת OpenWebUI",
|
||||
"short-summary": "סיכום קצר",
|
||||
"Show": "הצג",
|
||||
"Show Additional Params": "הצג פרמטרים נוספים",
|
||||
"Show shortcuts": "הצג קיצורי דרך",
|
||||
"Showcased creativity": "הצגת יצירתיות",
|
||||
"sidebar": "סרגל צד",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "הצלחה",
|
||||
"Successfully updated.": "עדכון הצלחה.",
|
||||
"Suggested": "מומלץ",
|
||||
"Sync All": "סנכרן הכל",
|
||||
"System": "מערכת",
|
||||
"System Prompt": "תגובת מערכת",
|
||||
"Tags": "תגיות",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"Write a summary in 50 words that summarizes [topic or keyword].": "כתוב סיכום ב-50 מילים שמסכם [נושא או מילת מפתח].",
|
||||
"Yesterday": "אתמול",
|
||||
"You": "אתה",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "אין לך שיחות בארכיון.",
|
||||
"You have shared this chat": "שיתפת את השיחה הזו",
|
||||
"You're a helpful assistant.": "אתה עוזר מועיל.",
|
||||
|
|
|
|||
|
|
@ -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}} सोच रहा है...",
|
||||
"{{user}}'s Chats": "{{user}} की चैट",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} बैकएंड आवश्यक",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "खाता",
|
||||
"Accurate information": "सटीक जानकारी",
|
||||
"Add": "जोड़ें",
|
||||
"Add a model": "एक मॉडल जोड़ें",
|
||||
"Add a model tag name": "एक मॉडल टैग नाम जोड़ें",
|
||||
"Add a short description about what this modelfile does": "यह मॉडलफ़ाइल क्या करती है इसके बारे में एक संक्षिप्त विवरण जोड़ें",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "इस संकेत के लिए एक संक्षिप्त शीर्षक जोड़ें",
|
||||
"Add a tag": "एक टैग जोड़े",
|
||||
"Add custom prompt": "अनुकूल संकेत जोड़ें",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "व्यवस्थापक पैनल",
|
||||
"Admin Settings": "व्यवस्थापक सेटिंग्स",
|
||||
"Advanced Parameters": "उन्नत पैरामीटर",
|
||||
"Advanced Params": "",
|
||||
"all": "सभी",
|
||||
"All Documents": "सभी डॉक्यूमेंट्स",
|
||||
"All Users": "सभी उपयोगकर्ता",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "एपीआई कुंजी",
|
||||
"API Key created.": "एपीआई कुंजी बनाई गई",
|
||||
"API keys": "एपीआई कुंजियाँ",
|
||||
"API RPM": "एपीआई रीपीएम",
|
||||
"April": "अप्रैल",
|
||||
"Archive": "पुरालेख",
|
||||
"Archived Chats": "संग्रहीत चैट",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "उपलब्ध!",
|
||||
"Back": "पीछे",
|
||||
"Bad Response": "ख़राब प्रतिक्रिया",
|
||||
"Base Model (From)": "",
|
||||
"before": "पहले",
|
||||
"Being lazy": "आलसी होना",
|
||||
"Builder Mode": "बिल्डर मोड",
|
||||
"Bypass SSL verification for Websites": "वेबसाइटों के लिए SSL सुनिश्चिती को छोड़ें",
|
||||
"Cancel": "रद्द करें",
|
||||
"Categories": "श्रेणियाँ",
|
||||
"Capabilities": "",
|
||||
"Change Password": "पासवर्ड बदलें",
|
||||
"Chat": "चैट करें",
|
||||
"Chat Bubble UI": "चैट बॉली",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "उद्धरण",
|
||||
"Click here for help.": "सहायता के लिए यहां क्लिक करें।",
|
||||
"Click here to": "यहां क्लिक करें",
|
||||
"Click here to check other modelfiles.": "अन्य मॉडल फ़ाइलों की जांच के लिए यहां क्लिक करें।",
|
||||
"Click here to select": "चयन करने के लिए यहां क्लिक करें।",
|
||||
"Click here to select a csv file.": "सीएसवी फ़ाइल का चयन करने के लिए यहां क्लिक करें।",
|
||||
"Click here to select documents.": "दस्तावेज़ चुनने के लिए यहां क्लिक करें।",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "लिंक को कॉपी करें",
|
||||
"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 modelfile": "एक मॉडल फ़ाइल बनाएं",
|
||||
"Create a model": "",
|
||||
"Create Account": "खाता बनाएं",
|
||||
"Create new key": "नया क्रिप्टोग्राफिक क्षेत्र बनाएं",
|
||||
"Create new secret key": "नया क्रिप्टोग्राफिक क्षेत्र बनाएं",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "वर्तमान मॉडल",
|
||||
"Current Password": "वर्तमान पासवर्ड",
|
||||
"Custom": "कस्टम संस्करण",
|
||||
"Customize Ollama models for a specific purpose": "किसी विशिष्ट उद्देश्य के लिए ओलामा मॉडल को अनुकूलित करें",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "डार्क",
|
||||
"Dashboard": "डैशबोर्ड",
|
||||
"Database": "डेटाबेस",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "डिलीट",
|
||||
"Delete": "डिलीट",
|
||||
"Delete a model": "एक मॉडल हटाएँ",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "चैट हटाएं",
|
||||
"Delete Chat": "चैट हटाएं",
|
||||
"Delete Chats": "चैट हटाएं",
|
||||
"delete this link": "इस लिंक को हटाएं",
|
||||
"Delete User": "उपभोक्ता मिटायें",
|
||||
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} हटा दिया गया",
|
||||
"Deleted {{tagName}}": "{{tagName}} हटा दिया गया",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "विवरण",
|
||||
"Didn't fully follow instructions": "निर्देशों का पूरी तरह से पालन नहीं किया",
|
||||
"Disabled": "अक्षरण",
|
||||
"Discover a modelfile": "मॉडल फ़ाइल खोजें",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "प्रॉम्प्ट खोजें",
|
||||
"Discover, download, and explore custom prompts": "कस्टम प्रॉम्प्ट को खोजें, डाउनलोड करें और एक्सप्लोर करें",
|
||||
"Discover, download, and explore model presets": "मॉडल प्रीसेट खोजें, डाउनलोड करें और एक्सप्लोर करें",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "खंड आकार दर्ज करें",
|
||||
"Enter Image Size (e.g. 512x512)": "छवि का आकार दर्ज करें (उदा. 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "चरणों की संख्या दर्ज करें (उदा. 50)",
|
||||
"Enter Score": "स्कोर दर्ज करें",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "सभी चैट निर्यात करें (सभी उपयोगकर्ताओं की)",
|
||||
"Export Chats": "चैट निर्यात करें",
|
||||
"Export Documents Mapping": "निर्यात दस्तावेज़ मैपिंग",
|
||||
"Export Modelfiles": "मॉडल फ़ाइलें निर्यात करें",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "प्रॉम्प्ट निर्यात करें",
|
||||
"Failed to create API Key.": "एपीआई कुंजी बनाने में विफल.",
|
||||
"Failed to read clipboard contents": "क्लिपबोर्ड सामग्री पढ़ने में विफल",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "चैट इनपुट पर फ़ोकस करें",
|
||||
"Followed instructions perfectly": "निर्देशों का पूर्णतः पालन किया",
|
||||
"Format your variables using square brackets like this:": "वर्गाकार कोष्ठकों का उपयोग करके अपने चरों को इस प्रकार प्रारूपित करें :",
|
||||
"From (Base Model)": "(बेस मॉडल) से ",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "पूर्ण स्क्रीन मोड",
|
||||
"General": "सामान्य",
|
||||
"General Settings": "सामान्य सेटिंग्स",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "नमस्ते, {{name}}",
|
||||
"Help": "मदद",
|
||||
"Hide": "छुपाएं",
|
||||
"Hide Additional Params": "अतिरिक्त पैरामीटर छिपाएँ",
|
||||
"How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?",
|
||||
"Hybrid Search": "हाइब्रिड खोज",
|
||||
"Image Generation (Experimental)": "छवि निर्माण (प्रायोगिक)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "इमेजिस",
|
||||
"Import Chats": "चैट आयात करें",
|
||||
"Import Documents Mapping": "दस्तावेज़ मैपिंग आयात करें",
|
||||
"Import Modelfiles": "मॉडल फ़ाइलें आयात करें",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "प्रॉम्प्ट आयात करें",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui चलाते समय `--api` ध्वज शामिल करें",
|
||||
"Input commands": "इनपुट क命",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "जनवरी",
|
||||
"join our Discord for help.": "मदद के लिए हमारे डिस्कोर्ड में शामिल हों।",
|
||||
"JSON": "ज्ञान प्रकार",
|
||||
"JSON Preview": "",
|
||||
"July": "जुलाई",
|
||||
"June": "जुन",
|
||||
"JWT Expiration": "JWT समाप्ति",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "OpenWebUI समुदाय द्वारा निर्मित",
|
||||
"Make sure to enclose them with": "उन्हें संलग्न करना सुनिश्चित करें",
|
||||
"Manage LiteLLM Models": "LiteLLM मॉडल प्रबंधित करें",
|
||||
"Manage Models": "मॉडल प्रबंधित करें",
|
||||
"Manage Ollama Models": "Ollama मॉडल प्रबंधित करें",
|
||||
"March": "मार्च",
|
||||
"Max Tokens": "अधिकतम टोकन",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "अधिकतम 3 मॉडल एक साथ डाउनलोड किये जा सकते हैं। कृपया बाद में पुन: प्रयास करें।",
|
||||
"May": "मेई",
|
||||
"Memories accessible by LLMs will be shown here.": "एलएलएम द्वारा सुलभ यादें यहां दिखाई जाएंगी।",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "मॉडल '{{modelName}}' सफलतापूर्वक डाउनलोड हो गया है।",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "मॉडल '{{modelTag}}' पहले से ही डाउनलोड करने के लिए कतार में है।",
|
||||
"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 Name": "मॉडल नाम",
|
||||
"Model ID": "",
|
||||
"Model not selected": "मॉडल चयनित नहीं है",
|
||||
"Model Tag Name": "मॉडल टैग नाम",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "मॉडल श्वेतसूचीकरण करें",
|
||||
"Model(s) Whitelisted": "मॉडल श्वेतसूची में है",
|
||||
"Modelfile": "मॉडल फ़ाइल",
|
||||
"Modelfile Advanced Settings": "मॉडल फ़ाइल उन्नत सेटिंग्स",
|
||||
"Modelfile Content": "मॉडल फ़ाइल सामग्री",
|
||||
"Modelfiles": "मॉडल फ़ाइलें",
|
||||
"Models": "सभी मॉडल",
|
||||
"More": "और..",
|
||||
"Name": "नाम",
|
||||
"Name Tag": "नाम टैग",
|
||||
"Name your modelfile": "अपनी मॉडलफ़ाइल को नाम दें",
|
||||
"Name your model": "",
|
||||
"New Chat": "नई चैट",
|
||||
"New Password": "नया पासवर्ड",
|
||||
"No results found": "कोई परिणाम नहीं मिला",
|
||||
"No source available": "कोई स्रोत उपलब्ध नहीं है",
|
||||
"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.": "ध्यान दें: यदि आप न्यूनतम स्कोर निर्धारित करते हैं, तो खोज केवल न्यूनतम स्कोर से अधिक या उसके बराबर स्कोर वाले दस्तावेज़ वापस लाएगी।",
|
||||
"Notifications": "सूचनाएं",
|
||||
"November": "नवंबर",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "या",
|
||||
"Other": "अन्य",
|
||||
"Overview": "अवलोकन",
|
||||
"Parameters": "पैरामीटर",
|
||||
"Password": "पासवर्ड",
|
||||
"PDF document (.pdf)": "PDF दस्तावेज़ (.pdf)",
|
||||
"PDF Extract Images (OCR)": "PDF छवियाँ निकालें (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "प्रॉम्प्ट",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "\"{{searchValue}}\" को Ollama.com से खींचें",
|
||||
"Pull a model from Ollama.com": "Ollama.com से एक मॉडल खींचें",
|
||||
"Pull Progress": "प्रगति खींचें",
|
||||
"Query Params": "क्वेरी पैरामीटर",
|
||||
"RAG Template": "RAG टेम्पलेट",
|
||||
"Raw Format": "कच्चा प्रारूप",
|
||||
"Read Aloud": "जोर से पढ़ें",
|
||||
"Record voice": "आवाज रिकॉर्ड करना",
|
||||
"Redirecting you to OpenWebUI Community": "आपको OpenWebUI समुदाय पर पुनर्निर्देशित किया जा रहा है",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "मोडेल हटाएँ",
|
||||
"Rename": "नाम बदलें",
|
||||
"Repeat Last N": "अंतिम N दोहराएँ",
|
||||
"Repeat Penalty": "पुन: दंड",
|
||||
"Request Mode": "अनुरोध मोड",
|
||||
"Reranking Model": "रीरैकिंग मोड",
|
||||
"Reranking model disabled": "पुनर्रैंकिंग मॉडल अक्षम किया गया",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "खोजें",
|
||||
"Search a model": "एक मॉडल खोजें",
|
||||
"Search Documents": "दस्तावेज़ खोजें",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "प्रॉम्प्ट खोजें",
|
||||
"See readme.md for instructions": "निर्देशों के लिए readme.md देखें",
|
||||
"See what's new": "देखें, क्या नया है",
|
||||
"Seed": "सीड्\u200c",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "एक मोड चुनें",
|
||||
"Select a model": "एक मॉडल चुनें",
|
||||
"Select an Ollama instance": "एक Ollama Instance चुनें",
|
||||
"Select model": "मॉडल चुनें",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "भेज",
|
||||
"Send a Message": "एक संदेश भेजो",
|
||||
"Send message": "मेसेज भेजें",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "OpenWebUI समुदाय में साझा करें",
|
||||
"short-summary": "संक्षिप्त सारांश",
|
||||
"Show": "दिखाओ",
|
||||
"Show Additional Params": "अतिरिक्त पैरामीटर दिखाएँ",
|
||||
"Show shortcuts": "शॉर्टकट दिखाएँ",
|
||||
"Showcased creativity": "रचनात्मकता का प्रदर्शन किया",
|
||||
"sidebar": "साइड बार",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "संपन्न",
|
||||
"Successfully updated.": "सफलतापूर्वक उत्परिवर्तित।",
|
||||
"Suggested": "सुझावी",
|
||||
"Sync All": "सभी को सिंक करें",
|
||||
"System": "सिस्टम",
|
||||
"System Prompt": "सिस्टम प्रॉम्प्ट",
|
||||
"Tags": "टैग",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"Write a summary in 50 words that summarizes [topic or keyword].": "50 शब्दों में एक सारांश लिखें जो [विषय या कीवर्ड] का सारांश प्रस्तुत करता हो।",
|
||||
"Yesterday": "कल",
|
||||
"You": "आप",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "आपको कोई अंकित चैट नहीं है।",
|
||||
"You have shared this chat": "आपने इस चैट को शेयर किया है",
|
||||
"You're a helpful assistant.": "आप एक सहायक सहायक हैं",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Beta)",
|
||||
"(e.g. `sh webui.sh --api`)": "(npr. `sh webui.sh --api`)",
|
||||
"(latest)": "(najnovije)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} razmišlja...",
|
||||
"{{user}}'s Chats": "Razgovori korisnika {{user}}",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} Backend je potreban",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Račun",
|
||||
"Accurate information": "Točne informacije",
|
||||
"Add": "Dodaj",
|
||||
"Add a model": "Dodaj model",
|
||||
"Add a model tag name": "Dodaj oznaku modela",
|
||||
"Add a short description about what this modelfile does": "Dodajte kratak opis što ova datoteka modela radi",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "Dodajte kratki naslov za ovaj prompt",
|
||||
"Add a tag": "Dodaj oznaku",
|
||||
"Add custom prompt": "Dodaj prilagođeni prompt",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "Administratorska ploča",
|
||||
"Admin Settings": "Administratorske postavke",
|
||||
"Advanced Parameters": "Napredni parametri",
|
||||
"Advanced Params": "",
|
||||
"all": "sve",
|
||||
"All Documents": "Svi dokumenti",
|
||||
"All Users": "Svi korisnici",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "API ključ",
|
||||
"API Key created.": "API ključ je stvoren.",
|
||||
"API keys": "API ključevi",
|
||||
"API RPM": "API RPM",
|
||||
"April": "Travanj",
|
||||
"Archive": "Arhiva",
|
||||
"Archived Chats": "Arhivirani razgovori",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "dostupno!",
|
||||
"Back": "Natrag",
|
||||
"Bad Response": "Loš odgovor",
|
||||
"Base Model (From)": "",
|
||||
"before": "prije",
|
||||
"Being lazy": "Biti lijen",
|
||||
"Builder Mode": "Način graditelja",
|
||||
"Bypass SSL verification for Websites": "Zaobiđi SSL provjeru za web stranice",
|
||||
"Cancel": "Otkaži",
|
||||
"Categories": "Kategorije",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Promijeni lozinku",
|
||||
"Chat": "Razgovor",
|
||||
"Chat Bubble UI": "Razgovor - Bubble UI",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "Citiranje",
|
||||
"Click here for help.": "Kliknite ovdje za pomoć.",
|
||||
"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 a csv file.": "Kliknite ovdje da odaberete csv datoteku.",
|
||||
"Click here to select documents.": "Kliknite ovdje da odaberete dokumente.",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "Kopiraj vezu",
|
||||
"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 modelfile": "Stvorite datoteku modela",
|
||||
"Create a model": "",
|
||||
"Create Account": "Stvori račun",
|
||||
"Create new key": "Stvori novi ključ",
|
||||
"Create new secret key": "Stvori novi tajni ključ",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "Trenutni model",
|
||||
"Current Password": "Trenutna lozinka",
|
||||
"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",
|
||||
"Dashboard": "Nadzorna ploča",
|
||||
"Database": "Baza podataka",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "izbriši",
|
||||
"Delete": "Izbriši",
|
||||
"Delete a model": "Izbriši model",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Izbriši razgovor",
|
||||
"Delete Chat": "Izbriši razgovor",
|
||||
"Delete Chats": "Izbriši razgovore",
|
||||
"delete this link": "izbriši ovu vezu",
|
||||
"Delete User": "Izbriši korisnika",
|
||||
"Deleted {{deleteModelTag}}": "Izbrisan {{deleteModelTag}}",
|
||||
"Deleted {{tagName}}": "Izbrisan {{tagName}}",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Opis",
|
||||
"Didn't fully follow instructions": "Nije u potpunosti slijedio upute",
|
||||
"Disabled": "Onemogućeno",
|
||||
"Discover a modelfile": "Otkrijte datoteku modela",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "Otkrijte prompt",
|
||||
"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",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "Unesite veličinu dijela",
|
||||
"Enter Image Size (e.g. 512x512)": "Unesite veličinu slike (npr. 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "Unesite broj koraka (npr. 50)",
|
||||
"Enter Score": "Unesite ocjenu",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "Izvoz svih razgovora (svi korisnici)",
|
||||
"Export Chats": "Izvoz razgovora",
|
||||
"Export Documents Mapping": "Izvoz mapiranja dokumenata",
|
||||
"Export Modelfiles": "Izvoz datoteka modela",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Izvoz prompta",
|
||||
"Failed to create API Key.": "Neuspješno stvaranje API ključa.",
|
||||
"Failed to read clipboard contents": "Neuspješno čitanje sadržaja međuspremnika",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "Fokusiraj unos razgovora",
|
||||
"Followed instructions perfectly": "Savršeno slijedio upute",
|
||||
"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",
|
||||
"General": "Općenito",
|
||||
"General Settings": "Opće postavke",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Bok, {{name}}",
|
||||
"Help": "Pomoć",
|
||||
"Hide": "Sakrij",
|
||||
"Hide Additional Params": "Sakrij dodatne parametre",
|
||||
"How can I help you today?": "Kako vam mogu pomoći danas?",
|
||||
"Hybrid Search": "Hibridna pretraga",
|
||||
"Image Generation (Experimental)": "Generiranje slika (eksperimentalno)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Slike",
|
||||
"Import Chats": "Uvoz razgovora",
|
||||
"Import Documents Mapping": "Uvoz mapiranja dokumenata",
|
||||
"Import Modelfiles": "Uvoz datoteka modela",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "Uvoz prompta",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "Uključite zastavicu `--api` prilikom pokretanja stable-diffusion-webui",
|
||||
"Input commands": "Unos naredbi",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "Siječanj",
|
||||
"join our Discord for help.": "pridružite se našem Discordu za pomoć.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "Srpanj",
|
||||
"June": "Lipanj",
|
||||
"JWT Expiration": "Isticanje JWT-a",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "Izradio OpenWebUI Community",
|
||||
"Make sure to enclose them with": "Provjerite da ih zatvorite s",
|
||||
"Manage LiteLLM Models": "Upravljajte LiteLLM modelima",
|
||||
"Manage Models": "Upravljanje modelima",
|
||||
"Manage Ollama Models": "Upravljanje Ollama modelima",
|
||||
"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.",
|
||||
"May": "Svibanj",
|
||||
"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 '{{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 {{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 Name": "Naziv modela",
|
||||
"Model ID": "",
|
||||
"Model not selected": "Model nije odabran",
|
||||
"Model Tag Name": "Naziv oznake modela",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "Bijela lista modela",
|
||||
"Model(s) Whitelisted": "Model(i) na bijeloj listi",
|
||||
"Modelfile": "Datoteka modela",
|
||||
"Modelfile Advanced Settings": "Napredne postavke datoteke modela",
|
||||
"Modelfile Content": "Sadržaj datoteke modela",
|
||||
"Modelfiles": "Datoteke modela",
|
||||
"Models": "Modeli",
|
||||
"More": "Više",
|
||||
"Name": "Ime",
|
||||
"Name Tag": "Naziv oznake",
|
||||
"Name your modelfile": "Nazovite svoju datoteku modela",
|
||||
"Name your model": "",
|
||||
"New Chat": "Novi razgovor",
|
||||
"New Password": "Nova lozinka",
|
||||
"No results found": "Nema rezultata",
|
||||
"No source available": "Nema dostupnog izvora",
|
||||
"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.",
|
||||
"Notifications": "Obavijesti",
|
||||
"November": "Studeni",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "ili",
|
||||
"Other": "Ostalo",
|
||||
"Overview": "Pregled",
|
||||
"Parameters": "Parametri",
|
||||
"Password": "Lozinka",
|
||||
"PDF document (.pdf)": "PDF dokument (.pdf)",
|
||||
"PDF Extract Images (OCR)": "PDF izdvajanje slika (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Prompti",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Povucite \"{{searchValue}}\" s Ollama.com",
|
||||
"Pull a model from Ollama.com": "Povucite model s Ollama.com",
|
||||
"Pull Progress": "Napredak povlačenja",
|
||||
"Query Params": "Parametri upita",
|
||||
"RAG Template": "RAG predložak",
|
||||
"Raw Format": "Neobrađeni format",
|
||||
"Read Aloud": "Čitaj naglas",
|
||||
"Record voice": "Snimanje glasa",
|
||||
"Redirecting you to OpenWebUI Community": "Preusmjeravanje na OpenWebUI zajednicu",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "Ukloni model",
|
||||
"Rename": "Preimenuj",
|
||||
"Repeat Last N": "Ponovi zadnjih N",
|
||||
"Repeat Penalty": "Kazna za ponavljanje",
|
||||
"Request Mode": "Način zahtjeva",
|
||||
"Reranking Model": "Model za ponovno rangiranje",
|
||||
"Reranking model disabled": "Model za ponovno rangiranje onemogućen",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Pretraga",
|
||||
"Search a model": "Pretraži model",
|
||||
"Search Documents": "Pretraga dokumenata",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Pretraga prompta",
|
||||
"See readme.md for instructions": "Pogledajte readme.md za upute",
|
||||
"See what's new": "Pogledajte što je novo",
|
||||
"Seed": "Sjeme",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Odaberite način",
|
||||
"Select a model": "Odaberite model",
|
||||
"Select an Ollama instance": "Odaberite Ollama instancu",
|
||||
"Select model": "Odaberite model",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "Pošalji",
|
||||
"Send a Message": "Pošaljite poruku",
|
||||
"Send message": "Pošalji poruku",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Podijeli u OpenWebUI zajednici",
|
||||
"short-summary": "kratki sažetak",
|
||||
"Show": "Pokaži",
|
||||
"Show Additional Params": "Pokaži dodatne parametre",
|
||||
"Show shortcuts": "Pokaži prečace",
|
||||
"Showcased creativity": "Prikazana kreativnost",
|
||||
"sidebar": "bočna traka",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Uspjeh",
|
||||
"Successfully updated.": "Uspješno ažurirano.",
|
||||
"Suggested": "Predloženo",
|
||||
"Sync All": "Sinkroniziraj sve",
|
||||
"System": "Sustav",
|
||||
"System Prompt": "Sistemski prompt",
|
||||
"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č].",
|
||||
"Yesterday": "Jučer",
|
||||
"You": "Vi",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "Nemate arhiviranih razgovora.",
|
||||
"You have shared this chat": "Podijelili ste ovaj razgovor",
|
||||
"You're a helpful assistant.": "Vi ste korisni asistent.",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(Beta)",
|
||||
"(e.g. `sh webui.sh --api`)": "(p.e. `sh webui.sh --api`)",
|
||||
"(latest)": "(ultima)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} sta pensando...",
|
||||
"{{user}}'s Chats": "{{user}} Chat",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} Backend richiesto",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "Account",
|
||||
"Accurate information": "Informazioni accurate",
|
||||
"Add": "Aggiungi",
|
||||
"Add a model": "Aggiungi un modello",
|
||||
"Add a model tag name": "Aggiungi un nome tag del modello",
|
||||
"Add a short description about what this modelfile does": "Aggiungi una breve descrizione di ciò che fa questo file modello",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "Aggiungi un titolo breve per questo prompt",
|
||||
"Add a tag": "Aggiungi un tag",
|
||||
"Add custom prompt": "Aggiungi un prompt custom",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "Pannello di amministrazione",
|
||||
"Admin Settings": "Impostazioni amministratore",
|
||||
"Advanced Parameters": "Parametri avanzati",
|
||||
"Advanced Params": "",
|
||||
"all": "tutti",
|
||||
"All Documents": "Tutti i documenti",
|
||||
"All Users": "Tutti gli utenti",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "Chiave API",
|
||||
"API Key created.": "Chiave API creata.",
|
||||
"API keys": "Chiavi API",
|
||||
"API RPM": "API RPM",
|
||||
"April": "Aprile",
|
||||
"Archive": "Archivio",
|
||||
"Archived Chats": "Chat archiviate",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "disponibile!",
|
||||
"Back": "Indietro",
|
||||
"Bad Response": "Risposta non valida",
|
||||
"Base Model (From)": "",
|
||||
"before": "prima",
|
||||
"Being lazy": "Essere pigri",
|
||||
"Builder Mode": "Modalità costruttore",
|
||||
"Bypass SSL verification for Websites": "Aggira la verifica SSL per i siti web",
|
||||
"Cancel": "Annulla",
|
||||
"Categories": "Categorie",
|
||||
"Capabilities": "",
|
||||
"Change Password": "Cambia password",
|
||||
"Chat": "Chat",
|
||||
"Chat Bubble UI": "UI bolle chat",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "Citazione",
|
||||
"Click here for help.": "Clicca qui per aiuto.",
|
||||
"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 a csv file.": "Clicca qui per selezionare un file csv.",
|
||||
"Click here to select documents.": "Clicca qui per selezionare i documenti.",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "Copia link",
|
||||
"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 modelfile": "Crea un file modello",
|
||||
"Create a model": "",
|
||||
"Create Account": "Crea account",
|
||||
"Create new key": "Crea nuova chiave",
|
||||
"Create new secret key": "Crea nuova chiave segreta",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "Modello corrente",
|
||||
"Current Password": "Password corrente",
|
||||
"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",
|
||||
"Dashboard": "Pannello di controllo",
|
||||
"Database": "Database",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "elimina",
|
||||
"Delete": "Elimina",
|
||||
"Delete a model": "Elimina un modello",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "Elimina chat",
|
||||
"Delete Chat": "Elimina chat",
|
||||
"Delete Chats": "Elimina le chat",
|
||||
"delete this link": "elimina questo link",
|
||||
"Delete User": "Elimina utente",
|
||||
"Deleted {{deleteModelTag}}": "Eliminato {{deleteModelTag}}",
|
||||
"Deleted {{tagName}}": "Eliminato {{tagName}}",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "Descrizione",
|
||||
"Didn't fully follow instructions": "Non ha seguito completamente le istruzioni",
|
||||
"Disabled": "Disabilitato",
|
||||
"Discover a modelfile": "Scopri un file modello",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "Scopri un prompt",
|
||||
"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",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "Inserisci la dimensione chunk",
|
||||
"Enter Image Size (e.g. 512x512)": "Inserisci la dimensione dell'immagine (ad esempio 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "Inserisci il numero di passaggi (ad esempio 50)",
|
||||
"Enter Score": "Inserisci il punteggio",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "Esporta tutte le chat (tutti gli utenti)",
|
||||
"Export Chats": "Esporta chat",
|
||||
"Export Documents Mapping": "Esporta mappatura documenti",
|
||||
"Export Modelfiles": "Esporta file modello",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "Esporta prompt",
|
||||
"Failed to create API Key.": "Impossibile creare la chiave API.",
|
||||
"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",
|
||||
"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:",
|
||||
"From (Base Model)": "Da (modello base)",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "Modalità a schermo intero",
|
||||
"General": "Generale",
|
||||
"General Settings": "Impostazioni generali",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "Ciao, {{name}}",
|
||||
"Help": "Aiuto",
|
||||
"Hide": "Nascondi",
|
||||
"Hide Additional Params": "Nascondi parametri aggiuntivi",
|
||||
"How can I help you today?": "Come posso aiutarti oggi?",
|
||||
"Hybrid Search": "Ricerca ibrida",
|
||||
"Image Generation (Experimental)": "Generazione di immagini (sperimentale)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "Immagini",
|
||||
"Import Chats": "Importa chat",
|
||||
"Import Documents Mapping": "Importa mappatura documenti",
|
||||
"Import Modelfiles": "Importa file modello",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "Importa prompt",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "Includi il flag `--api` quando esegui stable-diffusion-webui",
|
||||
"Input commands": "Comandi di input",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "Gennaio",
|
||||
"join our Discord for help.": "unisciti al nostro Discord per ricevere aiuto.",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "Luglio",
|
||||
"June": "Giugno",
|
||||
"JWT Expiration": "Scadenza JWT",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "Realizzato dalla comunità OpenWebUI",
|
||||
"Make sure to enclose them with": "Assicurati di racchiuderli con",
|
||||
"Manage LiteLLM Models": "Gestisci modelli LiteLLM",
|
||||
"Manage Models": "Gestisci modelli",
|
||||
"Manage Ollama Models": "Gestisci modelli Ollama",
|
||||
"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.",
|
||||
"May": "Maggio",
|
||||
"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 '{{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 {{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 Name": "Nome modello",
|
||||
"Model ID": "",
|
||||
"Model not selected": "Modello non selezionato",
|
||||
"Model Tag Name": "Nome tag del modello",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "Whitelisting del modello",
|
||||
"Model(s) Whitelisted": "Modello/i in whitelist",
|
||||
"Modelfile": "File modello",
|
||||
"Modelfile Advanced Settings": "Impostazioni avanzate del file modello",
|
||||
"Modelfile Content": "Contenuto del file modello",
|
||||
"Modelfiles": "File modello",
|
||||
"Models": "Modelli",
|
||||
"More": "Altro",
|
||||
"Name": "Nome",
|
||||
"Name Tag": "Nome tag",
|
||||
"Name your modelfile": "Assegna un nome al tuo file modello",
|
||||
"Name your model": "",
|
||||
"New Chat": "Nuova chat",
|
||||
"New Password": "Nuova password",
|
||||
"No results found": "Nessun risultato trovato",
|
||||
"No source available": "Nessuna fonte disponibile",
|
||||
"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.",
|
||||
"Notifications": "Notifiche desktop",
|
||||
"November": "Novembre",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "o",
|
||||
"Other": "Altro",
|
||||
"Overview": "Panoramica",
|
||||
"Parameters": "Parametri",
|
||||
"Password": "Password",
|
||||
"PDF document (.pdf)": "Documento PDF (.pdf)",
|
||||
"PDF Extract Images (OCR)": "Estrazione immagini PDF (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "Prompt",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Estrai \"{{searchValue}}\" da Ollama.com",
|
||||
"Pull a model from Ollama.com": "Estrai un modello da Ollama.com",
|
||||
"Pull Progress": "Avanzamento estrazione",
|
||||
"Query Params": "Parametri query",
|
||||
"RAG Template": "Modello RAG",
|
||||
"Raw Format": "Formato raw",
|
||||
"Read Aloud": "Leggi ad alta voce",
|
||||
"Record voice": "Registra voce",
|
||||
"Redirecting you to OpenWebUI Community": "Reindirizzamento alla comunità OpenWebUI",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "Rimuovi modello",
|
||||
"Rename": "Rinomina",
|
||||
"Repeat Last N": "Ripeti ultimi N",
|
||||
"Repeat Penalty": "Penalità di ripetizione",
|
||||
"Request Mode": "Modalità richiesta",
|
||||
"Reranking Model": "Modello di riclassificazione",
|
||||
"Reranking model disabled": "Modello di riclassificazione disabilitato",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "Cerca",
|
||||
"Search a model": "Cerca un modello",
|
||||
"Search Documents": "Cerca documenti",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "Cerca prompt",
|
||||
"See readme.md for instructions": "Vedi readme.md per le istruzioni",
|
||||
"See what's new": "Guarda le novità",
|
||||
"Seed": "Seme",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "Seleziona una modalità",
|
||||
"Select a model": "Seleziona un modello",
|
||||
"Select an Ollama instance": "Seleziona un'istanza Ollama",
|
||||
"Select model": "Seleziona modello",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "Invia",
|
||||
"Send a Message": "Invia un messaggio",
|
||||
"Send message": "Invia messaggio",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "Condividi con la comunità OpenWebUI",
|
||||
"short-summary": "riassunto-breve",
|
||||
"Show": "Mostra",
|
||||
"Show Additional Params": "Mostra parametri aggiuntivi",
|
||||
"Show shortcuts": "Mostra",
|
||||
"Showcased creativity": "Creatività messa in mostra",
|
||||
"sidebar": "barra laterale",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "Successo",
|
||||
"Successfully updated.": "Aggiornato con successo.",
|
||||
"Suggested": "Suggerito",
|
||||
"Sync All": "Sincronizza tutto",
|
||||
"System": "Sistema",
|
||||
"System Prompt": "Prompt di sistema",
|
||||
"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].",
|
||||
"Yesterday": "Ieri",
|
||||
"You": "Tu",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "Non hai conversazioni archiviate.",
|
||||
"You have shared this chat": "Hai condiviso questa chat",
|
||||
"You're a helpful assistant.": "Sei un assistente utile.",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"(Beta)": "(ベータ版)",
|
||||
"(e.g. `sh webui.sh --api`)": "(例: `sh webui.sh --api`)",
|
||||
"(latest)": "(最新)",
|
||||
"{{ models }}": "",
|
||||
"{{ owner }}: You cannot delete a base model": "",
|
||||
"{{modelName}} is thinking...": "{{modelName}} は思考中です...",
|
||||
"{{user}}'s Chats": "{{user}} のチャット",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}} バックエンドが必要です",
|
||||
|
|
@ -11,9 +13,8 @@
|
|||
"Account": "アカウント",
|
||||
"Accurate information": "情報の正確性",
|
||||
"Add": "追加",
|
||||
"Add a model": "モデルを追加",
|
||||
"Add a model tag name": "モデルタグ名を追加",
|
||||
"Add a short description about what this modelfile does": "このモデルファイルの機能に関する簡単な説明を追加",
|
||||
"Add a model id": "",
|
||||
"Add a short description about what this model does": "",
|
||||
"Add a short title for this prompt": "このプロンプトの短いタイトルを追加",
|
||||
"Add a tag": "タグを追加",
|
||||
"Add custom prompt": "カスタムプロンプトを追加",
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
"Admin Panel": "管理者パネル",
|
||||
"Admin Settings": "管理者設定",
|
||||
"Advanced Parameters": "詳細パラメーター",
|
||||
"Advanced Params": "",
|
||||
"all": "すべて",
|
||||
"All Documents": "全てのドキュメント",
|
||||
"All Users": "すべてのユーザー",
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"API Key": "API キー",
|
||||
"API Key created.": "API キーが作成されました。",
|
||||
"API keys": "API キー",
|
||||
"API RPM": "API RPM",
|
||||
"April": "4月",
|
||||
"Archive": "アーカイブ",
|
||||
"Archived Chats": "チャット記録",
|
||||
|
|
@ -60,12 +61,12 @@
|
|||
"available!": "利用可能!",
|
||||
"Back": "戻る",
|
||||
"Bad Response": "応答が悪い",
|
||||
"Base Model (From)": "",
|
||||
"before": "より前",
|
||||
"Being lazy": "怠惰な",
|
||||
"Builder Mode": "ビルダーモード",
|
||||
"Bypass SSL verification for Websites": "SSL 検証をバイパスする",
|
||||
"Cancel": "キャンセル",
|
||||
"Categories": "カテゴリ",
|
||||
"Capabilities": "",
|
||||
"Change Password": "パスワードを変更",
|
||||
"Chat": "チャット",
|
||||
"Chat Bubble UI": "チャットバブルUI",
|
||||
|
|
@ -83,7 +84,6 @@
|
|||
"Citation": "引用文",
|
||||
"Click here for help.": "ヘルプについてはここをクリックしてください。",
|
||||
"Click here to": "ここをクリックして",
|
||||
"Click here to check other modelfiles.": "他のモデルファイルを確認するにはここをクリックしてください。",
|
||||
"Click here to select": "選択するにはここをクリックしてください",
|
||||
"Click here to select a csv file.": "CSVファイルを選択するにはここをクリックしてください。",
|
||||
"Click here to select documents.": "ドキュメントを選択するにはここをクリックしてください。",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"Copy Link": "リンクをコピー",
|
||||
"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 modelfile": "モデルファイルを作成",
|
||||
"Create a model": "",
|
||||
"Create Account": "アカウントを作成",
|
||||
"Create new key": "新しいキーを作成",
|
||||
"Create new secret key": "新しいシークレットキーを作成",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"Current Model": "現在のモデル",
|
||||
"Current Password": "現在のパスワード",
|
||||
"Custom": "カスタム",
|
||||
"Customize Ollama models for a specific purpose": "特定の目的に合わせて Ollama モデルをカスタマイズ",
|
||||
"Customize models for a specific purpose": "",
|
||||
"Dark": "ダーク",
|
||||
"Dashboard": "ダッシュボード",
|
||||
"Database": "データベース",
|
||||
|
|
@ -132,17 +132,17 @@
|
|||
"delete": "削除",
|
||||
"Delete": "削除",
|
||||
"Delete a model": "モデルを削除",
|
||||
"Delete All Chats": "",
|
||||
"Delete chat": "チャットを削除",
|
||||
"Delete Chat": "チャットを削除",
|
||||
"Delete Chats": "チャットを削除",
|
||||
"delete this link": "このリンクを削除します",
|
||||
"Delete User": "ユーザーを削除",
|
||||
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} を削除しました",
|
||||
"Deleted {{tagName}}": "{{tagName}} を削除しました",
|
||||
"Deleted {{name}}": "",
|
||||
"Description": "説明",
|
||||
"Didn't fully follow instructions": "説明に沿って操作していませんでした",
|
||||
"Disabled": "無効",
|
||||
"Discover a modelfile": "モデルファイルを見つける",
|
||||
"Discover a model": "",
|
||||
"Discover a prompt": "プロンプトを見つける",
|
||||
"Discover, download, and explore custom prompts": "カスタムプロンプトを見つけて、ダウンロードして、探索",
|
||||
"Discover, download, and explore model presets": "モデルプリセットを見つけて、ダウンロードして、探索",
|
||||
|
|
@ -176,11 +176,6 @@
|
|||
"Enter Chunk Size": "チャンクサイズを入力してください",
|
||||
"Enter Image Size (e.g. 512x512)": "画像サイズを入力してください (例: 512x512)",
|
||||
"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 Number of Steps (e.g. 50)": "ステップ数を入力してください (例: 50)",
|
||||
"Enter Score": "スコアを入力してください",
|
||||
|
|
@ -196,7 +191,7 @@
|
|||
"Export All Chats (All Users)": "すべてのチャットをエクスポート (すべてのユーザー)",
|
||||
"Export Chats": "チャットをエクスポート",
|
||||
"Export Documents Mapping": "ドキュメントマッピングをエクスポート",
|
||||
"Export Modelfiles": "モデルファイルをエクスポート",
|
||||
"Export Models": "",
|
||||
"Export Prompts": "プロンプトをエクスポート",
|
||||
"Failed to create API Key.": "APIキーの作成に失敗しました。",
|
||||
"Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした",
|
||||
|
|
@ -209,7 +204,7 @@
|
|||
"Focus chat input": "チャット入力をフォーカス",
|
||||
"Followed instructions perfectly": "完全に指示に従った",
|
||||
"Format your variables using square brackets like this:": "次のように角括弧を使用して変数をフォーマットします。",
|
||||
"From (Base Model)": "From (ベースモデル)",
|
||||
"Frequencey Penalty": "",
|
||||
"Full Screen Mode": "フルスクリーンモード",
|
||||
"General": "一般",
|
||||
"General Settings": "一般設定",
|
||||
|
|
@ -220,7 +215,6 @@
|
|||
"Hello, {{name}}": "こんにちは、{{name}} さん",
|
||||
"Help": "ヘルプ",
|
||||
"Hide": "非表示",
|
||||
"Hide Additional Params": "追加パラメーターを非表示",
|
||||
"How can I help you today?": "今日はどのようにお手伝いしましょうか?",
|
||||
"Hybrid Search": "ブリッジ検索",
|
||||
"Image Generation (Experimental)": "画像生成 (実験的)",
|
||||
|
|
@ -229,7 +223,7 @@
|
|||
"Images": "画像",
|
||||
"Import Chats": "チャットをインポート",
|
||||
"Import Documents Mapping": "ドキュメントマッピングをインポート",
|
||||
"Import Modelfiles": "モデルファイルをインポート",
|
||||
"Import Models": "",
|
||||
"Import Prompts": "プロンプトをインポート",
|
||||
"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webuiを実行する際に`--api`フラグを含める",
|
||||
"Input commands": "入力コマンド",
|
||||
|
|
@ -238,6 +232,7 @@
|
|||
"January": "1月",
|
||||
"join our Discord for help.": "ヘルプについては、Discord に参加してください。",
|
||||
"JSON": "JSON",
|
||||
"JSON Preview": "",
|
||||
"July": "7月",
|
||||
"June": "6月",
|
||||
"JWT Expiration": "JWT 有効期限",
|
||||
|
|
@ -252,11 +247,10 @@
|
|||
"LTR": "LTR",
|
||||
"Made by OpenWebUI Community": "OpenWebUI コミュニティによって作成",
|
||||
"Make sure to enclose them with": "必ず次で囲んでください",
|
||||
"Manage LiteLLM Models": "LiteLLM モデルを管理",
|
||||
"Manage Models": "モデルを管理",
|
||||
"Manage Ollama Models": "Ollama モデルを管理",
|
||||
"March": "3月",
|
||||
"Max Tokens": "最大トークン数",
|
||||
"Max Tokens (num_predict)": "",
|
||||
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "同時にダウンロードできるモデルは最大 3 つです。後でもう一度お試しください。",
|
||||
"May": "5月",
|
||||
"Memories accessible by LLMs will be shown here.": "LLM がアクセスできるメモリはここに表示されます。",
|
||||
|
|
@ -271,29 +265,24 @@
|
|||
"Model '{{modelName}}' has been successfully downloaded.": "モデル '{{modelName}}' が正常にダウンロードされました。",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "モデル '{{modelTag}}' はすでにダウンロード待ち行列に入っています。",
|
||||
"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 Name": "モデル名",
|
||||
"Model ID": "",
|
||||
"Model not selected": "モデルが選択されていません",
|
||||
"Model Tag Name": "モデルタグ名",
|
||||
"Model Params": "",
|
||||
"Model Whitelisting": "モデルホワイトリスト",
|
||||
"Model(s) Whitelisted": "ホワイトリストに登録されたモデル",
|
||||
"Modelfile": "モデルファイル",
|
||||
"Modelfile Advanced Settings": "モデルファイルの詳細設定",
|
||||
"Modelfile Content": "モデルファイルの内容",
|
||||
"Modelfiles": "モデルファイル",
|
||||
"Models": "モデル",
|
||||
"More": "もっと見る",
|
||||
"Name": "名前",
|
||||
"Name Tag": "名前タグ",
|
||||
"Name your modelfile": "モデルファイルに名前を付ける",
|
||||
"Name your model": "",
|
||||
"New Chat": "新しいチャット",
|
||||
"New Password": "新しいパスワード",
|
||||
"No results found": "結果が見つかりません",
|
||||
"No source available": "使用可能なソースがありません",
|
||||
"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.": "注意:最小スコアを設定した場合、検索は最小スコア以上のスコアを持つドキュメントのみを返します。",
|
||||
"Notifications": "デスクトップ通知",
|
||||
"November": "11月",
|
||||
|
|
@ -322,7 +311,6 @@
|
|||
"or": "または",
|
||||
"Other": "その他",
|
||||
"Overview": "概要",
|
||||
"Parameters": "パラメーター",
|
||||
"Password": "パスワード",
|
||||
"PDF document (.pdf)": "PDF ドキュメント (.pdf)",
|
||||
"PDF Extract Images (OCR)": "PDF 画像抽出 (OCR)",
|
||||
|
|
@ -342,10 +330,8 @@
|
|||
"Prompts": "プロンプト",
|
||||
"Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com から \"{{searchValue}}\" をプル",
|
||||
"Pull a model from Ollama.com": "Ollama.com からモデルをプル",
|
||||
"Pull Progress": "プルの進行状況",
|
||||
"Query Params": "クエリパラメーター",
|
||||
"RAG Template": "RAG テンプレート",
|
||||
"Raw Format": "Raw 形式",
|
||||
"Read Aloud": "読み上げ",
|
||||
"Record voice": "音声を録音",
|
||||
"Redirecting you to OpenWebUI Community": "OpenWebUI コミュニティにリダイレクトしています",
|
||||
|
|
@ -356,7 +342,6 @@
|
|||
"Remove Model": "モデルを削除",
|
||||
"Rename": "名前を変更",
|
||||
"Repeat Last N": "最後の N を繰り返す",
|
||||
"Repeat Penalty": "繰り返しペナルティ",
|
||||
"Request Mode": "リクエストモード",
|
||||
"Reranking Model": "モデルの再ランキング",
|
||||
"Reranking model disabled": "再ランキングモデルが無効です",
|
||||
|
|
@ -377,14 +362,17 @@
|
|||
"Search": "検索",
|
||||
"Search a model": "モデルを検索",
|
||||
"Search Documents": "ドキュメントを検索",
|
||||
"Search Models": "",
|
||||
"Search Prompts": "プロンプトを検索",
|
||||
"See readme.md for instructions": "手順については readme.md を参照してください",
|
||||
"See what's new": "新機能を見る",
|
||||
"Seed": "シード",
|
||||
"Select a base model": "",
|
||||
"Select a mode": "モードを選択",
|
||||
"Select a model": "モデルを選択",
|
||||
"Select an Ollama instance": "Ollama インスタンスを選択",
|
||||
"Select model": "モデルを選択",
|
||||
"Selected model(s) do not support image inputs": "",
|
||||
"Send": "送信",
|
||||
"Send a Message": "メッセージを送信",
|
||||
"Send message": "メッセージを送信",
|
||||
|
|
@ -406,7 +394,6 @@
|
|||
"Share to OpenWebUI Community": "OpenWebUI コミュニティに共有",
|
||||
"short-summary": "short-summary",
|
||||
"Show": "表示",
|
||||
"Show Additional Params": "追加パラメーターを表示",
|
||||
"Show shortcuts": "表示",
|
||||
"Showcased creativity": "創造性を披露",
|
||||
"sidebar": "サイドバー",
|
||||
|
|
@ -425,7 +412,6 @@
|
|||
"Success": "成功",
|
||||
"Successfully updated.": "正常に更新されました。",
|
||||
"Suggested": "提案",
|
||||
"Sync All": "すべてを同期",
|
||||
"System": "システム",
|
||||
"System Prompt": "システムプロンプト",
|
||||
"Tags": "タグ",
|
||||
|
|
@ -494,6 +480,7 @@
|
|||
"Write a summary in 50 words that summarizes [topic or keyword].": "[トピックまたはキーワード] を要約する 50 語の概要を書いてください。",
|
||||
"Yesterday": "昨日",
|
||||
"You": "あなた",
|
||||
"You cannot clone a base model": "",
|
||||
"You have no archived conversations.": "これまでにアーカイブされた会話はありません。",
|
||||
"You have shared this chat": "このチャットを共有しました",
|
||||
"You're a helpful assistant.": "あなたは役に立つアシスタントです。",
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue