Merge branch 'open-webui:dev' into dev

This commit is contained in:
Simon 2024-08-02 14:07:04 +02:00 committed by GitHub
commit a280fed4be
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 2035 additions and 1351 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -349,6 +349,12 @@ GOOGLE_OAUTH_SCOPE = PersistentConfig(
os.environ.get("GOOGLE_OAUTH_SCOPE", "openid email profile"), os.environ.get("GOOGLE_OAUTH_SCOPE", "openid email profile"),
) )
GOOGLE_REDIRECT_URI = PersistentConfig(
"GOOGLE_REDIRECT_URI",
"oauth.google.redirect_uri",
os.environ.get("GOOGLE_REDIRECT_URI", ""),
)
MICROSOFT_CLIENT_ID = PersistentConfig( MICROSOFT_CLIENT_ID = PersistentConfig(
"MICROSOFT_CLIENT_ID", "MICROSOFT_CLIENT_ID",
"oauth.microsoft.client_id", "oauth.microsoft.client_id",
@ -373,6 +379,12 @@ MICROSOFT_OAUTH_SCOPE = PersistentConfig(
os.environ.get("MICROSOFT_OAUTH_SCOPE", "openid email profile"), os.environ.get("MICROSOFT_OAUTH_SCOPE", "openid email profile"),
) )
MICROSOFT_REDIRECT_URI = PersistentConfig(
"MICROSOFT_REDIRECT_URI",
"oauth.microsoft.redirect_uri",
os.environ.get("MICROSOFT_REDIRECT_URI", ""),
)
OAUTH_CLIENT_ID = PersistentConfig( OAUTH_CLIENT_ID = PersistentConfig(
"OAUTH_CLIENT_ID", "OAUTH_CLIENT_ID",
"oauth.oidc.client_id", "oauth.oidc.client_id",
@ -391,6 +403,12 @@ OPENID_PROVIDER_URL = PersistentConfig(
os.environ.get("OPENID_PROVIDER_URL", ""), os.environ.get("OPENID_PROVIDER_URL", ""),
) )
OPENID_REDIRECT_URI = PersistentConfig(
"OPENID_REDIRECT_URI",
"oauth.oidc.redirect_uri",
os.environ.get("OPENID_REDIRECT_URI", ""),
)
OAUTH_SCOPES = PersistentConfig( OAUTH_SCOPES = PersistentConfig(
"OAUTH_SCOPES", "OAUTH_SCOPES",
"oauth.oidc.scopes", "oauth.oidc.scopes",
@ -424,6 +442,7 @@ def load_oauth_providers():
"client_secret": GOOGLE_CLIENT_SECRET.value, "client_secret": GOOGLE_CLIENT_SECRET.value,
"server_metadata_url": "https://accounts.google.com/.well-known/openid-configuration", "server_metadata_url": "https://accounts.google.com/.well-known/openid-configuration",
"scope": GOOGLE_OAUTH_SCOPE.value, "scope": GOOGLE_OAUTH_SCOPE.value,
"redirect_uri": GOOGLE_REDIRECT_URI.value,
} }
if ( if (
@ -436,6 +455,7 @@ def load_oauth_providers():
"client_secret": MICROSOFT_CLIENT_SECRET.value, "client_secret": MICROSOFT_CLIENT_SECRET.value,
"server_metadata_url": f"https://login.microsoftonline.com/{MICROSOFT_CLIENT_TENANT_ID.value}/v2.0/.well-known/openid-configuration", "server_metadata_url": f"https://login.microsoftonline.com/{MICROSOFT_CLIENT_TENANT_ID.value}/v2.0/.well-known/openid-configuration",
"scope": MICROSOFT_OAUTH_SCOPE.value, "scope": MICROSOFT_OAUTH_SCOPE.value,
"redirect_uri": MICROSOFT_REDIRECT_URI.value,
} }
if ( if (
@ -449,6 +469,7 @@ def load_oauth_providers():
"server_metadata_url": OPENID_PROVIDER_URL.value, "server_metadata_url": OPENID_PROVIDER_URL.value,
"scope": OAUTH_SCOPES.value, "scope": OAUTH_SCOPES.value,
"name": OAUTH_PROVIDER_NAME.value, "name": OAUTH_PROVIDER_NAME.value,
"redirect_uri": OPENID_REDIRECT_URI.value,
} }

View File

@ -13,8 +13,6 @@ import aiohttp
import requests import requests
import mimetypes import mimetypes
import shutil import shutil
import os
import uuid
import inspect import inspect
from fastapi import FastAPI, Request, Depends, status, UploadFile, File, Form from fastapi import FastAPI, Request, Depends, status, UploadFile, File, Form
@ -29,7 +27,7 @@ from starlette.middleware.sessions import SessionMiddleware
from starlette.responses import StreamingResponse, Response, RedirectResponse from starlette.responses import StreamingResponse, Response, RedirectResponse
from apps.socket.main import sio, app as socket_app, get_event_emitter, get_event_call from apps.socket.main import app as socket_app, get_event_emitter, get_event_call
from apps.ollama.main import ( from apps.ollama.main import (
app as ollama_app, app as ollama_app,
get_all_models as get_ollama_models, get_all_models as get_ollama_models,
@ -619,32 +617,15 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
content={"detail": str(e)}, content={"detail": str(e)},
) )
# Extract valves from the request body metadata = {
valves = None "chat_id": body.pop("chat_id", None),
if "valves" in body: "message_id": body.pop("id", None),
valves = body["valves"] "session_id": body.pop("session_id", None),
del body["valves"] "valves": body.pop("valves", None),
}
# Extract session_id, chat_id and message_id from the request body __event_emitter__ = get_event_emitter(metadata)
session_id = None __event_call__ = get_event_call(metadata)
if "session_id" in body:
session_id = body["session_id"]
del body["session_id"]
chat_id = None
if "chat_id" in body:
chat_id = body["chat_id"]
del body["chat_id"]
message_id = None
if "id" in body:
message_id = body["id"]
del body["id"]
__event_emitter__ = await get_event_emitter(
{"chat_id": chat_id, "message_id": message_id, "session_id": session_id}
)
__event_call__ = await get_event_call(
{"chat_id": chat_id, "message_id": message_id, "session_id": session_id}
)
# Initialize data_items to store additional data to be sent to the client # Initialize data_items to store additional data to be sent to the client
data_items = [] data_items = []
@ -709,13 +690,7 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
if len(citations) > 0: if len(citations) > 0:
data_items.append({"citations": citations}) data_items.append({"citations": citations})
body["metadata"] = { body["metadata"] = metadata
"session_id": session_id,
"chat_id": chat_id,
"message_id": message_id,
"valves": valves,
}
modified_body_bytes = json.dumps(body).encode("utf-8") modified_body_bytes = json.dumps(body).encode("utf-8")
# Replace the request body with the modified one # Replace the request body with the modified one
request._body = modified_body_bytes request._body = modified_body_bytes
@ -1191,13 +1166,13 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)):
status_code=r.status_code, status_code=r.status_code,
content=res, content=res,
) )
except: except Exception:
pass pass
else: else:
pass pass
__event_emitter__ = await get_event_emitter( __event_emitter__ = get_event_emitter(
{ {
"chat_id": data["chat_id"], "chat_id": data["chat_id"],
"message_id": data["id"], "message_id": data["id"],
@ -1205,7 +1180,7 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)):
} }
) )
__event_call__ = await get_event_call( __event_call__ = get_event_call(
{ {
"chat_id": data["chat_id"], "chat_id": data["chat_id"],
"message_id": data["id"], "message_id": data["id"],
@ -1334,14 +1309,14 @@ async def chat_completed(
) )
model = app.state.MODELS[model_id] model = app.state.MODELS[model_id]
__event_emitter__ = await get_event_emitter( __event_emitter__ = get_event_emitter(
{ {
"chat_id": data["chat_id"], "chat_id": data["chat_id"],
"message_id": data["id"], "message_id": data["id"],
"session_id": data["session_id"], "session_id": data["session_id"],
} }
) )
__event_call__ = await get_event_call( __event_call__ = get_event_call(
{ {
"chat_id": data["chat_id"], "chat_id": data["chat_id"],
"message_id": data["id"], "message_id": data["id"],
@ -1770,7 +1745,6 @@ class AddPipelineForm(BaseModel):
@app.post("/api/pipelines/add") @app.post("/api/pipelines/add")
async def add_pipeline(form_data: AddPipelineForm, user=Depends(get_admin_user)): async def add_pipeline(form_data: AddPipelineForm, user=Depends(get_admin_user)):
r = None r = None
try: try:
urlIdx = form_data.urlIdx urlIdx = form_data.urlIdx
@ -1813,7 +1787,6 @@ class DeletePipelineForm(BaseModel):
@app.delete("/api/pipelines/delete") @app.delete("/api/pipelines/delete")
async def delete_pipeline(form_data: DeletePipelineForm, user=Depends(get_admin_user)): async def delete_pipeline(form_data: DeletePipelineForm, user=Depends(get_admin_user)):
r = None r = None
try: try:
urlIdx = form_data.urlIdx urlIdx = form_data.urlIdx
@ -1891,7 +1864,6 @@ async def get_pipeline_valves(
models = await get_all_models() models = await get_all_models()
r = None r = None
try: try:
url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx]
key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] key = openai_app.state.config.OPENAI_API_KEYS[urlIdx]
@ -2143,6 +2115,7 @@ for provider_name, provider_config in OAUTH_PROVIDERS.items():
client_kwargs={ client_kwargs={
"scope": provider_config["scope"], "scope": provider_config["scope"],
}, },
redirect_uri=provider_config["redirect_uri"],
) )
# SessionMiddleware is used by authlib for oauth # SessionMiddleware is used by authlib for oauth
@ -2160,7 +2133,10 @@ if len(OAUTH_PROVIDERS) > 0:
async def oauth_login(provider: str, request: Request): async def oauth_login(provider: str, request: Request):
if provider not in OAUTH_PROVIDERS: if provider not in OAUTH_PROVIDERS:
raise HTTPException(404) raise HTTPException(404)
redirect_uri = request.url_for("oauth_callback", provider=provider) # If the provider has a custom redirect URL, use that, otherwise automatically generate one
redirect_uri = OAUTH_PROVIDERS[provider].get("redirect_uri") or request.url_for(
"oauth_callback", provider=provider
)
return await oauth.create_client(provider).authorize_redirect(request, redirect_uri) return await oauth.create_client(provider).authorize_redirect(request, redirect_uri)

View File

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

9
package-lock.json generated
View File

@ -20,6 +20,7 @@
"dayjs": "^1.11.10", "dayjs": "^1.11.10",
"eventsource-parser": "^1.1.2", "eventsource-parser": "^1.1.2",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"fuse.js": "^7.0.0",
"highlight.js": "^11.9.0", "highlight.js": "^11.9.0",
"i18next": "^23.10.0", "i18next": "^23.10.0",
"i18next-browser-languagedetector": "^7.2.0", "i18next-browser-languagedetector": "^7.2.0",
@ -4820,6 +4821,14 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/fuse.js": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz",
"integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==",
"engines": {
"node": ">=10"
}
},
"node_modules/gc-hook": { "node_modules/gc-hook": {
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/gc-hook/-/gc-hook-0.3.1.tgz", "resolved": "https://registry.npmjs.org/gc-hook/-/gc-hook-0.3.1.tgz",

View File

@ -60,6 +60,7 @@
"dayjs": "^1.11.10", "dayjs": "^1.11.10",
"eventsource-parser": "^1.1.2", "eventsource-parser": "^1.1.2",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"fuse.js": "^7.0.0",
"highlight.js": "^11.9.0", "highlight.js": "^11.9.0",
"i18next": "^23.10.0", "i18next": "^23.10.0",
"i18next-browser-languagedetector": "^7.2.0", "i18next-browser-languagedetector": "^7.2.0",

View File

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

View File

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

View File

@ -1,6 +1,7 @@
<script lang="ts"> <script lang="ts">
import { DropdownMenu } from 'bits-ui'; import { DropdownMenu } from 'bits-ui';
import { marked } from 'marked'; import { marked } from 'marked';
import Fuse from 'fuse.js';
import { flyAndScale } from '$lib/utils/transitions'; import { flyAndScale } from '$lib/utils/transitions';
import { createEventDispatcher, onMount, getContext, tick } from 'svelte'; import { createEventDispatcher, onMount, getContext, tick } from 'svelte';
@ -45,17 +46,29 @@
let selectedModelIdx = 0; let selectedModelIdx = 0;
$: filteredItems = items.filter( const fuse = new Fuse(
(item) => items
(searchValue .filter((item) => !item.model?.info?.meta?.hidden)
? item.value.toLowerCase().includes(searchValue.toLowerCase()) || .map((item) => {
item.label.toLowerCase().includes(searchValue.toLowerCase()) || const _item = {
(item.model?.info?.meta?.tags ?? []).some((tag) => ...item,
tag.name.toLowerCase().includes(searchValue.toLowerCase()) modelName: item.model?.name,
) tags: item.model?.info?.meta?.tags?.map((tag) => tag.name).join(' '),
: true) && !(item.model?.info?.meta?.hidden ?? false) desc: item.model?.info?.meta?.description
};
return _item;
}),
{
keys: ['value', 'label', 'tags', 'desc', 'modelName']
}
); );
$: filteredItems = searchValue
? fuse.search(searchValue).map((e) => {
return e.item;
})
: items.filter((item) => !item.model?.info?.meta?.hidden);
const pullModelHandler = async () => { const pullModelHandler = async () => {
const sanitizedModelTag = searchValue.trim().replace(/^ollama\s+(run|pull)\s+/, ''); const sanitizedModelTag = searchValue.trim().replace(/^ollama\s+(run|pull)\s+/, '');

View File

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

View File

@ -111,6 +111,10 @@
"code": "pt-PT", "code": "pt-PT",
"title": "Portuguese (Portugal)" "title": "Portuguese (Portugal)"
}, },
{
"code": "ro-RO",
"title": "Romanian (Romania)"
},
{ {
"code": "ru-RU", "code": "ru-RU",
"title": "Russian (Russia)" "title": "Russian (Russia)"

View File

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

File diff suppressed because it is too large Load Diff

View File

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