From a842d8d62beaa9aedb6608ea36631b06cb9f7d03 Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Sat, 25 May 2024 16:10:14 +0100 Subject: [PATCH 001/287] deps: add authlib --- backend/requirements.txt | 1 + pyproject.toml | 1 + requirements-dev.lock | 3 +++ requirements.lock | 3 +++ 4 files changed, 8 insertions(+) diff --git a/backend/requirements.txt b/backend/requirements.txt index 7a3668428..3ca68277f 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -52,6 +52,7 @@ rank-bm25==0.2.2 faster-whisper==1.0.2 PyJWT[crypto]==2.8.0 +authlib==1.3.2 black==24.4.2 langfuse==2.33.0 diff --git a/pyproject.toml b/pyproject.toml index 004ce374b..bb4744136 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,6 +61,7 @@ dependencies = [ "faster-whisper==1.0.2", "PyJWT[crypto]==2.8.0", + "authlib==1.3.0", "black==24.4.2", "langfuse==2.33.0", diff --git a/requirements-dev.lock b/requirements-dev.lock index 39b1d0ef0..fa4f48e63 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -34,6 +34,8 @@ asgiref==3.8.1 # via opentelemetry-instrumentation-asgi attrs==23.2.0 # via aiohttp +authlib==1.3.0 + # via open-webui av==11.0.0 # via faster-whisper backoff==2.2.1 @@ -93,6 +95,7 @@ click==8.1.7 coloredlogs==15.0.1 # via onnxruntime cryptography==42.0.7 + # via authlib # via litellm # via pyjwt ctranslate2==4.2.1 diff --git a/requirements.lock b/requirements.lock index 39b1d0ef0..fa4f48e63 100644 --- a/requirements.lock +++ b/requirements.lock @@ -34,6 +34,8 @@ asgiref==3.8.1 # via opentelemetry-instrumentation-asgi attrs==23.2.0 # via aiohttp +authlib==1.3.0 + # via open-webui av==11.0.0 # via faster-whisper backoff==2.2.1 @@ -93,6 +95,7 @@ click==8.1.7 coloredlogs==15.0.1 # via onnxruntime cryptography==42.0.7 + # via authlib # via litellm # via pyjwt ctranslate2==4.2.1 From 0210a105bfb4527f31e2bf1fb5086b0341ffe156 Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Sun, 26 May 2024 08:37:09 +0100 Subject: [PATCH 002/287] feat: experimental SSO support for Google, Microsoft, and OIDC --- .../migrations/011_add_user_oauth_sub.py | 49 +++++++ backend/apps/webui/main.py | 10 ++ backend/apps/webui/models/auths.py | 5 +- backend/apps/webui/models/users.py | 13 ++ backend/apps/webui/routers/auths.py | 89 ++++++++++++- backend/config.py | 46 +++++++ backend/main.py | 8 ++ src/lib/stores/index.ts | 7 +- src/routes/+layout.svelte | 7 +- src/routes/auth/+page.svelte | 123 +++++++++++++++++- 10 files changed, 351 insertions(+), 6 deletions(-) create mode 100644 backend/apps/webui/internal/migrations/011_add_user_oauth_sub.py diff --git a/backend/apps/webui/internal/migrations/011_add_user_oauth_sub.py b/backend/apps/webui/internal/migrations/011_add_user_oauth_sub.py new file mode 100644 index 000000000..70dfeccf0 --- /dev/null +++ b/backend/apps/webui/internal/migrations/011_add_user_oauth_sub.py @@ -0,0 +1,49 @@ +"""Peewee migrations -- 011_add_user_oauth_sub.py. + +Some examples (model - class or model name):: + + > Model = migrator.orm['table_name'] # Return model in current state by name + > Model = migrator.ModelClass # Return model in current state by name + + > migrator.sql(sql) # Run custom SQL + > migrator.run(func, *args, **kwargs) # Run python function with the given args + > migrator.create_model(Model) # Create a model (could be used as decorator) + > migrator.remove_model(model, cascade=True) # Remove a model + > migrator.add_fields(model, **fields) # Add fields to a model + > migrator.change_fields(model, **fields) # Change fields + > migrator.remove_fields(model, *field_names, cascade=True) + > migrator.rename_field(model, old_field_name, new_field_name) + > migrator.rename_table(model, new_table_name) + > migrator.add_index(model, *col_names, unique=False) + > migrator.add_not_null(model, *field_names) + > migrator.add_default(model, field_name, default) + > migrator.add_constraint(model, name, sql) + > migrator.drop_index(model, *col_names) + > migrator.drop_not_null(model, *field_names) + > migrator.drop_constraints(model, *constraints) + +""" + +from contextlib import suppress + +import peewee as pw +from peewee_migrate import Migrator + + +with suppress(ImportError): + import playhouse.postgres_ext as pw_pext + + +def migrate(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your migrations here.""" + + migrator.add_fields( + "user", + oauth_sub=pw.TextField(null=True, unique=True), + ) + + +def rollback(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your rollback migrations here.""" + + migrator.remove_fields("user", "oauth_sub") diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index d736cef9a..6da18f9f0 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -1,6 +1,8 @@ from fastapi import FastAPI, Depends from fastapi.routing import APIRoute from fastapi.middleware.cors import CORSMiddleware +from starlette.middleware.sessions import SessionMiddleware + from apps.webui.routers import ( auths, users, @@ -24,6 +26,8 @@ from config import ( WEBUI_AUTH_TRUSTED_EMAIL_HEADER, JWT_EXPIRES_IN, AppConfig, + WEBUI_SECRET_KEY, + OAUTH_PROVIDERS, ) app = FastAPI() @@ -54,6 +58,12 @@ app.add_middleware( allow_headers=["*"], ) +# SessionMiddleware is used by authlib for oauth +if len(OAUTH_PROVIDERS) > 0: + app.add_middleware( + SessionMiddleware, secret_key=WEBUI_SECRET_KEY, session_cookie="oui-session" + ) + app.include_router(auths.router, prefix="/auths", tags=["auths"]) app.include_router(users.router, prefix="/users", tags=["users"]) app.include_router(chats.router, prefix="/chats", tags=["chats"]) diff --git a/backend/apps/webui/models/auths.py b/backend/apps/webui/models/auths.py index e3b659e43..9ea38abcb 100644 --- a/backend/apps/webui/models/auths.py +++ b/backend/apps/webui/models/auths.py @@ -105,6 +105,7 @@ class AuthsTable: name: str, profile_image_url: str = "/user.png", role: str = "pending", + oauth_sub: Optional[str] = None, ) -> Optional[UserModel]: log.info("insert_new_auth") @@ -115,7 +116,9 @@ class AuthsTable: ) result = Auth.create(**auth.model_dump()) - user = Users.insert_new_user(id, name, email, profile_image_url, role) + user = Users.insert_new_user( + id, name, email, profile_image_url, role, oauth_sub + ) if result and user: return user diff --git a/backend/apps/webui/models/users.py b/backend/apps/webui/models/users.py index 8f600c6d5..b9b144b48 100644 --- a/backend/apps/webui/models/users.py +++ b/backend/apps/webui/models/users.py @@ -26,6 +26,8 @@ class User(Model): api_key = CharField(null=True, unique=True) + oauth_sub = TextField(null=True, unique=True) + class Meta: database = DB @@ -43,6 +45,8 @@ class UserModel(BaseModel): api_key: Optional[str] = None + oauth_sub: Optional[str] = None + #################### # Forms @@ -73,6 +77,7 @@ class UsersTable: email: str, profile_image_url: str = "/user.png", role: str = "pending", + oauth_sub: Optional[str] = None, ) -> Optional[UserModel]: user = UserModel( **{ @@ -84,6 +89,7 @@ class UsersTable: "last_active_at": int(time.time()), "created_at": int(time.time()), "updated_at": int(time.time()), + "oauth_sub": oauth_sub, } ) result = User.create(**user.model_dump()) @@ -113,6 +119,13 @@ class UsersTable: except: return None + def get_user_by_oauth_sub(self, sub: str) -> Optional[UserModel]: + try: + user = User.get(User.oauth_sub == sub) + return UserModel(**model_to_dict(user)) + except: + return None + def get_users(self, skip: int = 0, limit: int = 50) -> List[UserModel]: return [ UserModel(**model_to_dict(user)) diff --git a/backend/apps/webui/routers/auths.py b/backend/apps/webui/routers/auths.py index ce9b92061..bc8ce301a 100644 --- a/backend/apps/webui/routers/auths.py +++ b/backend/apps/webui/routers/auths.py @@ -1,5 +1,7 @@ import logging +from authlib.integrations.starlette_client import OAuth +from authlib.oidc.core import UserInfo from fastapi import Request, UploadFile, File from fastapi import Depends, HTTPException, status @@ -9,6 +11,7 @@ import re import uuid import csv +from starlette.responses import RedirectResponse from apps.webui.models.auths import ( SigninForm, @@ -33,7 +36,12 @@ from utils.utils import ( from utils.misc import parse_duration, validate_email_format from utils.webhook import post_webhook from constants import ERROR_MESSAGES, WEBHOOK_MESSAGES -from config import WEBUI_AUTH, WEBUI_AUTH_TRUSTED_EMAIL_HEADER +from config import ( + WEBUI_AUTH, + WEBUI_AUTH_TRUSTED_EMAIL_HEADER, + OAUTH_PROVIDERS, + ENABLE_OAUTH_SIGNUP, +) router = APIRouter() @@ -373,3 +381,82 @@ async def get_api_key(user=Depends(get_current_user)): } else: raise HTTPException(404, detail=ERROR_MESSAGES.API_KEY_NOT_FOUND) + + +############################ +# OAuth Login & Callback +############################ + +oauth = OAuth() + +for provider_name, provider_config in OAUTH_PROVIDERS.items(): + oauth.register( + name=provider_name, + client_id=provider_config["client_id"], + client_secret=provider_config["client_secret"], + server_metadata_url=provider_config["server_metadata_url"], + client_kwargs={ + "scope": provider_config["scope"], + }, + ) + + +@router.get("/oauth/{provider}/login") +async def oauth_login(provider: str, request: Request): + if provider not in OAUTH_PROVIDERS: + raise HTTPException(404) + redirect_uri = request.url_for("oauth_callback", provider=provider) + return await oauth.create_client(provider).authorize_redirect(request, redirect_uri) + + +@router.get("/oauth/{provider}/callback") +async def oauth_callback(provider: str, request: Request): + if provider not in OAUTH_PROVIDERS: + raise HTTPException(404) + client = oauth.create_client(provider) + token = await client.authorize_access_token(request) + user_data: UserInfo = token["userinfo"] + + sub = user_data.get("sub") + if not sub: + raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED) + provider_sub = f"{provider}@{sub}" + + # Check if the user exists + user = Users.get_user_by_oauth_sub(provider_sub) + + if not user: + # If the user does not exist, create a new user if signup is enabled + if ENABLE_OAUTH_SIGNUP.value: + user = Auths.insert_new_auth( + email=user_data.get("email", "").lower(), + password=get_password_hash( + str(uuid.uuid4()) + ), # Random password, not used + name=user_data.get("name", "User"), + profile_image_url=user_data.get("picture", "/user.png"), + role=request.app.state.config.DEFAULT_USER_ROLE, + oauth_sub=provider_sub, + ) + + if request.app.state.config.WEBHOOK_URL: + post_webhook( + request.app.state.config.WEBHOOK_URL, + WEBHOOK_MESSAGES.USER_SIGNUP(user.name), + { + "action": "signup", + "message": WEBHOOK_MESSAGES.USER_SIGNUP(user.name), + "user": user.model_dump_json(exclude_none=True), + }, + ) + else: + raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED) + + jwt_token = create_token( + data={"id": user.id}, + expires_delta=parse_duration(request.app.state.config.JWT_EXPIRES_IN), + ) + + # Redirect back to the frontend with the JWT token + redirect_url = f"{request.base_url}auth#token={jwt_token}" + return RedirectResponse(url=redirect_url) diff --git a/backend/config.py b/backend/config.py index daa89de57..35e332bd8 100644 --- a/backend/config.py +++ b/backend/config.py @@ -285,6 +285,52 @@ JWT_EXPIRES_IN = PersistentConfig( "JWT_EXPIRES_IN", "auth.jwt_expiry", os.environ.get("JWT_EXPIRES_IN", "-1") ) +#################################### +# OAuth config +#################################### + +ENABLE_OAUTH_SIGNUP = PersistentConfig( + "ENABLE_OAUTH_SIGNUP", + "oauth.enable_signup", + os.environ.get("ENABLE_OAUTH_SIGNUP", "False").lower() == "true", +) + +OAUTH_PROVIDERS = {} + +if os.environ.get("GOOGLE_CLIENT_ID") and os.environ.get("GOOGLE_CLIENT_SECRET"): + OAUTH_PROVIDERS["google"] = { + "client_id": os.environ.get("GOOGLE_CLIENT_ID"), + "client_secret": os.environ.get("GOOGLE_CLIENT_SECRET"), + "server_metadata_url": "https://accounts.google.com/.well-known/openid-configuration", + "scope": os.environ.get("GOOGLE_OAUTH_SCOPE", "openid email profile"), + } + +if ( + os.environ.get("MICROSOFT_CLIENT_ID") + and os.environ.get("MICROSOFT_CLIENT_SECRET") + and os.environ.get("MICROSOFT_CLIENT_TENANT_ID") +): + OAUTH_PROVIDERS["microsoft"] = { + "client_id": os.environ.get("MICROSOFT_CLIENT_ID"), + "client_secret": os.environ.get("MICROSOFT_CLIENT_SECRET"), + "server_metadata_url": f"https://login.microsoftonline.com/{os.environ.get('MICROSOFT_CLIENT_TENANT_ID')}/v2.0/.well-known/openid-configuration", + "scope": os.environ.get("MICROSOFT_OAUTH_SCOPE", "openid email profile"), + } + +if ( + os.environ.get("OPENID_CLIENT_ID") + and os.environ.get("OPENID_CLIENT_SECRET") + and os.environ.get("OPENID_PROVIDER_URL") +): + OAUTH_PROVIDERS["oidc"] = { + "client_id": os.environ.get("OPENID_CLIENT_ID"), + "client_secret": os.environ.get("OPENID_CLIENT_SECRET"), + "server_metadata_url": os.environ.get("OPENID_PROVIDER_URL"), + "scope": os.environ.get("OPENID_SCOPE", "openid email profile"), + "name": os.environ.get("OPENID_PROVIDER_NAME", "SSO"), + } + + #################################### # Static DIR #################################### diff --git a/backend/main.py b/backend/main.py index 3d0e4fd4a..95a62adb2 100644 --- a/backend/main.py +++ b/backend/main.py @@ -55,6 +55,7 @@ from config import ( WEBHOOK_URL, ENABLE_ADMIN_EXPORT, AppConfig, + OAUTH_PROVIDERS, ) from constants import ERROR_MESSAGES @@ -364,6 +365,13 @@ async def get_app_config(): "default_locale": default_locale, "default_models": webui_app.state.config.DEFAULT_MODELS, "default_prompt_suggestions": webui_app.state.config.DEFAULT_PROMPT_SUGGESTIONS, + "trusted_header_auth": bool(webui_app.state.AUTH_TRUSTED_EMAIL_HEADER), + "oauth": { + "providers": { + name: config.get("name", name) + for name, config in OAUTH_PROVIDERS.items() + } + }, } diff --git a/src/lib/stores/index.ts b/src/lib/stores/index.ts index 8f4cf16a7..933097948 100644 --- a/src/lib/stores/index.ts +++ b/src/lib/stores/index.ts @@ -134,7 +134,12 @@ type Config = { default_models?: string[]; default_prompt_suggestions?: PromptSuggestion[]; auth_trusted_header?: boolean; - model_config?: GlobalModelConfig; + auth: boolean; + oauth: { + providers: { + [key: string]: string; + }; + }; }; type PromptSuggestion = { diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index c0ede634f..0825ae36e 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -2,6 +2,7 @@ import { onMount, tick, setContext } from 'svelte'; import { config, user, theme, WEBUI_NAME, mobile } from '$lib/stores'; import { goto } from '$app/navigation'; + import { page } from '$app/stores'; import { Toaster, toast } from 'svelte-sonner'; import { getBackendConfig } from '$lib/apis'; @@ -75,7 +76,11 @@ await goto('/auth'); } } else { - await goto('/auth'); + // Don't redirect if we're already on the auth page + // Needed because we pass in tokens from OAuth logins via URL fragments + if ($page.url.pathname !== '/auth') { + await goto('/auth'); + } } } } else { diff --git a/src/routes/auth/+page.svelte b/src/routes/auth/+page.svelte index f13cbe4db..e5a40e6b7 100644 --- a/src/routes/auth/+page.svelte +++ b/src/routes/auth/+page.svelte @@ -1,12 +1,13 @@ @@ -142,13 +148,63 @@ dispatch('save'); }} > -
+ { + let reader = new FileReader(); + reader.onload = (event) => { + let originalImageUrl = `${event.target.result}`; + + backgroundImageUrl = originalImageUrl; + saveSettings({ backgroundImageUrl }); + }; + + if ( + inputFiles && + inputFiles.length > 0 && + ['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(inputFiles[0]['type']) + ) { + reader.readAsDataURL(inputFiles[0]); + } else { + console.log(`Unsupported File Type '${inputFiles[0]['type']}'.`); + inputFiles = null; + } + }} + /> + +
+
+
+
+
{$i18n.t('Default Model')}
+
+
+ +
+ +
+
+
+
-
{$i18n.t('WebUI Add-ons')}
+
{$i18n.t('UI')}
-
{$i18n.t('Chat Bubble UI')}
+
{$i18n.t('Chat Bubble UI')}
-
-
-
{$i18n.t('Widescreen Mode')}
- - -
-
- -
-
-
{$i18n.t('Title Auto-Generation')}
- - -
-
- -
-
-
- {$i18n.t('Response AutoCopy to Clipboard')} -
- - -
-
- -
-
-
{$i18n.t('Allow User Location')}
- - -
-
- -
-
-
{$i18n.t('Display Emoji in Call')}
- - -
-
- {#if !$settings.chatBubble}
-
+
{$i18n.t('Display the username instead of You in the Chat')}
@@ -294,7 +248,45 @@
-
+
{$i18n.t('Widescreen Mode')}
+ + +
+
+ +
+
+
{$i18n.t('Chat direction')}
+ + +
+
+ +
+
+
{$i18n.t('Fluidly stream large external response chunks')}
@@ -313,46 +305,118 @@
-
-
-
-
{$i18n.t('Chat direction')}
+
+
+
+ {$i18n.t('Chat Background Image')} +
- -
-
- -
- -
-
-
-
{$i18n.t('Default Model')}
+
-
- +
{$i18n.t('Chat')}
+ +
+
+
{$i18n.t('Title Auto-Generation')}
+ + +
+
+ +
+
+
+ {$i18n.t('Response AutoCopy to Clipboard')} +
+ + +
+
+ +
+
+
{$i18n.t('Allow User Location')}
+ + +
+
+ +
{$i18n.t('Voice')}
+ +
+
+
{$i18n.t('Display Emoji in Call')}
+ + +
diff --git a/src/lib/utils/characters/index.ts b/src/lib/utils/characters/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/src/routes/(app)/c/[id]/+page.svelte b/src/routes/(app)/c/[id]/+page.svelte index 4e0b565a6..2cc68782e 100644 --- a/src/routes/(app)/c/[id]/+page.svelte +++ b/src/routes/(app)/c/[id]/+page.svelte @@ -1,6 +1,9 @@ + From 720ff35edf9be97af84426ec6cb1c64a93a06213 Mon Sep 17 00:00:00 2001 From: Karl Lee <61072264+KarlLee830@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:32:36 +0800 Subject: [PATCH 030/287] Add some missing i18n keys and update Chinese translation Add some missing i18n keys and update Chinese translation --- .../components/common/ConfirmDialog.svelte | 11 +++---- src/lib/components/layout/Sidebar.svelte | 4 +-- .../components/layout/Sidebar/ChatItem.svelte | 8 ++--- src/lib/i18n/locales/zh-CN/translation.json | 29 ++++++++++++------- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/lib/components/common/ConfirmDialog.svelte b/src/lib/components/common/ConfirmDialog.svelte index 1024ecf39..4999b4d3b 100644 --- a/src/lib/components/common/ConfirmDialog.svelte +++ b/src/lib/components/common/ConfirmDialog.svelte @@ -1,16 +1,17 @@ -
+
profile From 44e145c6e9b1b6024f8050b8409005d753d9beb9 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 17 Jun 2024 11:32:10 -0700 Subject: [PATCH 043/287] fix: styling --- src/lib/components/chat/MessageInput/Suggestions.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/chat/MessageInput/Suggestions.svelte b/src/lib/components/chat/MessageInput/Suggestions.svelte index c4485f9c6..4e660c791 100644 --- a/src/lib/components/chat/MessageInput/Suggestions.svelte +++ b/src/lib/components/chat/MessageInput/Suggestions.svelte @@ -62,7 +62,7 @@
{prompt.title[1]}
{:else}
{prompt.content}
From 4a3362f889e9c90d24aa5e85e71ea4dee1b3a970 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 17 Jun 2024 11:46:23 -0700 Subject: [PATCH 044/287] fix: help --- src/lib/components/chat/Chat.svelte | 2 +- src/lib/components/chat/Messages/ProfileImage.svelte | 2 +- src/lib/components/layout/Help.svelte | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 2a70af97e..58a3ca817 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -1332,7 +1332,7 @@ />
{/if} diff --git a/src/lib/components/chat/Messages/ProfileImage.svelte b/src/lib/components/chat/Messages/ProfileImage.svelte index c923d70d5..9d9f67a8d 100644 --- a/src/lib/components/chat/Messages/ProfileImage.svelte +++ b/src/lib/components/chat/Messages/ProfileImage.svelte @@ -16,7 +16,7 @@ src.startsWith('/') ? src : `/user.png`} - class=" {className} object-cover rounded-full -translate-y-0.5" + class=" {className} object-cover rounded-full -translate-y-[1px]" alt="profile" draggable="false" /> diff --git a/src/lib/components/layout/Help.svelte b/src/lib/components/layout/Help.svelte index 2dbc26d98..9e0a18582 100644 --- a/src/lib/components/layout/Help.svelte +++ b/src/lib/components/layout/Help.svelte @@ -10,7 +10,7 @@ let showShortcuts = false; - + + + +
+
+ { + console.log(importFiles); + showConfirm = true; + }} + /> + + + + +
+
+ + { + const reader = new FileReader(); + reader.onload = async (event) => { + const _tools = JSON.parse(event.target.result); + console.log(_tools); + + for (const tool of _tools) { + const res = await createNewTool(localStorage.token, tool).catch((error) => { + toast.error(error); + return null; + }); + } + + toast.success('Tool imported successfully'); + tools.set(await getTools(localStorage.token)); + }; + + reader.readAsText(importFiles[0]); + }} +> +
+
+
Please carefully review the following warnings:
+ +
    +
  • Tools have a function calling system that allows arbitrary code execution.
  • +
  • Do not install tools from sources you do not fully trust.
  • +
+
+ +
+ 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. +
+
+
diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte new file mode 100644 index 000000000..e69de29bb diff --git a/src/routes/(app)/workspace/+layout.svelte b/src/routes/(app)/workspace/+layout.svelte index bb891d010..02647fbb8 100644 --- a/src/routes/(app)/workspace/+layout.svelte +++ b/src/routes/(app)/workspace/+layout.svelte @@ -74,6 +74,15 @@ {$i18n.t('Tools')} + + {$i18n.t('Functions')} + + +
+ +
+
+{/if} From 453f9be16c794338bf8d308a91605d13c627a040 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 18 Jun 2024 10:26:53 -0700 Subject: [PATCH 058/287] refac --- backend/apps/ollama/main.py | 3 ++- backend/main.py | 20 +++++--------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/backend/apps/ollama/main.py b/backend/apps/ollama/main.py index 05f42145c..22a30474e 100644 --- a/backend/apps/ollama/main.py +++ b/backend/apps/ollama/main.py @@ -889,10 +889,11 @@ class OpenAIChatCompletionForm(BaseModel): @app.post("/v1/chat/completions") @app.post("/v1/chat/completions/{url_idx}") async def generate_openai_chat_completion( - form_data: OpenAIChatCompletionForm, + form_data: dict, url_idx: Optional[int] = None, user=Depends(get_verified_user), ): + form_data = OpenAIChatCompletionForm(**form_data) payload = { **form_data.model_dump(exclude_none=True), diff --git a/backend/main.py b/backend/main.py index 40793867d..db1fa1640 100644 --- a/backend/main.py +++ b/backend/main.py @@ -206,9 +206,7 @@ async def get_function_call_response(messages, tool_id, template, task_model_id, response = None try: if model["owned_by"] == "ollama": - response = await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**payload), user=user - ) + response = await generate_ollama_chat_completion(payload, user=user) else: response = await generate_openai_chat_completion(payload, user=user) @@ -798,9 +796,7 @@ async def generate_title(form_data: dict, user=Depends(get_verified_user)): ) if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**payload), user=user - ) + return await generate_ollama_chat_completion(payload, user=user) else: return await generate_openai_chat_completion(payload, user=user) @@ -863,9 +859,7 @@ async def generate_search_query(form_data: dict, user=Depends(get_verified_user) ) if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**payload), user=user - ) + return await generate_ollama_chat_completion(payload, user=user) else: return await generate_openai_chat_completion(payload, user=user) @@ -932,9 +926,7 @@ Message: """{{prompt}}""" ) if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**payload), user=user - ) + return await generate_ollama_chat_completion(payload, user=user) else: return await generate_openai_chat_completion(payload, user=user) @@ -991,9 +983,7 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u print(model) if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**form_data), user=user - ) + return await generate_ollama_chat_completion(form_data, user=user) else: return await generate_openai_chat_completion(form_data, user=user) From ba7091c25bd954b65b86f3235a6f9ce2c4aa53b8 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 18 Jun 2024 10:36:06 -0700 Subject: [PATCH 059/287] refac --- backend/apps/webui/models/functions.py | 140 ++++++++++++++++++ .../workspace/Models/ModelMenu.svelte | 6 +- 2 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 backend/apps/webui/models/functions.py diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py new file mode 100644 index 000000000..cd877434d --- /dev/null +++ b/backend/apps/webui/models/functions.py @@ -0,0 +1,140 @@ +from pydantic import BaseModel +from peewee import * +from playhouse.shortcuts import model_to_dict +from typing import List, Union, Optional +import time +import logging +from apps.webui.internal.db import DB, JSONField + +import json + +from config import SRC_LOG_LEVELS + +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["MODELS"]) + +#################### +# Functions DB Schema +#################### + + +class Function(Model): + id = CharField(unique=True) + user_id = CharField() + name = TextField() + type = TextField() + content = TextField() + meta = JSONField() + updated_at = BigIntegerField() + created_at = BigIntegerField() + + class Meta: + database = DB + + +class FunctionMeta(BaseModel): + description: Optional[str] = None + + +class FunctionModel(BaseModel): + id: str + user_id: str + name: str + type: str + content: str + meta: FunctionMeta + updated_at: int # timestamp in epoch + created_at: int # timestamp in epoch + + +#################### +# Forms +#################### + + +class FunctionResponse(BaseModel): + id: str + user_id: str + name: str + meta: FunctionMeta + updated_at: int # timestamp in epoch + created_at: int # timestamp in epoch + + +class FunctionForm(BaseModel): + id: str + name: str + type: str + content: str + meta: FunctionMeta + + +class ToolsTable: + def __init__(self, db): + self.db = db + self.db.create_tables([Function]) + + def insert_new_function( + self, user_id: str, form_data: FunctionForm + ) -> Optional[FunctionModel]: + function = FunctionModel( + **{ + **form_data.model_dump(), + "user_id": user_id, + "updated_at": int(time.time()), + "created_at": int(time.time()), + } + ) + + try: + result = Function.create(**function.model_dump()) + if result: + return function + else: + return None + except Exception as e: + print(f"Error creating tool: {e}") + return None + + def get_function_by_id(self, id: str) -> Optional[FunctionModel]: + try: + function = Function.get(Function.id == id) + return FunctionModel(**model_to_dict(function)) + except: + return None + + def get_functions(self) -> List[FunctionModel]: + return [ + FunctionModel(**model_to_dict(function)) for function in Function.select() + ] + + def get_functions_by_type(self, type: str) -> List[FunctionModel]: + return [ + FunctionModel(**model_to_dict(function)) + for function in Function.select().where(Function.type == type) + ] + + def update_function_by_id(self, id: str, updated: dict) -> Optional[FunctionModel]: + try: + query = Function.update( + **updated, + updated_at=int(time.time()), + ).where(Function.id == id) + query.execute() + + function = Function.get(Function.id == id) + return FunctionModel(**model_to_dict(function)) + except: + return None + + def delete_function_by_id(self, id: str) -> bool: + try: + query = Function.delete().where((Function.id == id)) + query.execute() # Remove the rows, return number of rows removed. + + return True + except: + return False + + +Tools = ToolsTable(DB) diff --git a/src/lib/components/workspace/Models/ModelMenu.svelte b/src/lib/components/workspace/Models/ModelMenu.svelte index 7d4650e66..f3a21d510 100644 --- a/src/lib/components/workspace/Models/ModelMenu.svelte +++ b/src/lib/components/workspace/Models/ModelMenu.svelte @@ -124,7 +124,11 @@ {/if}
- {$i18n.t(model?.info?.meta?.hidden ?? false ? 'Show Model' : 'Hide Model')} + {#if model?.info?.meta?.hidden ?? false} + {$i18n.t('Show Model')} + {:else} + {$i18n.t('Hide Model')} + {/if}
From 5a5bf20d42fcc2255f4c53d632c2036bf5c3f957 Mon Sep 17 00:00:00 2001 From: Karl Lee <61072264+KarlLee830@users.noreply.github.com> Date: Wed, 19 Jun 2024 02:03:33 +0800 Subject: [PATCH 060/287] chore: format --- src/lib/i18n/locales/ar-BH/translation.json | 6 ++++++ src/lib/i18n/locales/bg-BG/translation.json | 6 ++++++ src/lib/i18n/locales/bn-BD/translation.json | 6 ++++++ src/lib/i18n/locales/ca-ES/translation.json | 6 ++++++ src/lib/i18n/locales/ceb-PH/translation.json | 6 ++++++ src/lib/i18n/locales/de-DE/translation.json | 6 ++++++ src/lib/i18n/locales/dg-DG/translation.json | 6 ++++++ src/lib/i18n/locales/en-GB/translation.json | 6 ++++++ src/lib/i18n/locales/en-US/translation.json | 6 ++++++ src/lib/i18n/locales/es-ES/translation.json | 6 ++++++ src/lib/i18n/locales/fa-IR/translation.json | 6 ++++++ src/lib/i18n/locales/fi-FI/translation.json | 6 ++++++ src/lib/i18n/locales/fr-CA/translation.json | 6 ++++++ src/lib/i18n/locales/fr-FR/translation.json | 6 ++++++ src/lib/i18n/locales/he-IL/translation.json | 6 ++++++ src/lib/i18n/locales/hi-IN/translation.json | 6 ++++++ src/lib/i18n/locales/hr-HR/translation.json | 6 ++++++ src/lib/i18n/locales/it-IT/translation.json | 6 ++++++ src/lib/i18n/locales/ja-JP/translation.json | 6 ++++++ src/lib/i18n/locales/ka-GE/translation.json | 6 ++++++ src/lib/i18n/locales/ko-KR/translation.json | 6 ++++++ src/lib/i18n/locales/lt-LT/translation.json | 6 ++++++ src/lib/i18n/locales/nb-NO/translation.json | 6 ++++++ src/lib/i18n/locales/nl-NL/translation.json | 6 ++++++ src/lib/i18n/locales/pa-IN/translation.json | 6 ++++++ src/lib/i18n/locales/pl-PL/translation.json | 6 ++++++ src/lib/i18n/locales/pt-BR/translation.json | 6 ++++++ src/lib/i18n/locales/pt-PT/translation.json | 6 ++++++ src/lib/i18n/locales/ru-RU/translation.json | 6 ++++++ src/lib/i18n/locales/sr-RS/translation.json | 6 ++++++ src/lib/i18n/locales/sv-SE/translation.json | 6 ++++++ src/lib/i18n/locales/tk-TW/translation.json | 6 ++++++ src/lib/i18n/locales/tr-TR/translation.json | 6 ++++++ src/lib/i18n/locales/uk-UA/translation.json | 6 ++++++ src/lib/i18n/locales/vi-VN/translation.json | 6 ++++++ src/lib/i18n/locales/zh-CN/translation.json | 6 ++++++ src/lib/i18n/locales/zh-TW/translation.json | 6 ++++++ 37 files changed, 222 insertions(+) diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 7e80a1bc7..2fc86b793 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "تصدير جميع الدردشات", "Export Documents Mapping": "تصدير وثائق الخرائط", + "Export Functions": "", "Export Models": "نماذج التصدير", "Export Prompts": "مطالبات التصدير", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه", "Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:", "Frequency Penalty": "عقوبة التردد", + "Functions": "", "General": "عام", "General Settings": "الاعدادات العامة", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": " {{name}} مرحبا", "Help": "مساعدة", "Hide": "أخفاء", + "Hide Model": "", "How can I help you today?": "كيف استطيع مساعدتك اليوم؟", "Hybrid Search": "البحث الهجين", "Image Generation (Experimental)": "توليد الصور (تجريبي)", @@ -266,6 +269,7 @@ "Images": "الصور", "Import Chats": "استيراد الدردشات", "Import Documents Mapping": "استيراد خرائط المستندات", + "Import Functions": "", "Import Models": "استيراد النماذج", "Import Prompts": "مطالبات الاستيراد", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "البحث عن موديل", "Search Chats": "البحث في الدردشات", "Search Documents": "البحث المستندات", + "Search Functions": "", "Search Models": "نماذج البحث", "Search Prompts": "أبحث حث", "Search Query Generation Prompt": "", @@ -483,6 +488,7 @@ "short-summary": "ملخص قصير", "Show": "عرض", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "إظهار الاختصارات", "Showcased creativity": "أظهر الإبداع", "sidebar": "الشريط الجانبي", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 28bc2f013..a244d2506 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Експортване на чатове", "Export Documents Mapping": "Експортване на документен мапинг", + "Export Functions": "", "Export Models": "Експортиране на модели", "Export Prompts": "Експортване на промптове", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Следвайте инструкциите перфектно", "Format your variables using square brackets like this:": "Форматирайте вашите променливи, като използвате квадратни скоби, както следва:", "Frequency Penalty": "Наказание за честота", + "Functions": "", "General": "Основни", "General Settings": "Основни Настройки", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Здравей, {{name}}", "Help": "Помощ", "Hide": "Скрий", + "Hide Model": "", "How can I help you today?": "Как мога да ви помогна днес?", "Hybrid Search": "Hybrid Search", "Image Generation (Experimental)": "Генерация на изображения (Експериментално)", @@ -266,6 +269,7 @@ "Images": "Изображения", "Import Chats": "Импортване на чатове", "Import Documents Mapping": "Импортване на документен мапинг", + "Import Functions": "", "Import Models": "Импортиране на модели", "Import Prompts": "Импортване на промптове", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Търси модел", "Search Chats": "Търсене на чатове", "Search Documents": "Търси Документи", + "Search Functions": "", "Search Models": "Търсене на модели", "Search Prompts": "Търси Промптове", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "short-summary", "Show": "Покажи", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Покажи", "Showcased creativity": "Показана креативност", "sidebar": "sidebar", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 9cc7bba38..8149826c3 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "চ্যাটগুলো এক্সপোর্ট করুন", "Export Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং এক্সপোর্ট করুন", + "Export Functions": "", "Export Models": "রপ্তানি মডেল", "Export Prompts": "প্রম্পটগুলো একপোর্ট করুন", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "নির্দেশাবলী নিখুঁতভাবে অনুসরণ করা হয়েছে", "Format your variables using square brackets like this:": "আপনার ভেরিয়বলগুলো এভাবে স্কয়ার ব্রাকেটের মাধ্যমে সাজান", "Frequency Penalty": "ফ্রিকোয়েন্সি পেনাল্টি", + "Functions": "", "General": "সাধারণ", "General Settings": "সাধারণ সেটিংসমূহ", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "হ্যালো, {{name}}", "Help": "সহায়তা", "Hide": "লুকান", + "Hide Model": "", "How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?", "Hybrid Search": "হাইব্রিড অনুসন্ধান", "Image Generation (Experimental)": "ইমেজ জেনারেশন (পরিক্ষামূলক)", @@ -266,6 +269,7 @@ "Images": "ছবিসমূহ", "Import Chats": "চ্যাটগুলি ইমপোর্ট করুন", "Import Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং ইমপোর্ট করুন", + "Import Functions": "", "Import Models": "মডেল আমদানি করুন", "Import Prompts": "প্রম্পটগুলো ইমপোর্ট করুন", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "মডেল অনুসন্ধান করুন", "Search Chats": "চ্যাট অনুসন্ধান করুন", "Search Documents": "ডকুমেন্টসমূহ অনুসন্ধান করুন", + "Search Functions": "", "Search Models": "অনুসন্ধান মডেল", "Search Prompts": "প্রম্পটসমূহ অনুসন্ধান করুন", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "সংক্ষিপ্ত বিবরণ", "Show": "দেখান", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "শর্টকাটগুলো দেখান", "Showcased creativity": "সৃজনশীলতা প্রদর্শন", "sidebar": "সাইডবার", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 680d2bbfa..a706664d3 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Exporta Xats", "Export Documents Mapping": "Exporta el Mapatge de Documents", + "Export Functions": "", "Export Models": "Models d'exportació", "Export Prompts": "Exporta Prompts", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Siguiu les instruccions perfeicte", "Format your variables using square brackets like this:": "Formata les teves variables utilitzant claudàtors així:", "Frequency Penalty": "Pena de freqüència", + "Functions": "", "General": "General", "General Settings": "Configuració General", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Hola, {{name}}", "Help": "Ajuda", "Hide": "Amaga", + "Hide Model": "", "How can I help you today?": "Com et puc ajudar avui?", "Hybrid Search": "Cerca Hibrida", "Image Generation (Experimental)": "Generació d'Imatges (Experimental)", @@ -266,6 +269,7 @@ "Images": "Imatges", "Import Chats": "Importa Xats", "Import Documents Mapping": "Importa el Mapa de Documents", + "Import Functions": "", "Import Models": "Models d'importació", "Import Prompts": "Importa Prompts", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Cerca un model", "Search Chats": "Cercar xats", "Search Documents": "Cerca Documents", + "Search Functions": "", "Search Models": "Models de cerca", "Search Prompts": "Cerca Prompts", "Search Query Generation Prompt": "", @@ -480,6 +485,7 @@ "short-summary": "resum curt", "Show": "Mostra", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Mostra dreceres", "Showcased creativity": "Mostra la creativitat", "sidebar": "barra lateral", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 327a6bb90..78640a447 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "I-export ang mga chat", "Export Documents Mapping": "I-export ang pagmapa sa dokumento", + "Export Functions": "", "Export Models": "", "Export Prompts": "Export prompts", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "", "Format your variables using square brackets like this:": "I-format ang imong mga variable gamit ang square brackets sama niini:", "Frequency Penalty": "", + "Functions": "", "General": "Heneral", "General Settings": "kinatibuk-ang mga setting", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Maayong buntag, {{name}}", "Help": "", "Hide": "Tagoa", + "Hide Model": "", "How can I help you today?": "Unsaon nako pagtabang kanimo karon?", "Hybrid Search": "", "Image Generation (Experimental)": "Pagmugna og hulagway (Eksperimento)", @@ -266,6 +269,7 @@ "Images": "Mga hulagway", "Import Chats": "Import nga mga chat", "Import Documents Mapping": "Import nga pagmapa sa dokumento", + "Import Functions": "", "Import Models": "", "Import Prompts": "Import prompt", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "Pangitaa ang mga dokumento", + "Search Functions": "", "Search Models": "", "Search Prompts": "Pangitaa ang mga prompt", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "mubo nga summary", "Show": "Pagpakita", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Ipakita ang mga shortcut", "Showcased creativity": "", "sidebar": "lateral bar", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index cd8b157ef..8204232df 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "Chat exportieren (.json)", "Export Chats": "Chats exportieren", "Export Documents Mapping": "Dokumentenmapping exportieren", + "Export Functions": "", "Export Models": "Modelle exportieren", "Export Prompts": "Prompts exportieren", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Anweisungen perfekt befolgt", "Format your variables using square brackets like this:": "Formatiere deine Variablen mit eckigen Klammern wie folgt:", "Frequency Penalty": "Frequenz-Strafe", + "Functions": "", "General": "Allgemein", "General Settings": "Allgemeine Einstellungen", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Hallo, {{name}}", "Help": "Hilfe", "Hide": "Verbergen", + "Hide Model": "", "How can I help you today?": "Wie kann ich dir heute helfen?", "Hybrid Search": "Hybride Suche", "Image Generation (Experimental)": "Bildgenerierung (experimentell)", @@ -266,6 +269,7 @@ "Images": "Bilder", "Import Chats": "Chats importieren", "Import Documents Mapping": "Dokumentenmapping importieren", + "Import Functions": "", "Import Models": "Modelle importieren", "Import Prompts": "Prompts importieren", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Nach einem Modell suchen", "Search Chats": "Chats durchsuchen", "Search Documents": "Dokumente suchen", + "Search Functions": "", "Search Models": "Modelle suchen", "Search Prompts": "Prompts suchen", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "kurze-zusammenfassung", "Show": "Anzeigen", "Show Admin Details in Account Pending Overlay": "Admin-Details im Account-Pending-Overlay anzeigen", + "Show Model": "", "Show shortcuts": "Verknüpfungen anzeigen", "Showcased creativity": "Kreativität zur Schau gestellt", "sidebar": "Seitenleiste", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 7828d8f29..62e13ca23 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Export Barks", "Export Documents Mapping": "Export Mappings of Dogos", + "Export Functions": "", "Export Models": "", "Export Prompts": "Export Promptos", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "", "Format your variables using square brackets like this:": "Format variables using square brackets like wow:", "Frequency Penalty": "", + "Functions": "", "General": "Woweral", "General Settings": "General Doge Settings", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Much helo, {{name}}", "Help": "", "Hide": "Hide", + "Hide Model": "", "How can I help you today?": "How can I halp u today?", "Hybrid Search": "", "Image Generation (Experimental)": "Image Wow (Much Experiment)", @@ -266,6 +269,7 @@ "Images": "Wowmages", "Import Chats": "Import Barks", "Import Documents Mapping": "Import Doge Mapping", + "Import Functions": "", "Import Models": "", "Import Prompts": "Import Promptos", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "Search Documents much find", + "Search Functions": "", "Search Models": "", "Search Prompts": "Search Prompts much wow", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "short-summary so short", "Show": "Show much show", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Show shortcuts much shortcut", "Showcased creativity": "", "sidebar": "sidebar much side", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index a34aaf22b..ef2678552 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "", "Export Documents Mapping": "", + "Export Functions": "", "Export Models": "", "Export Prompts": "", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", + "Functions": "", "General": "", "General Settings": "", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "", "Help": "", "Hide": "", + "Hide Model": "", "How can I help you today?": "", "Hybrid Search": "", "Image Generation (Experimental)": "", @@ -266,6 +269,7 @@ "Images": "", "Import Chats": "", "Import Documents Mapping": "", + "Import Functions": "", "Import Models": "", "Import Prompts": "", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "", + "Search Functions": "", "Search Models": "", "Search Prompts": "", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "", "Show": "", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "", "Showcased creativity": "", "sidebar": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index a34aaf22b..ef2678552 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "", "Export Documents Mapping": "", + "Export Functions": "", "Export Models": "", "Export Prompts": "", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", + "Functions": "", "General": "", "General Settings": "", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "", "Help": "", "Hide": "", + "Hide Model": "", "How can I help you today?": "", "Hybrid Search": "", "Image Generation (Experimental)": "", @@ -266,6 +269,7 @@ "Images": "", "Import Chats": "", "Import Documents Mapping": "", + "Import Functions": "", "Import Models": "", "Import Prompts": "", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "", + "Search Functions": "", "Search Models": "", "Search Prompts": "", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "", "Show": "", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "", "Showcased creativity": "", "sidebar": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index fe972bdce..94330d12a 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Exportar Chats", "Export Documents Mapping": "Exportar el mapeo de documentos", + "Export Functions": "", "Export Models": "Modelos de exportación", "Export Prompts": "Exportar Prompts", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Siguió las instrucciones perfectamente", "Format your variables using square brackets like this:": "Formatea tus variables usando corchetes de la siguiente manera:", "Frequency Penalty": "Penalización de frecuencia", + "Functions": "", "General": "General", "General Settings": "Opciones Generales", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Hola, {{name}}", "Help": "Ayuda", "Hide": "Esconder", + "Hide Model": "", "How can I help you today?": "¿Cómo puedo ayudarte hoy?", "Hybrid Search": "Búsqueda Híbrida", "Image Generation (Experimental)": "Generación de imágenes (experimental)", @@ -266,6 +269,7 @@ "Images": "Imágenes", "Import Chats": "Importar chats", "Import Documents Mapping": "Importar Mapeo de Documentos", + "Import Functions": "", "Import Models": "Importar modelos", "Import Prompts": "Importar Prompts", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Buscar un modelo", "Search Chats": "Chats de búsqueda", "Search Documents": "Buscar Documentos", + "Search Functions": "", "Search Models": "Modelos de búsqueda", "Search Prompts": "Buscar Prompts", "Search Query Generation Prompt": "", @@ -480,6 +485,7 @@ "short-summary": "resumen-corto", "Show": "Mostrar", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Mostrar atajos", "Showcased creativity": "Mostrar creatividad", "sidebar": "barra lateral", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 25ae1fecf..7882a1497 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "اکسپورت از گپ\u200cها", "Export Documents Mapping": "اکسپورت از نگاشت اسناد", + "Export Functions": "", "Export Models": "مدل های صادرات", "Export Prompts": "اکسپورت از پرامپت\u200cها", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "دستورالعمل ها را کاملا دنبال کرد", "Format your variables using square brackets like this:": "متغیرهای خود را با استفاده از براکت مربع به شکل زیر قالب بندی کنید:", "Frequency Penalty": "مجازات فرکانس", + "Functions": "", "General": "عمومی", "General Settings": "تنظیمات عمومی", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "سلام، {{name}}", "Help": "کمک", "Hide": "پنهان", + "Hide Model": "", "How can I help you today?": "امروز چطور می توانم کمک تان کنم؟", "Hybrid Search": "جستجوی همزمان", "Image Generation (Experimental)": "تولید تصویر (آزمایشی)", @@ -266,6 +269,7 @@ "Images": "تصاویر", "Import Chats": "ایمپورت گپ\u200cها", "Import Documents Mapping": "ایمپورت نگاشت اسناد", + "Import Functions": "", "Import Models": "واردات مدلها", "Import Prompts": "ایمپورت پرامپت\u200cها", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "جستجوی مدل", "Search Chats": "جستجو گپ ها", "Search Documents": "جستجوی اسناد", + "Search Functions": "", "Search Models": "مدل های جستجو", "Search Prompts": "جستجوی پرامپت\u200cها", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "خلاصه کوتاه", "Show": "نمایش", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "نمایش میانبرها", "Showcased creativity": "ایده\u200cآفرینی", "sidebar": "نوار کناری", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 82fe9c5c2..b7c4959f3 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Vie keskustelut", "Export Documents Mapping": "Vie asiakirjakartoitus", + "Export Functions": "", "Export Models": "Vie malleja", "Export Prompts": "Vie kehotteet", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Noudatti ohjeita täydellisesti", "Format your variables using square brackets like this:": "Muotoile muuttujat hakasulkeilla näin:", "Frequency Penalty": "Taajuussakko", + "Functions": "", "General": "Yleinen", "General Settings": "Yleisasetukset", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Terve, {{name}}", "Help": "Apua", "Hide": "Piilota", + "Hide Model": "", "How can I help you today?": "Kuinka voin auttaa tänään?", "Hybrid Search": "Hybridihaku", "Image Generation (Experimental)": "Kuvagenerointi (kokeellinen)", @@ -266,6 +269,7 @@ "Images": "Kuvat", "Import Chats": "Tuo keskustelut", "Import Documents Mapping": "Tuo asiakirjakartoitus", + "Import Functions": "", "Import Models": "Mallien tuominen", "Import Prompts": "Tuo kehotteita", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Hae mallia", "Search Chats": "Etsi chatteja", "Search Documents": "Hae asiakirjoja", + "Search Functions": "", "Search Models": "Hae malleja", "Search Prompts": "Hae kehotteita", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "lyhyt-yhteenveto", "Show": "Näytä", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Näytä pikanäppäimet", "Showcased creativity": "Näytti luovuutta", "sidebar": "sivupalkki", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index a14d9f95d..e2dbdd70c 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Exporter les discussions", "Export Documents Mapping": "Exporter le mappage des documents", + "Export Functions": "", "Export Models": "Modèles d’exportation", "Export Prompts": "Exporter les prompts", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Suivi des instructions parfaitement", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Frequency Penalty": "Pénalité de fréquence", + "Functions": "", "General": "Général", "General Settings": "Paramètres généraux", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Bonjour, {{name}}", "Help": "Aide", "Hide": "Cacher", + "Hide Model": "", "How can I help you today?": "Comment puis-je vous aider aujourd'hui ?", "Hybrid Search": "Recherche hybride", "Image Generation (Experimental)": "Génération d'image (Expérimental)", @@ -266,6 +269,7 @@ "Images": "Images", "Import Chats": "Importer les discussions", "Import Documents Mapping": "Importer le mappage des documents", + "Import Functions": "", "Import Models": "Importer des modèles", "Import Prompts": "Importer les prompts", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Rechercher un modèle", "Search Chats": "Rechercher des chats", "Search Documents": "Rechercher des documents", + "Search Functions": "", "Search Models": "Modèles de recherche", "Search Prompts": "Rechercher des prompts", "Search Query Generation Prompt": "", @@ -480,6 +485,7 @@ "short-summary": "résumé court", "Show": "Afficher", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Afficher les raccourcis", "Showcased creativity": "Créativité affichée", "sidebar": "barre latérale", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 503202778..f63aca96b 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Exporter les Chats", "Export Documents Mapping": "Exporter la Correspondance des Documents", + "Export Functions": "", "Export Models": "Exporter les Modèles", "Export Prompts": "Exporter les Prompts", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "A suivi les instructions parfaitement", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Frequency Penalty": "Pénalité de fréquence", + "Functions": "", "General": "Général", "General Settings": "Paramètres Généraux", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Bonjour, {{name}}", "Help": "Aide", "Hide": "Cacher", + "Hide Model": "", "How can I help you today?": "Comment puis-je vous aider aujourd'hui ?", "Hybrid Search": "Recherche Hybride", "Image Generation (Experimental)": "Génération d'Image (Expérimental)", @@ -266,6 +269,7 @@ "Images": "Images", "Import Chats": "Importer les Chats", "Import Documents Mapping": "Importer la Correspondance des Documents", + "Import Functions": "", "Import Models": "Importer des Modèles", "Import Prompts": "Importer des Prompts", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Rechercher un modèle", "Search Chats": "Rechercher des chats", "Search Documents": "Rechercher des Documents", + "Search Functions": "", "Search Models": "Rechercher des modèles", "Search Prompts": "Rechercher des Prompts", "Search Query Generation Prompt": "", @@ -480,6 +485,7 @@ "short-summary": "résumé court", "Show": "Montrer", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Afficher les raccourcis", "Showcased creativity": "Créativité affichée", "sidebar": "barre latérale", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index b0cc225ca..fc4158287 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "ייצוא צ'אטים", "Export Documents Mapping": "ייצוא מיפוי מסמכים", + "Export Functions": "", "Export Models": "ייצוא מודלים", "Export Prompts": "ייצוא פקודות", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "עקב אחר ההוראות במושלמות", "Format your variables using square brackets like this:": "עצב את המשתנים שלך באמצעות סוגריים מרובעים כך:", "Frequency Penalty": "עונש תדירות", + "Functions": "", "General": "כללי", "General Settings": "הגדרות כלליות", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "שלום, {{name}}", "Help": "עזרה", "Hide": "הסתר", + "Hide Model": "", "How can I help you today?": "כיצד אוכל לעזור לך היום?", "Hybrid Search": "חיפוש היברידי", "Image Generation (Experimental)": "יצירת תמונות (ניסיוני)", @@ -266,6 +269,7 @@ "Images": "תמונות", "Import Chats": "יבוא צ'אטים", "Import Documents Mapping": "יבוא מיפוי מסמכים", + "Import Functions": "", "Import Models": "ייבוא דגמים", "Import Prompts": "יבוא פקודות", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "חפש מודל", "Search Chats": "חיפוש צ'אטים", "Search Documents": "חפש מסמכים", + "Search Functions": "", "Search Models": "חיפוש מודלים", "Search Prompts": "חפש פקודות", "Search Query Generation Prompt": "", @@ -480,6 +485,7 @@ "short-summary": "סיכום קצר", "Show": "הצג", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "הצג קיצורי דרך", "Showcased creativity": "הצגת יצירתיות", "sidebar": "סרגל צד", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 64b4893eb..8564e0bb3 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "चैट निर्यात करें", "Export Documents Mapping": "निर्यात दस्तावेज़ मैपिंग", + "Export Functions": "", "Export Models": "निर्यात मॉडल", "Export Prompts": "प्रॉम्प्ट निर्यात करें", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "निर्देशों का पूर्णतः पालन किया", "Format your variables using square brackets like this:": "वर्गाकार कोष्ठकों का उपयोग करके अपने चरों को इस प्रकार प्रारूपित करें :", "Frequency Penalty": "फ्रीक्वेंसी पेनल्टी", + "Functions": "", "General": "सामान्य", "General Settings": "सामान्य सेटिंग्स", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "नमस्ते, {{name}}", "Help": "मदद", "Hide": "छुपाएं", + "Hide Model": "", "How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?", "Hybrid Search": "हाइब्रिड खोज", "Image Generation (Experimental)": "छवि निर्माण (प्रायोगिक)", @@ -266,6 +269,7 @@ "Images": "इमेजिस", "Import Chats": "चैट आयात करें", "Import Documents Mapping": "दस्तावेज़ मैपिंग आयात करें", + "Import Functions": "", "Import Models": "आयात मॉडल", "Import Prompts": "प्रॉम्प्ट आयात करें", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "एक मॉडल खोजें", "Search Chats": "चैट खोजें", "Search Documents": "दस्तावेज़ खोजें", + "Search Functions": "", "Search Models": "मॉडल खोजें", "Search Prompts": "प्रॉम्प्ट खोजें", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "संक्षिप्त सारांश", "Show": "दिखाओ", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "शॉर्टकट दिखाएँ", "Showcased creativity": "रचनात्मकता का प्रदर्शन किया", "sidebar": "साइड बार", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 324b668bc..e24175b59 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "Izvoz četa (.json)", "Export Chats": "Izvoz razgovora", "Export Documents Mapping": "Izvoz mapiranja dokumenata", + "Export Functions": "", "Export Models": "Izvoz modela", "Export Prompts": "Izvoz prompta", "Export Tools": "Izvoz alata", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Savršeno slijedio upute", "Format your variables using square brackets like this:": "Formatirajte svoje varijable pomoću uglatih zagrada ovako:", "Frequency Penalty": "Kazna za učestalost", + "Functions": "", "General": "Općenito", "General Settings": "Opće postavke", "Generate Image": "Gneriraj sliku", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Bok, {{name}}", "Help": "Pomoć", "Hide": "Sakrij", + "Hide Model": "", "How can I help you today?": "Kako vam mogu pomoći danas?", "Hybrid Search": "Hibridna pretraga", "Image Generation (Experimental)": "Generiranje slika (eksperimentalno)", @@ -266,6 +269,7 @@ "Images": "Slike", "Import Chats": "Uvoz razgovora", "Import Documents Mapping": "Uvoz mapiranja dokumenata", + "Import Functions": "", "Import Models": "Uvoz modela", "Import Prompts": "Uvoz prompta", "Import Tools": "Uvoz alata", @@ -430,6 +434,7 @@ "Search a model": "Pretraži model", "Search Chats": "Pretraži razgovore", "Search Documents": "Pretraga dokumenata", + "Search Functions": "", "Search Models": "Pretražite modele", "Search Prompts": "Pretraga prompta", "Search Query Generation Prompt": "Upit za generiranje upita za pretraživanje", @@ -480,6 +485,7 @@ "short-summary": "kratki sažetak", "Show": "Pokaži", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Pokaži prečace", "Showcased creativity": "Prikazana kreativnost", "sidebar": "bočna traka", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 927da3538..cab7c4f42 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Esporta chat", "Export Documents Mapping": "Esporta mappatura documenti", + "Export Functions": "", "Export Models": "Esporta modelli", "Export Prompts": "Esporta prompt", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Ha seguito le istruzioni alla perfezione", "Format your variables using square brackets like this:": "Formatta le tue variabili usando parentesi quadre come questa:", "Frequency Penalty": "Penalità di frequenza", + "Functions": "", "General": "Generale", "General Settings": "Impostazioni generali", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Ciao, {{name}}", "Help": "Aiuto", "Hide": "Nascondi", + "Hide Model": "", "How can I help you today?": "Come posso aiutarti oggi?", "Hybrid Search": "Ricerca ibrida", "Image Generation (Experimental)": "Generazione di immagini (sperimentale)", @@ -266,6 +269,7 @@ "Images": "Immagini", "Import Chats": "Importa chat", "Import Documents Mapping": "Importa mappatura documenti", + "Import Functions": "", "Import Models": "Importazione di modelli", "Import Prompts": "Importa prompt", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Cerca un modello", "Search Chats": "Cerca nelle chat", "Search Documents": "Cerca documenti", + "Search Functions": "", "Search Models": "Cerca modelli", "Search Prompts": "Cerca prompt", "Search Query Generation Prompt": "", @@ -480,6 +485,7 @@ "short-summary": "riassunto-breve", "Show": "Mostra", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Mostra", "Showcased creativity": "Creatività messa in mostra", "sidebar": "barra laterale", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 7a9c6183c..fb1b62509 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "チャットをエクスポート", "Export Documents Mapping": "ドキュメントマッピングをエクスポート", + "Export Functions": "", "Export Models": "モデルのエクスポート", "Export Prompts": "プロンプトをエクスポート", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "完全に指示に従った", "Format your variables using square brackets like this:": "次のように角括弧を使用して変数をフォーマットします。", "Frequency Penalty": "周波数ペナルティ", + "Functions": "", "General": "一般", "General Settings": "一般設定", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "こんにちは、{{name}} さん", "Help": "ヘルプ", "Hide": "非表示", + "Hide Model": "", "How can I help you today?": "今日はどのようにお手伝いしましょうか?", "Hybrid Search": "ブリッジ検索", "Image Generation (Experimental)": "画像生成 (実験的)", @@ -266,6 +269,7 @@ "Images": "画像", "Import Chats": "チャットをインポート", "Import Documents Mapping": "ドキュメントマッピングをインポート", + "Import Functions": "", "Import Models": "モデルのインポート", "Import Prompts": "プロンプトをインポート", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "モデルを検索", "Search Chats": "チャットの検索", "Search Documents": "ドキュメントを検索", + "Search Functions": "", "Search Models": "モデル検索", "Search Prompts": "プロンプトを検索", "Search Query Generation Prompt": "", @@ -478,6 +483,7 @@ "short-summary": "short-summary", "Show": "表示", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "表示", "Showcased creativity": "創造性を披露", "sidebar": "サイドバー", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 4d77ffafc..8a0489e6d 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "მიმოწერის ექსპორტირება", "Export Documents Mapping": "დოკუმენტების კავშირის ექსპორტი", + "Export Functions": "", "Export Models": "ექსპორტის მოდელები", "Export Prompts": "მოთხოვნების ექსპორტი", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "ყველა ინსტრუქცია უზრუნველყოფა", "Format your variables using square brackets like this:": "დააფორმატეთ თქვენი ცვლადები კვადრატული ფრჩხილების გამოყენებით:", "Frequency Penalty": "სიხშირის ჯარიმა", + "Functions": "", "General": "ზოგადი", "General Settings": "ზოგადი პარამეტრები", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "გამარჯობა, {{name}}", "Help": "დახმარება", "Hide": "დამალვა", + "Hide Model": "", "How can I help you today?": "როგორ შემიძლია დაგეხმარო დღეს?", "Hybrid Search": "ჰიბრიდური ძებნა", "Image Generation (Experimental)": "სურათების გენერაცია (ექსპერიმენტული)", @@ -266,6 +269,7 @@ "Images": "სურათები", "Import Chats": "მიმოწერების იმპორტი", "Import Documents Mapping": "დოკუმენტების კავშირის იმპორტი", + "Import Functions": "", "Import Models": "იმპორტის მოდელები", "Import Prompts": "მოთხოვნების იმპორტი", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "მოდელის ძიება", "Search Chats": "ჩატების ძებნა", "Search Documents": "დოკუმენტების ძიება", + "Search Functions": "", "Search Models": "საძიებო მოდელები", "Search Prompts": "მოთხოვნების ძიება", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "მოკლე შინაარსი", "Show": "ჩვენება", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "მალსახმობების ჩვენება", "Showcased creativity": "ჩვენებული ქონება", "sidebar": "საიდბარი", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 613d8fc31..bb9610414 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "채팅 내보내기(.json)", "Export Chats": "채팅 내보내기", "Export Documents Mapping": "문서 매핑 내보내기", + "Export Functions": "", "Export Models": "모델 내보내기", "Export Prompts": "프롬프트 내보내기", "Export Tools": "도구 내보내기", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "명령을 완벽히 따름", "Format your variables using square brackets like this:": "다음과 같이 대괄호를 사용하여 변수를 형식화하세요:", "Frequency Penalty": "프리퀀시 페널티", + "Functions": "", "General": "일반", "General Settings": "일반 설정", "Generate Image": "이미지 생성", @@ -258,6 +260,7 @@ "Hello, {{name}}": "안녕하세요, {{name}}", "Help": "도움말", "Hide": "숨기기", + "Hide Model": "", "How can I help you today?": "오늘 어떻게 도와드릴까요?", "Hybrid Search": "하이브리드 검색", "Image Generation (Experimental)": "이미지 생성(실험적)", @@ -266,6 +269,7 @@ "Images": "이미지", "Import Chats": "채팅 가져오기", "Import Documents Mapping": "문서 매핑 가져오기", + "Import Functions": "", "Import Models": "모델 가져오기", "Import Prompts": "프롬프트 가져오기", "Import Tools": "도구 가져오기", @@ -430,6 +434,7 @@ "Search a model": "모델 검색", "Search Chats": "채팅 검색", "Search Documents": "문서 검색", + "Search Functions": "", "Search Models": "모델 검색", "Search Prompts": "프롬프트 검색", "Search Query Generation Prompt": "검색 쿼리 생성 프롬프트", @@ -479,6 +484,7 @@ "short-summary": "간단한 요약", "Show": "보이기", "Show Admin Details in Account Pending Overlay": "사용자용 계정 보류 설명창에, 관리자 상세 정보 노출", + "Show Model": "", "Show shortcuts": "단축키 보기", "Showcased creativity": "창의성 발휘", "sidebar": "사이드바", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 6baeda217..afbc8a21e 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Eksportuoti pokalbius", "Export Documents Mapping": "Eksportuoti dokumentų žemėlapį", + "Export Functions": "", "Export Models": "", "Export Prompts": "Eksportuoti užklausas", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Tobulai sekė instrukcijas", "Format your variables using square brackets like this:": "Formatuokite kintamuosius su kvadratiniais skliausteliais:", "Frequency Penalty": "", + "Functions": "", "General": "Bendri", "General Settings": "Bendri nustatymai", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Sveiki, {{name}}", "Help": "Pagalba", "Hide": "Paslėpti", + "Hide Model": "", "How can I help you today?": "Kuo galėčiau Jums padėti ?", "Hybrid Search": "Hibridinė paieška", "Image Generation (Experimental)": "Vaizdų generavimas (eksperimentinis)", @@ -266,6 +269,7 @@ "Images": "Vaizdai", "Import Chats": "Importuoti pokalbius", "Import Documents Mapping": "Importuoti dokumentų žemėlapį", + "Import Functions": "", "Import Models": "", "Import Prompts": "Importuoti užklausas", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Ieškoti modelio", "Search Chats": "", "Search Documents": "Ieškoti dokumentų", + "Search Functions": "", "Search Models": "", "Search Prompts": "Ieškoti užklausų", "Search Query Generation Prompt": "", @@ -481,6 +486,7 @@ "short-summary": "trumpinys", "Show": "Rodyti", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Rodyti trumpinius", "Showcased creativity": "Kūrybingų užklausų paroda", "sidebar": "šoninis meniu", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index fd7af6190..ff448250c 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "Eksporter chat (.json)", "Export Chats": "Eksporter chatter", "Export Documents Mapping": "Eksporter dokumentkartlegging", + "Export Functions": "", "Export Models": "Eksporter modeller", "Export Prompts": "Eksporter prompts", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Fulgte instruksjonene perfekt", "Format your variables using square brackets like this:": "Formatér variablene dine med hakeparenteser som dette:", "Frequency Penalty": "Frekvensstraff", + "Functions": "", "General": "Generelt", "General Settings": "Generelle innstillinger", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Hei, {{name}}", "Help": "Hjelp", "Hide": "Skjul", + "Hide Model": "", "How can I help you today?": "Hvordan kan jeg hjelpe deg i dag?", "Hybrid Search": "Hybrid-søk", "Image Generation (Experimental)": "Bildegenerering (Eksperimentell)", @@ -266,6 +269,7 @@ "Images": "Bilder", "Import Chats": "Importer chatter", "Import Documents Mapping": "Importer dokumentkartlegging", + "Import Functions": "", "Import Models": "Importer modeller", "Import Prompts": "Importer prompts", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Søk en modell", "Search Chats": "Søk chatter", "Search Documents": "Søk dokumenter", + "Search Functions": "", "Search Models": "Søk modeller", "Search Prompts": "Søk prompter", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "kort sammendrag", "Show": "Vis", "Show Admin Details in Account Pending Overlay": "Vis administratordetaljer i ventende kontooverlay", + "Show Model": "", "Show shortcuts": "Vis snarveier", "Showcased creativity": "Vist frem kreativitet", "sidebar": "sidefelt", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 6a153b62e..0ac0f2cd8 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Exporteer Chats", "Export Documents Mapping": "Exporteer Documenten Mapping", + "Export Functions": "", "Export Models": "Modellen exporteren", "Export Prompts": "Exporteer Prompts", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Volgde instructies perfect", "Format your variables using square brackets like this:": "Formatteer je variabelen met vierkante haken zoals dit:", "Frequency Penalty": "Frequentie Straf", + "Functions": "", "General": "Algemeen", "General Settings": "Algemene Instellingen", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Hallo, {{name}}", "Help": "Help", "Hide": "Verberg", + "Hide Model": "", "How can I help you today?": "Hoe kan ik je vandaag helpen?", "Hybrid Search": "Hybride Zoeken", "Image Generation (Experimental)": "Afbeelding Generatie (Experimenteel)", @@ -266,6 +269,7 @@ "Images": "Afbeeldingen", "Import Chats": "Importeer Chats", "Import Documents Mapping": "Importeer Documenten Mapping", + "Import Functions": "", "Import Models": "Modellen importeren", "Import Prompts": "Importeer Prompts", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Zoek een model", "Search Chats": "Chats zoeken", "Search Documents": "Zoek Documenten", + "Search Functions": "", "Search Models": "Modellen zoeken", "Search Prompts": "Zoek Prompts", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "korte-samenvatting", "Show": "Toon", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Toon snelkoppelingen", "Showcased creativity": "Tooncase creativiteit", "sidebar": "sidebar", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index 3b447dffd..9c2ffb21b 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "ਗੱਲਾਂ ਨਿਰਯਾਤ ਕਰੋ", "Export Documents Mapping": "ਡਾਕੂਮੈਂਟ ਮੈਪਿੰਗ ਨਿਰਯਾਤ ਕਰੋ", + "Export Functions": "", "Export Models": "ਨਿਰਯਾਤ ਮਾਡਲ", "Export Prompts": "ਪ੍ਰੰਪਟ ਨਿਰਯਾਤ ਕਰੋ", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "ਹਦਾਇਤਾਂ ਨੂੰ ਬਿਲਕੁਲ ਫਾਲੋ ਕੀਤਾ", "Format your variables using square brackets like this:": "ਤੁਹਾਡੀਆਂ ਵੈਰੀਏਬਲਾਂ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਵਰਤੋਂ: [ ]", "Frequency Penalty": "ਬਾਰੰਬਾਰਤਾ ਜੁਰਮਾਨਾ", + "Functions": "", "General": "ਆਮ", "General Settings": "ਆਮ ਸੈਟਿੰਗਾਂ", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "ਸਤ ਸ੍ਰੀ ਅਕਾਲ, {{name}}", "Help": "ਮਦਦ", "Hide": "ਲੁਕਾਓ", + "Hide Model": "", "How can I help you today?": "ਮੈਂ ਅੱਜ ਤੁਹਾਡੀ ਕਿਵੇਂ ਮਦਦ ਕਰ ਸਕਦਾ ਹਾਂ?", "Hybrid Search": "ਹਾਈਬ੍ਰਿਡ ਖੋਜ", "Image Generation (Experimental)": "ਚਿੱਤਰ ਜਨਰੇਸ਼ਨ (ਪਰਮਾਣੂਕ੍ਰਿਤ)", @@ -266,6 +269,7 @@ "Images": "ਚਿੱਤਰ", "Import Chats": "ਗੱਲਾਂ ਆਯਾਤ ਕਰੋ", "Import Documents Mapping": "ਡਾਕੂਮੈਂਟ ਮੈਪਿੰਗ ਆਯਾਤ ਕਰੋ", + "Import Functions": "", "Import Models": "ਮਾਡਲ ਆਯਾਤ ਕਰੋ", "Import Prompts": "ਪ੍ਰੰਪਟ ਆਯਾਤ ਕਰੋ", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "ਇੱਕ ਮਾਡਲ ਖੋਜੋ", "Search Chats": "ਖੋਜ ਚੈਟਾਂ", "Search Documents": "ਡਾਕੂਮੈਂਟ ਖੋਜੋ", + "Search Functions": "", "Search Models": "ਖੋਜ ਮਾਡਲ", "Search Prompts": "ਪ੍ਰੰਪਟ ਖੋਜੋ", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "ਛੋਟੀ-ਸੰਖੇਪ", "Show": "ਦਿਖਾਓ", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "ਸ਼ਾਰਟਕਟ ਦਿਖਾਓ", "Showcased creativity": "ਸਿਰਜਣਾਤਮਕਤਾ ਦਿਖਾਈ", "sidebar": "ਸਾਈਡਬਾਰ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index c6aabdaef..042c814f0 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Eksportuj czaty", "Export Documents Mapping": "Eksportuj mapowanie dokumentów", + "Export Functions": "", "Export Models": "Eksportuj modele", "Export Prompts": "Eksportuj prompty", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Postępował z idealnie według instrukcji", "Format your variables using square brackets like this:": "Formatuj swoje zmienne, używając nawiasów kwadratowych, np.", "Frequency Penalty": "Kara za częstotliwość", + "Functions": "", "General": "Ogólne", "General Settings": "Ogólne ustawienia", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Witaj, {{name}}", "Help": "Pomoc", "Hide": "Ukryj", + "Hide Model": "", "How can I help you today?": "Jak mogę Ci dzisiaj pomóc?", "Hybrid Search": "Szukanie hybrydowe", "Image Generation (Experimental)": "Generowanie obrazu (eksperymentalne)", @@ -266,6 +269,7 @@ "Images": "Obrazy", "Import Chats": "Importuj czaty", "Import Documents Mapping": "Importuj mapowanie dokumentów", + "Import Functions": "", "Import Models": "Importowanie modeli", "Import Prompts": "Importuj prompty", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Szukaj modelu", "Search Chats": "Szukaj w czatach", "Search Documents": "Szukaj dokumentów", + "Search Functions": "", "Search Models": "Szukaj modeli", "Search Prompts": "Szukaj promptów", "Search Query Generation Prompt": "", @@ -481,6 +486,7 @@ "short-summary": "Krótkie podsumowanie", "Show": "Pokaż", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Pokaż skróty", "Showcased creativity": "Pokaz kreatywności", "sidebar": "Panel boczny", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 553dfbf87..6a7cd4891 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Exportar Bate-papos", "Export Documents Mapping": "Exportar Mapeamento de Documentos", + "Export Functions": "", "Export Models": "Modelos de Exportação", "Export Prompts": "Exportar Prompts", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Seguiu instruções perfeitamente", "Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes como este:", "Frequency Penalty": "Penalidade de Frequência", + "Functions": "", "General": "Geral", "General Settings": "Configurações Gerais", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Olá, {{name}}", "Help": "Ajuda", "Hide": "Ocultar", + "Hide Model": "", "How can I help you today?": "Como posso ajudá-lo hoje?", "Hybrid Search": "Pesquisa Híbrida", "Image Generation (Experimental)": "Geração de Imagens (Experimental)", @@ -266,6 +269,7 @@ "Images": "Imagens", "Import Chats": "Importar Bate-papos", "Import Documents Mapping": "Importar Mapeamento de Documentos", + "Import Functions": "", "Import Models": "Modelos de Importação", "Import Prompts": "Importar Prompts", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Pesquisar um modelo", "Search Chats": "Pesquisar bate-papos", "Search Documents": "Pesquisar Documentos", + "Search Functions": "", "Search Models": "Modelos de Pesquisa", "Search Prompts": "Pesquisar Prompts", "Search Query Generation Prompt": "", @@ -480,6 +485,7 @@ "short-summary": "resumo-curto", "Show": "Mostrar", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Mostrar", "Showcased creativity": "Criatividade Exibida", "sidebar": "barra lateral", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index c9b004903..b7a76ee5f 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "Exportar Conversa (.json)", "Export Chats": "Exportar Conversas", "Export Documents Mapping": "Exportar Mapeamento de Documentos", + "Export Functions": "", "Export Models": "Modelos de Exportação", "Export Prompts": "Exportar Prompts", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Seguiu instruções perfeitamente", "Format your variables using square brackets like this:": "Formate as suas variáveis usando parenteses rectos como este:", "Frequency Penalty": "Penalidade de Frequência", + "Functions": "", "General": "Geral", "General Settings": "Configurações Gerais", "Generate Image": "Gerar imagem", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Olá, {{name}}", "Help": "Ajuda", "Hide": "Ocultar", + "Hide Model": "", "How can I help you today?": "Como posso ajudá-lo hoje?", "Hybrid Search": "Pesquisa Híbrida", "Image Generation (Experimental)": "Geração de Imagens (Experimental)", @@ -266,6 +269,7 @@ "Images": "Imagens", "Import Chats": "Importar Conversas", "Import Documents Mapping": "Importar Mapeamento de Documentos", + "Import Functions": "", "Import Models": "Importar Modelos", "Import Prompts": "Importar Prompts", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Pesquisar um modelo", "Search Chats": "Pesquisar Conversas", "Search Documents": "Pesquisar Documentos", + "Search Functions": "", "Search Models": "Modelos de pesquisa", "Search Prompts": "Pesquisar Prompts", "Search Query Generation Prompt": "Prompt de geração de consulta de pesquisa", @@ -480,6 +485,7 @@ "short-summary": "resumo-curto", "Show": "Mostrar", "Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na sobreposição de Conta Pendente", + "Show Model": "", "Show shortcuts": "Mostrar atalhos", "Showcased creativity": "Criatividade Exibida", "sidebar": "barra lateral", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 6806963f9..9f19e2b62 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Экспортировать чаты", "Export Documents Mapping": "Экспортировать отображение документов", + "Export Functions": "", "Export Models": "Экспорт моделей", "Export Prompts": "Экспортировать промты", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Учитывая инструкции идеально", "Format your variables using square brackets like this:": "Форматируйте ваши переменные, используя квадратные скобки, как здесь:", "Frequency Penalty": "Штраф за частоту", + "Functions": "", "General": "Общее", "General Settings": "Общие настройки", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Привет, {{name}}", "Help": "Помощь", "Hide": "Скрыть", + "Hide Model": "", "How can I help you today?": "Чем я могу помочь вам сегодня?", "Hybrid Search": "Гибридная поисковая система", "Image Generation (Experimental)": "Генерация изображений (Экспериментально)", @@ -266,6 +269,7 @@ "Images": "Изображения", "Import Chats": "Импорт чатов", "Import Documents Mapping": "Импорт сопоставления документов", + "Import Functions": "", "Import Models": "Импорт моделей", "Import Prompts": "Импорт подсказок", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Поиск модели", "Search Chats": "Поиск в чатах", "Search Documents": "Поиск документов", + "Search Functions": "", "Search Models": "Поиск моделей", "Search Prompts": "Поиск промтов", "Search Query Generation Prompt": "", @@ -481,6 +486,7 @@ "short-summary": "краткое описание", "Show": "Показать", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Показать клавиатурные сокращения", "Showcased creativity": "Показать творчество", "sidebar": "боковая панель", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index d8a71b2df..e01b28361 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "Извези ћаскања", "Export Documents Mapping": "Извези мапирање докумената", + "Export Functions": "", "Export Models": "Извези моделе", "Export Prompts": "Извези упите", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Упутства су савршено праћена", "Format your variables using square brackets like this:": "Форматирајте ваше променљиве користећи угластe заграде овако:", "Frequency Penalty": "Фреквентна казна", + "Functions": "", "General": "Опште", "General Settings": "Општа подешавања", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Здраво, {{name}}", "Help": "Помоћ", "Hide": "Сакриј", + "Hide Model": "", "How can I help you today?": "Како могу да вам помогнем данас?", "Hybrid Search": "Хибридна претрага", "Image Generation (Experimental)": "Стварање слика (експериментално)", @@ -266,6 +269,7 @@ "Images": "Слике", "Import Chats": "Увези ћаскања", "Import Documents Mapping": "Увези мапирање докумената", + "Import Functions": "", "Import Models": "Увези моделе", "Import Prompts": "Увези упите", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Претражи модел", "Search Chats": "Претражи ћаскања", "Search Documents": "Претражи документе", + "Search Functions": "", "Search Models": "Модели претраге", "Search Prompts": "Претражи упите", "Search Query Generation Prompt": "", @@ -480,6 +485,7 @@ "short-summary": "кратак сажетак", "Show": "Прикажи", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Прикажи пречице", "Showcased creativity": "Приказана креативност", "sidebar": "бочна трака", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 2d065b5fc..00226639b 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "Exportera chatt (.json)", "Export Chats": "Exportera chattar", "Export Documents Mapping": "Exportera dokumentmappning", + "Export Functions": "", "Export Models": "Exportera modeller", "Export Prompts": "Exportera instruktioner", "Export Tools": "Exportera verktyg", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Följde instruktionerna perfekt", "Format your variables using square brackets like this:": "Formatera dina variabler med hakparenteser så här:", "Frequency Penalty": "Straff för frekvens", + "Functions": "", "General": "Allmän", "General Settings": "Allmänna inställningar", "Generate Image": "Generera bild", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Hej, {{name}}", "Help": "Hjälp", "Hide": "Dölj", + "Hide Model": "", "How can I help you today?": "Hur kan jag hjälpa dig idag?", "Hybrid Search": "Hybrid sökning", "Image Generation (Experimental)": "Bildgenerering (experimentell)", @@ -266,6 +269,7 @@ "Images": "Bilder", "Import Chats": "Importera chattar", "Import Documents Mapping": "Importera dokumentmappning", + "Import Functions": "", "Import Models": "Importera modeller", "Import Prompts": "Importera instruktioner", "Import Tools": "Importera verktyg", @@ -430,6 +434,7 @@ "Search a model": "Sök efter en modell", "Search Chats": "Sök i chattar", "Search Documents": "Sök dokument", + "Search Functions": "", "Search Models": "Sök modeller", "Search Prompts": "Sök instruktioner", "Search Query Generation Prompt": "Instruktion för generering av sökfrågor", @@ -479,6 +484,7 @@ "short-summary": "kort sammanfattning", "Show": "Visa", "Show Admin Details in Account Pending Overlay": "Visa administratörsinformation till väntande konton", + "Show Model": "", "Show shortcuts": "Visa genvägar", "Showcased creativity": "Visade kreativitet", "sidebar": "sidofält", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index a34aaf22b..ef2678552 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "", "Export Documents Mapping": "", + "Export Functions": "", "Export Models": "", "Export Prompts": "", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", + "Functions": "", "General": "", "General Settings": "", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "", "Help": "", "Hide": "", + "Hide Model": "", "How can I help you today?": "", "Hybrid Search": "", "Image Generation (Experimental)": "", @@ -266,6 +269,7 @@ "Images": "", "Import Chats": "", "Import Documents Mapping": "", + "Import Functions": "", "Import Models": "", "Import Prompts": "", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "", + "Search Functions": "", "Search Models": "", "Search Prompts": "", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "", "Show": "", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "", "Showcased creativity": "", "sidebar": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index 556ae9372..8846208ed 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "Sohbeti dışa aktar (.json)", "Export Chats": "Sohbetleri Dışa Aktar", "Export Documents Mapping": "Belge Eşlemesini Dışa Aktar", + "Export Functions": "", "Export Models": "Modelleri Dışa Aktar", "Export Prompts": "Promptları Dışa Aktar", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Talimatları mükemmel şekilde takip etti", "Format your variables using square brackets like this:": "Değişkenlerinizi şu şekilde kare parantezlerle biçimlendirin:", "Frequency Penalty": "Frekans Cezası", + "Functions": "", "General": "Genel", "General Settings": "Genel Ayarlar", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Merhaba, {{name}}", "Help": "Yardım", "Hide": "Gizle", + "Hide Model": "", "How can I help you today?": "Bugün size nasıl yardımcı olabilirim?", "Hybrid Search": "Karma Arama", "Image Generation (Experimental)": "Görüntü Oluşturma (Deneysel)", @@ -266,6 +269,7 @@ "Images": "Görüntüler", "Import Chats": "Sohbetleri İçe Aktar", "Import Documents Mapping": "Belge Eşlemesini İçe Aktar", + "Import Functions": "", "Import Models": "Modelleri İçe Aktar", "Import Prompts": "Promptları İçe Aktar", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Bir model ara", "Search Chats": "Sohbetleri Ara", "Search Documents": "Belgeleri Ara", + "Search Functions": "", "Search Models": "Modelleri Ara", "Search Prompts": "Prompt Ara", "Search Query Generation Prompt": "", @@ -479,6 +484,7 @@ "short-summary": "kısa-özet", "Show": "Göster", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Kısayolları göster", "Showcased creativity": "Sergilenen yaratıcılık", "sidebar": "kenar çubuğu", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 4d97da286..e2cb5f3fb 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "Експорт чату (.json)", "Export Chats": "Експортувати чати", "Export Documents Mapping": "Експортувати відображення документів", + "Export Functions": "", "Export Models": "Експорт моделей", "Export Prompts": "Експортувати промти", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Бездоганно дотримувався інструкцій", "Format your variables using square brackets like this:": "Форматуйте свої змінні квадратними дужками так:", "Frequency Penalty": "Штраф за частоту", + "Functions": "", "General": "Загальні", "General Settings": "Загальні налаштування", "Generate Image": "Створити зображення", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Привіт, {{name}}", "Help": "Допоможіть", "Hide": "Приховати", + "Hide Model": "", "How can I help you today?": "Чим я можу допомогти вам сьогодні?", "Hybrid Search": "Гібридний пошук", "Image Generation (Experimental)": "Генерування зображень (експериментально)", @@ -266,6 +269,7 @@ "Images": "Зображення", "Import Chats": "Імпортувати чати", "Import Documents Mapping": "Імпортувати відображення документів", + "Import Functions": "", "Import Models": "Імпорт моделей", "Import Prompts": "Імпортувати промти", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Шукати модель", "Search Chats": "Пошук в чатах", "Search Documents": "Пошук документів", + "Search Functions": "", "Search Models": "Пошук моделей", "Search Prompts": "Пошук промтів", "Search Query Generation Prompt": "", @@ -481,6 +486,7 @@ "short-summary": "короткий зміст", "Show": "Показати", "Show Admin Details in Account Pending Overlay": "Відобразити дані адміна у вікні очікування облікового запису", + "Show Model": "", "Show shortcuts": "Показати клавіатурні скорочення", "Showcased creativity": "Продемонстрований креатив", "sidebar": "бокова панель", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 8d3f51234..aed065c51 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "Tải chat (.json)", "Export Chats": "Tải nội dung chat về máy", "Export Documents Mapping": "Tải cấu trúc tài liệu về máy", + "Export Functions": "", "Export Models": "Tải Models về máy", "Export Prompts": "Tải các prompt về máy", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "Tuân theo chỉ dẫn một cách hoàn hảo", "Format your variables using square brackets like this:": "Định dạng các biến của bạn bằng cách sử dụng dấu ngoặc vuông như thế này:", "Frequency Penalty": "Hình phạt tần số", + "Functions": "", "General": "Cài đặt chung", "General Settings": "Cấu hình chung", "Generate Image": "Sinh ảnh", @@ -258,6 +260,7 @@ "Hello, {{name}}": "Xin chào {{name}}", "Help": "Trợ giúp", "Hide": "Ẩn", + "Hide Model": "", "How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?", "Hybrid Search": "Tìm kiếm Hybrid", "Image Generation (Experimental)": "Tạo ảnh (thử nghiệm)", @@ -266,6 +269,7 @@ "Images": "Hình ảnh", "Import Chats": "Nạp lại nội dung chat", "Import Documents Mapping": "Nạp cấu trúc tài liệu", + "Import Functions": "", "Import Models": "Nạp model", "Import Prompts": "Nạp các prompt lên hệ thống", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "Tìm model", "Search Chats": "Tìm kiếm các cuộc Chat", "Search Documents": "Tìm tài liệu", + "Search Functions": "", "Search Models": "Tìm model", "Search Prompts": "Tìm prompt", "Search Query Generation Prompt": "Prompt tạo câu truy vấn, tìm kiếm", @@ -478,6 +483,7 @@ "short-summary": "tóm tắt ngắn", "Show": "Hiển thị", "Show Admin Details in Account Pending Overlay": "Hiển thị thông tin của Quản trị viên trên màn hình hiển thị Tài khoản đang chờ xử lý", + "Show Model": "", "Show shortcuts": "Hiển thị phím tắt", "Showcased creativity": "Thể hiện sự sáng tạo", "sidebar": "thanh bên", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index ebce8afa3..cdf284fd3 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "JSON 文件 (.json)", "Export Chats": "导出对话", "Export Documents Mapping": "导出文档映射", + "Export Functions": "", "Export Models": "导出模型", "Export Prompts": "导出提示词", "Export Tools": "导出工具", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "完全按照指示执行", "Format your variables using square brackets like this:": "使用这样的方括号格式化你的变量:", "Frequency Penalty": "频率惩罚", + "Functions": "", "General": "通用", "General Settings": "通用设置", "Generate Image": "生成图像", @@ -258,6 +260,7 @@ "Hello, {{name}}": "你好,{{name}}", "Help": "帮助", "Hide": "隐藏", + "Hide Model": "", "How can I help you today?": "今天我能帮你做些什么?", "Hybrid Search": "混合搜索", "Image Generation (Experimental)": "图像生成(实验性)", @@ -266,6 +269,7 @@ "Images": "图像", "Import Chats": "导入对话记录", "Import Documents Mapping": "导入文档映射", + "Import Functions": "", "Import Models": "导入模型", "Import Prompts": "导入提示词", "Import Tools": "导入工具", @@ -430,6 +434,7 @@ "Search a model": "搜索模型", "Search Chats": "搜索对话", "Search Documents": "搜索文档", + "Search Functions": "", "Search Models": "搜索模型", "Search Prompts": "搜索提示词", "Search Query Generation Prompt": "搜索查询生成提示", @@ -478,6 +483,7 @@ "short-summary": "简短总结", "Show": "显示", "Show Admin Details in Account Pending Overlay": "在用户待激活界面中显示管理员邮箱等详细信息", + "Show Model": "", "Show shortcuts": "显示快捷方式", "Showcased creativity": "很有创意", "sidebar": "侧边栏", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index a52358898..ddb7d0b4e 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -228,6 +228,7 @@ "Export chat (.json)": "", "Export Chats": "匯出聊天紀錄", "Export Documents Mapping": "匯出文件映射", + "Export Functions": "", "Export Models": "匯出模型", "Export Prompts": "匯出提示詞", "Export Tools": "", @@ -245,6 +246,7 @@ "Followed instructions perfectly": "完全遵循指示", "Format your variables using square brackets like this:": "像這樣使用方括號來格式化你的變數:", "Frequency Penalty": "頻率懲罰", + "Functions": "", "General": "常用", "General Settings": "常用設定", "Generate Image": "", @@ -258,6 +260,7 @@ "Hello, {{name}}": "你好,{{name}}", "Help": "幫助", "Hide": "隱藏", + "Hide Model": "", "How can I help you today?": "今天能為你做什麼?", "Hybrid Search": "混合搜索", "Image Generation (Experimental)": "圖像生成(實驗功能)", @@ -266,6 +269,7 @@ "Images": "圖片", "Import Chats": "匯入聊天紀錄", "Import Documents Mapping": "匯入文件映射", + "Import Functions": "", "Import Models": "匯入模型", "Import Prompts": "匯入提示詞", "Import Tools": "", @@ -430,6 +434,7 @@ "Search a model": "搜尋模型", "Search Chats": "搜尋聊天", "Search Documents": "搜尋文件", + "Search Functions": "", "Search Models": "搜尋模型", "Search Prompts": "搜尋提示詞", "Search Query Generation Prompt": "", @@ -478,6 +483,7 @@ "short-summary": "簡短摘要", "Show": "顯示", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "顯示快速鍵", "Showcased creativity": "展示創造性", "sidebar": "側邊欄", From 698556775837cc9c2b5e7b09110e39653aa22b2b Mon Sep 17 00:00:00 2001 From: Karl Lee <61072264+KarlLee830@users.noreply.github.com> Date: Wed, 19 Jun 2024 02:10:01 +0800 Subject: [PATCH 061/287] Update Chinese translation --- src/lib/i18n/locales/zh-CN/translation.json | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index cdf284fd3..c46a11844 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -82,9 +82,9 @@ "Capabilities": "能力", "Change Password": "更改密码", "Chat": "对话", - "Chat Background Image": "", + "Chat Background Image": "对话背景图片", "Chat Bubble UI": "气泡样式对话", - "Chat direction": "对话文字方向", + "Chat direction": "对话样式方向", "Chat History": "对话历史记录", "Chat History is off for this browser.": "此浏览器已关闭对话历史记录功能。", "Chats": "对话", @@ -228,7 +228,7 @@ "Export chat (.json)": "JSON 文件 (.json)", "Export Chats": "导出对话", "Export Documents Mapping": "导出文档映射", - "Export Functions": "", + "Export Functions": "导出功能", "Export Models": "导出模型", "Export Prompts": "导出提示词", "Export Tools": "导出工具", @@ -246,7 +246,7 @@ "Followed instructions perfectly": "完全按照指示执行", "Format your variables using square brackets like this:": "使用这样的方括号格式化你的变量:", "Frequency Penalty": "频率惩罚", - "Functions": "", + "Functions": "功能", "General": "通用", "General Settings": "通用设置", "Generate Image": "生成图像", @@ -260,8 +260,8 @@ "Hello, {{name}}": "你好,{{name}}", "Help": "帮助", "Hide": "隐藏", - "Hide Model": "", - "How can I help you today?": "今天我能帮你做些什么?", + "Hide Model": "隐藏模型", + "How can I help you today?": "今天我能帮您做些什么?", "Hybrid Search": "混合搜索", "Image Generation (Experimental)": "图像生成(实验性)", "Image Generation Engine": "图像生成引擎", @@ -269,7 +269,7 @@ "Images": "图像", "Import Chats": "导入对话记录", "Import Documents Mapping": "导入文档映射", - "Import Functions": "", + "Import Functions": "导入功能", "Import Models": "导入模型", "Import Prompts": "导入提示词", "Import Tools": "导入工具", @@ -414,7 +414,7 @@ "Reranking Model": "重排模型", "Reranking model disabled": "重排模型已禁用", "Reranking model set to \"{{reranking_model}}\"": "重排模型设置为 \"{{reranking_model}}\"", - "Reset": "", + "Reset": "重置", "Reset Upload Directory": "重置上传目录", "Reset Vector Storage": "重置向量存储", "Response AutoCopy to Clipboard": "自动复制回复到剪贴板", @@ -434,7 +434,7 @@ "Search a model": "搜索模型", "Search Chats": "搜索对话", "Search Documents": "搜索文档", - "Search Functions": "", + "Search Functions": "搜索功能", "Search Models": "搜索模型", "Search Prompts": "搜索提示词", "Search Query Generation Prompt": "搜索查询生成提示", @@ -483,7 +483,7 @@ "short-summary": "简短总结", "Show": "显示", "Show Admin Details in Account Pending Overlay": "在用户待激活界面中显示管理员邮箱等详细信息", - "Show Model": "", + "Show Model": "显示模型", "Show shortcuts": "显示快捷方式", "Showcased creativity": "很有创意", "sidebar": "侧边栏", @@ -550,13 +550,13 @@ "Type": "类型", "Type Hugging Face Resolve (Download) URL": "输入 Hugging Face 解析(下载)URL", "Uh-oh! There was an issue connecting to {{provider}}.": "糟糕!连接到 {{provider}} 时出现问题。", - "UI": "", + "UI": "界面", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "未知文件类型'{{file_type}}',将视为纯文本进行处理", "Update": "更新", "Update and Copy Link": "更新和复制链接", "Update password": "更新密码", "Updated at": "更新于", - "Upload": "", + "Upload": "上传", "Upload a GGUF model": "上传一个 GGUF 模型", "Upload Files": "上传文件", "Upload Pipeline": "上传 Pipeline", @@ -575,7 +575,7 @@ "variable": "变量", "variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换。", "Version": "版本", - "Voice": "", + "Voice": "语音", "Warning": "警告", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果您修改了语义向量模型,则需要重新导入所有文档。", "Web": "网页", From 3c0678fb842b6a4c4978398b1645dfc7ff5d784d Mon Sep 17 00:00:00 2001 From: Karl Lee <61072264+KarlLee830@users.noreply.github.com> Date: Wed, 19 Jun 2024 02:17:18 +0800 Subject: [PATCH 062/287] i18n: Update Chinese translation --- src/lib/i18n/locales/zh-CN/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index c46a11844..2c5b847dc 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -261,7 +261,7 @@ "Help": "帮助", "Hide": "隐藏", "Hide Model": "隐藏模型", - "How can I help you today?": "今天我能帮您做些什么?", + "How can I help you today?": "有什么我能帮您的吗?", "Hybrid Search": "混合搜索", "Image Generation (Experimental)": "图像生成(实验性)", "Image Generation Engine": "图像生成引擎", From 4d9220c2c80b25e0de4d36b318f859a4c74d3661 Mon Sep 17 00:00:00 2001 From: Karl Lee <61072264+KarlLee830@users.noreply.github.com> Date: Wed, 19 Jun 2024 02:21:34 +0800 Subject: [PATCH 063/287] i18n: Update Chinese translation --- src/lib/i18n/locales/zh-CN/translation.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 2c5b847dc..4714df516 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -67,7 +67,7 @@ "AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基础地址。", "available!": "版本可用!", "Back": "返回", - "Bad Response": "点踩回复", + "Bad Response": "点踩此回答", "Banners": "公告横幅", "Base Model (From)": "基础模型 (来自)", "Batch Size (num_batch)": "批大小 (num_batch)", @@ -252,12 +252,12 @@ "Generate Image": "生成图像", "Generating search query": "生成搜索查询", "Generation Info": "生成信息", - "Good Response": "点赞回复", + "Good Response": "点赞此回答", "Google PSE API Key": "Google PSE API 密钥", "Google PSE Engine Id": "Google PSE 引擎 ID", "h:mm a": "HH:mm", "has no conversations.": "没有对话。", - "Hello, {{name}}": "你好,{{name}}", + "Hello, {{name}}": "您好,{{name}}", "Help": "帮助", "Hide": "隐藏", "Hide Model": "隐藏模型", @@ -562,7 +562,7 @@ "Upload Pipeline": "上传 Pipeline", "Upload Progress": "上传进度", "URL Mode": "URL 模式", - "Use '#' in the prompt input to load and select your documents.": "在输入框中输入'#'号来选择并附带你的文档。", + "Use '#' in the prompt input to load and select your documents.": "在输入框中输入'#'号来选择你需要发送的文档。", "Use Gravatar": "使用来自 Gravatar 的头像", "Use Initials": "使用首个字符作为头像", "use_mlock (Ollama)": "use_mlock(Ollama)", From 146e550239be478c70cd0a3db57b2efe7136a856 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 18 Jun 2024 11:36:55 -0700 Subject: [PATCH 064/287] feat: files endpoint --- backend/apps/webui/main.py | 2 + backend/apps/webui/models/files.py | 103 +++++++++++++++++++++ backend/apps/webui/routers/files.py | 134 ++++++++++++++++++++++++++++ backend/main.py | 3 + 4 files changed, 242 insertions(+) create mode 100644 backend/apps/webui/models/files.py create mode 100644 backend/apps/webui/routers/files.py diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index 190d2d1c3..bdc6ec4f4 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -12,6 +12,7 @@ from apps.webui.routers import ( configs, memories, utils, + files, ) from config import ( WEBUI_BUILD_HASH, @@ -81,6 +82,7 @@ app.include_router(memories.router, prefix="/memories", tags=["memories"]) app.include_router(configs.router, prefix="/configs", tags=["configs"]) app.include_router(utils.router, prefix="/utils", tags=["utils"]) +app.include_router(files.router, prefix="/files", tags=["files"]) @app.get("/") diff --git a/backend/apps/webui/models/files.py b/backend/apps/webui/models/files.py new file mode 100644 index 000000000..c34bd46d8 --- /dev/null +++ b/backend/apps/webui/models/files.py @@ -0,0 +1,103 @@ +from pydantic import BaseModel +from peewee import * +from playhouse.shortcuts import model_to_dict +from typing import List, Union, Optional +import time +import logging +from apps.webui.internal.db import DB, JSONField + +import json + +from config import SRC_LOG_LEVELS + +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["MODELS"]) + +#################### +# Files DB Schema +#################### + + +class File(Model): + id = CharField(unique=True) + user_id = CharField() + filename = TextField() + meta = JSONField() + created_at = BigIntegerField() + + class Meta: + database = DB + + +class FileModel(BaseModel): + id: str + user_id: str + filename: str + meta: dict + created_at: int # timestamp in epoch + + +#################### +# Forms +#################### + + +class FileResponse(BaseModel): + id: str + user_id: str + filename: str + meta: dict + created_at: int # timestamp in epoch + + +class FileForm(BaseModel): + id: str + filename: str + meta: dict = {} + + +class FilesTable: + def __init__(self, db): + self.db = db + self.db.create_tables([File]) + + def insert_new_file(self, user_id: str, form_data: FileForm) -> Optional[FileModel]: + file = FileModel( + **{ + **form_data.model_dump(), + "user_id": user_id, + "created_at": int(time.time()), + } + ) + + try: + result = File.create(**file.model_dump()) + if result: + return file + else: + return None + except Exception as e: + print(f"Error creating tool: {e}") + return None + + def get_file_by_id(self, id: str) -> Optional[FileModel]: + try: + file = File.get(File.id == id) + return FileModel(**model_to_dict(file)) + except: + return None + + def get_files(self) -> List[FileModel]: + return [FileModel(**model_to_dict(file)) for file in File.select()] + + def delete_file_by_id(self, id: str) -> bool: + try: + query = File.delete().where((File.id == id)) + query.execute() # Remove the rows, return number of rows removed. + + return True + except: + return False + + +Files = FilesTable(DB) diff --git a/backend/apps/webui/routers/files.py b/backend/apps/webui/routers/files.py new file mode 100644 index 000000000..773386059 --- /dev/null +++ b/backend/apps/webui/routers/files.py @@ -0,0 +1,134 @@ +from fastapi import ( + Depends, + FastAPI, + HTTPException, + status, + Request, + UploadFile, + File, + Form, +) + + +from datetime import datetime, timedelta +from typing import List, Union, Optional + +from fastapi import APIRouter +from pydantic import BaseModel +import json + +from apps.webui.models.files import Files, FileForm, FileModel, FileResponse +from utils.utils import get_verified_user, get_admin_user +from constants import ERROR_MESSAGES + +from importlib import util +import os +import uuid + +from config import SRC_LOG_LEVELS, UPLOAD_DIR + + +import logging + +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["MODELS"]) + + +router = APIRouter() + +############################ +# Upload File +############################ + + +@router.post("/") +def upload_file( + file: UploadFile = File(...), + user=Depends(get_verified_user), +): + log.info(f"file.content_type: {file.content_type}") + try: + unsanitized_filename = file.filename + filename = os.path.basename(unsanitized_filename) + + # replace filename with uuid + id = str(uuid.uuid4()) + file_path = f"{UPLOAD_DIR}/{filename}" + + contents = file.file.read() + with open(file_path, "wb") as f: + f.write(contents) + f.close() + + file = Files.insert_new_file( + user.id, FileForm(**{"id": id, "filename": filename}) + ) + + if file: + return file + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error uploading file"), + ) + + except Exception as e: + log.exception(e) + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + + +############################ +# List Files +############################ + + +@router.get("/", response_model=List[FileModel]) +async def list_files(user=Depends(get_verified_user)): + files = Files.get_files() + return files + + +############################ +# Get File By Id +############################ + + +@router.get("/{id}", response_model=Optional[FileModel]) +async def get_file_by_id(id: str, user=Depends(get_verified_user)): + file = Files.get_file_by_id(id) + + if file: + return file + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + +############################ +# Delete File By Id +############################ + + +@router.delete("/{id}") +async def delete_file_by_id(id: str, user=Depends(get_verified_user)): + file = Files.get_file_by_id(id) + + if file: + result = Files.delete_file_by_id(id) + if result: + return {"message": "File deleted successfully"} + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error deleting file"), + ) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) diff --git a/backend/main.py b/backend/main.py index db1fa1640..7f82dd7c7 100644 --- a/backend/main.py +++ b/backend/main.py @@ -11,6 +11,7 @@ import requests import mimetypes import shutil import os +import uuid import inspect import asyncio @@ -76,6 +77,7 @@ from config import ( VERSION, CHANGELOG, FRONTEND_BUILD_DIR, + UPLOAD_DIR, CACHE_DIR, STATIC_DIR, ENABLE_OPENAI_API, @@ -1378,6 +1380,7 @@ async def update_pipeline_valves( ) + @app.get("/api/config") async def get_app_config(): # Checking and Handling the Absence of 'ui' in CONFIG_DATA From 7c2a1983709eb9fc169039ce756162bae1e1b6af Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 18 Jun 2024 11:38:50 -0700 Subject: [PATCH 065/287] feat: file db migration --- .../internal/migrations/014_add_files.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 backend/apps/webui/internal/migrations/014_add_files.py diff --git a/backend/apps/webui/internal/migrations/014_add_files.py b/backend/apps/webui/internal/migrations/014_add_files.py new file mode 100644 index 000000000..5e1acf0ad --- /dev/null +++ b/backend/apps/webui/internal/migrations/014_add_files.py @@ -0,0 +1,55 @@ +"""Peewee migrations -- 009_add_models.py. + +Some examples (model - class or model name):: + + > Model = migrator.orm['table_name'] # Return model in current state by name + > Model = migrator.ModelClass # Return model in current state by name + + > migrator.sql(sql) # Run custom SQL + > migrator.run(func, *args, **kwargs) # Run python function with the given args + > migrator.create_model(Model) # Create a model (could be used as decorator) + > migrator.remove_model(model, cascade=True) # Remove a model + > migrator.add_fields(model, **fields) # Add fields to a model + > migrator.change_fields(model, **fields) # Change fields + > migrator.remove_fields(model, *field_names, cascade=True) + > migrator.rename_field(model, old_field_name, new_field_name) + > migrator.rename_table(model, new_table_name) + > migrator.add_index(model, *col_names, unique=False) + > migrator.add_not_null(model, *field_names) + > migrator.add_default(model, field_name, default) + > migrator.add_constraint(model, name, sql) + > migrator.drop_index(model, *col_names) + > migrator.drop_not_null(model, *field_names) + > migrator.drop_constraints(model, *constraints) + +""" + +from contextlib import suppress + +import peewee as pw +from peewee_migrate import Migrator + + +with suppress(ImportError): + import playhouse.postgres_ext as pw_pext + + +def migrate(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your migrations here.""" + + @migrator.create_model + class File(pw.Model): + id = pw.TextField(unique=True) + user_id = pw.TextField() + filename = pw.TextField() + meta = pw.TextField() + created_at = pw.BigIntegerField(null=False) + + class Meta: + table_name = "file" + + +def rollback(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your rollback migrations here.""" + + migrator.remove_model("file") From 9e7b7a895e77149fac9c99338f5a7b51549c8ac3 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 18 Jun 2024 13:50:18 -0700 Subject: [PATCH 066/287] refac: file upload --- backend/apps/rag/main.py | 54 +++++++++ backend/apps/webui/routers/files.py | 13 +- src/lib/apis/files/index.ts | 125 ++++++++++++++++++++ src/lib/apis/rag/index.ts | 30 +++++ src/lib/components/chat/MessageInput.svelte | 124 +++++++++---------- 5 files changed, 285 insertions(+), 61 deletions(-) create mode 100644 src/lib/apis/files/index.ts diff --git a/backend/apps/rag/main.py b/backend/apps/rag/main.py index 49146a215..3bd7303bd 100644 --- a/backend/apps/rag/main.py +++ b/backend/apps/rag/main.py @@ -55,6 +55,9 @@ from apps.webui.models.documents import ( DocumentForm, DocumentResponse, ) +from apps.webui.models.files import ( + Files, +) from apps.rag.utils import ( get_model_path, @@ -1131,6 +1134,57 @@ def store_doc( ) +class ProcessDocForm(BaseModel): + file_id: str + + +@app.post("/process/doc") +def process_doc( + form_data: ProcessDocForm, + user=Depends(get_current_user), +): + try: + file = Files.get_file_by_id(form_data.file_id) + file_path = file.meta.get("path", f"{UPLOAD_DIR}/{file.filename}") + + f = open(file_path, "rb") + if collection_name == None: + collection_name = calculate_sha256(f)[:63] + f.close() + + loader, known_type = get_loader( + file.filename, file.meta.get("content_type"), file_path + ) + data = loader.load() + + try: + result = store_data_in_vector_db(data, collection_name) + + if result: + return { + "status": True, + "collection_name": collection_name, + "known_type": known_type, + } + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=e, + ) + except Exception as e: + log.exception(e) + if "No pandoc was found" in str(e): + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.PANDOC_NOT_INSTALLED, + ) + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + + class TextRAGForm(BaseModel): name: str content: str diff --git a/backend/apps/webui/routers/files.py b/backend/apps/webui/routers/files.py index 773386059..a231f7bb1 100644 --- a/backend/apps/webui/routers/files.py +++ b/backend/apps/webui/routers/files.py @@ -61,7 +61,18 @@ def upload_file( f.close() file = Files.insert_new_file( - user.id, FileForm(**{"id": id, "filename": filename}) + user.id, + FileForm( + **{ + "id": id, + "filename": filename, + "meta": { + "content_type": file.content_type, + "size": len(contents), + "path": file_path, + }, + } + ), ) if file: diff --git a/src/lib/apis/files/index.ts b/src/lib/apis/files/index.ts new file mode 100644 index 000000000..30222b5d5 --- /dev/null +++ b/src/lib/apis/files/index.ts @@ -0,0 +1,125 @@ +import { WEBUI_API_BASE_URL } from '$lib/constants'; + +export const uploadFile = async (token: string, file: File) => { + const data = new FormData(); + data.append('file', file); + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/files/`, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + }, + body: data + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .catch((err) => { + error = err.detail; + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const getFiles = async (token: string = '') => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/files/`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const getFileById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/files/${id}`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const deleteFileById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/files/${id}`, { + method: 'DELETE', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; diff --git a/src/lib/apis/rag/index.ts b/src/lib/apis/rag/index.ts index ca68827a3..5639830c1 100644 --- a/src/lib/apis/rag/index.ts +++ b/src/lib/apis/rag/index.ts @@ -164,6 +164,36 @@ export const updateQuerySettings = async (token: string, settings: QuerySettings return res; }; +export const processDocToVectorDB = async (token: string, file_id: string) => { + let error = null; + + const res = await fetch(`${RAG_API_BASE_URL}/process/doc`, { + method: 'POST', + headers: { + Accept: 'application/json', + authorization: `Bearer ${token}` + }, + body: JSON.stringify({ + file_id: file_id + }) + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .catch((err) => { + error = err.detail; + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + export const uploadDocToVectorDB = async (token: string, collection_name: string, file: File) => { const data = new FormData(); data.append('file', file); diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index 7f0beb9c7..f6bc595b2 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -15,10 +15,13 @@ import { blobToFile, calculateSHA256, findWordIndices } from '$lib/utils'; import { + processDocToVectorDB, uploadDocToVectorDB, uploadWebToVectorDB, uploadYoutubeTranscriptionToVectorDB } from '$lib/apis/rag'; + + import { uploadFile } from '$lib/apis/files'; import { SUPPORTED_FILE_TYPE, SUPPORTED_FILE_EXTENSIONS, WEBUI_BASE_URL } from '$lib/constants'; import Prompts from './MessageInput/PromptCommands.svelte'; @@ -86,43 +89,70 @@ element.scrollTop = element.scrollHeight; }; - const uploadDoc = async (file) => { + const uploadFileHandler = async (file) => { console.log(file); - - const doc = { - type: 'doc', - name: file.name, - collection_name: '', - upload_status: false, - error: '' - }; - - try { - files = [...files, doc]; - - if (['audio/mpeg', 'audio/wav'].includes(file['type'])) { - const res = await transcribeAudio(localStorage.token, file).catch((error) => { - toast.error(error); - return null; - }); - - if (res) { - console.log(res); - const blob = new Blob([res.text], { type: 'text/plain' }); - file = blobToFile(blob, `${file.name}.txt`); - } - } - - const res = await uploadDocToVectorDB(localStorage.token, '', file); + // Check if the file is an audio file and transcribe/convert it to text file + if (['audio/mpeg', 'audio/wav'].includes(file['type'])) { + const res = await transcribeAudio(localStorage.token, file).catch((error) => { + toast.error(error); + return null; + }); if (res) { - doc.upload_status = true; - doc.collection_name = res.collection_name; + console.log(res); + const blob = new Blob([res.text], { type: 'text/plain' }); + file = blobToFile(blob, `${file.name}.txt`); + } + } + + // Upload the file to the server + const uploadedFile = await uploadFile(localStorage.token, file).catch((error) => { + toast.error(error); + return null; + }); + + if (uploadedFile) { + const fileItem = { + type: 'file', + file: uploadedFile, + id: 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 + // 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}}', but accepting and treating as plain text`, { + file_type: file['type'] + }) + ); + processFileItem(fileItem); + } + } + }; + + const processFileItem = async (fileItem) => { + try { + const res = await processDocToVectorDB(localStorage.token, fileItem.id); + + if (res) { + fileItem.status = 'processed'; + fileItem.collection_name = res.collection_name; files = files; } } catch (e) { // Remove the failed doc from the files array - files = files.filter((f) => f.name !== file.name); + files = files.filter((f) => f.id !== fileItem.id); toast.error(e); } }; @@ -230,19 +260,8 @@ ]; }; reader.readAsDataURL(file); - } else if ( - SUPPORTED_FILE_TYPE.includes(file['type']) || - SUPPORTED_FILE_EXTENSIONS.includes(file.name.split('.').at(-1)) - ) { - uploadDoc(file); } else { - toast.error( - $i18n.t( - `Unknown File Type '{{file_type}}', but accepting and treating as plain text`, - { file_type: file['type'] } - ) - ); - uploadDoc(file); + uploadFileHandler(file); } }); } else { @@ -409,8 +428,6 @@ if (['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(file['type'])) { if (visionCapableModels.length === 0) { toast.error($i18n.t('Selected model(s) do not support image inputs')); - inputFiles = null; - filesInputElement.value = ''; return; } let reader = new FileReader(); @@ -422,30 +439,17 @@ url: `${event.target.result}` } ]; - inputFiles = null; - filesInputElement.value = ''; }; reader.readAsDataURL(file); - } else if ( - SUPPORTED_FILE_TYPE.includes(file['type']) || - SUPPORTED_FILE_EXTENSIONS.includes(file.name.split('.').at(-1)) - ) { - uploadDoc(file); - filesInputElement.value = ''; } else { - toast.error( - $i18n.t( - `Unknown File Type '{{file_type}}', but accepting and treating as plain text`, - { file_type: file['type'] } - ) - ); - uploadDoc(file); - filesInputElement.value = ''; + uploadFileHandler(file); } }); } else { toast.error($i18n.t(`File not found.`)); } + + filesInputElement.value = ''; }} /> From 83986620ee6595fcd6a879490c71c5708db3d315 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 18 Jun 2024 14:15:08 -0700 Subject: [PATCH 067/287] refac --- backend/apps/rag/main.py | 3 ++ backend/apps/webui/models/files.py | 9 +++++ backend/apps/webui/routers/files.py | 18 +++++++++ src/lib/apis/files/index.ts | 1 - src/lib/apis/rag/index.ts | 1 + src/lib/components/chat/MessageInput.svelte | 5 +-- src/lib/utils/characters/index.ts | 38 +++++++++++++++---- .../workspace/models/create/+page.svelte | 2 + 8 files changed, 66 insertions(+), 11 deletions(-) diff --git a/backend/apps/rag/main.py b/backend/apps/rag/main.py index 3bd7303bd..00ae4e892 100644 --- a/backend/apps/rag/main.py +++ b/backend/apps/rag/main.py @@ -1136,6 +1136,7 @@ def store_doc( class ProcessDocForm(BaseModel): file_id: str + collection_name: Optional[str] = None @app.post("/process/doc") @@ -1148,6 +1149,8 @@ def process_doc( file_path = file.meta.get("path", f"{UPLOAD_DIR}/{file.filename}") f = open(file_path, "rb") + + collection_name = form_data.collection_name if collection_name == None: collection_name = calculate_sha256(f)[:63] f.close() diff --git a/backend/apps/webui/models/files.py b/backend/apps/webui/models/files.py index c34bd46d8..c62fa4019 100644 --- a/backend/apps/webui/models/files.py +++ b/backend/apps/webui/models/files.py @@ -99,5 +99,14 @@ class FilesTable: except: return False + def delete_all_files(self) -> bool: + try: + query = File.delete() + query.execute() # Remove the rows, return number of rows removed. + + return True + except: + return False + Files = FilesTable(DB) diff --git a/backend/apps/webui/routers/files.py b/backend/apps/webui/routers/files.py index a231f7bb1..471079e4c 100644 --- a/backend/apps/webui/routers/files.py +++ b/backend/apps/webui/routers/files.py @@ -53,6 +53,7 @@ def upload_file( # replace filename with uuid id = str(uuid.uuid4()) + filename = f"{id}_{filename}" file_path = f"{UPLOAD_DIR}/{filename}" contents = file.file.read() @@ -143,3 +144,20 @@ async def delete_file_by_id(id: str, user=Depends(get_verified_user)): status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND, ) + + +############################ +# Delete All Files +############################ + + +@router.delete("/all") +async def delete_all_files(user=Depends(get_admin_user)): + result = Files.delete_all_files() + if result: + return {"message": "All files deleted successfully"} + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error deleting files"), + ) diff --git a/src/lib/apis/files/index.ts b/src/lib/apis/files/index.ts index 30222b5d5..d467d2889 100644 --- a/src/lib/apis/files/index.ts +++ b/src/lib/apis/files/index.ts @@ -9,7 +9,6 @@ export const uploadFile = async (token: string, file: File) => { method: 'POST', headers: { Accept: 'application/json', - 'Content-Type': 'application/json', authorization: `Bearer ${token}` }, body: data diff --git a/src/lib/apis/rag/index.ts b/src/lib/apis/rag/index.ts index 5639830c1..50f236e06 100644 --- a/src/lib/apis/rag/index.ts +++ b/src/lib/apis/rag/index.ts @@ -171,6 +171,7 @@ export const processDocToVectorDB = async (token: string, file_id: string) => { method: 'POST', headers: { Accept: 'application/json', + 'Content-Type': 'application/json', authorization: `Bearer ${token}` }, body: JSON.stringify({ diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index f6bc595b2..ce619e31d 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -147,7 +147,6 @@ if (res) { fileItem.status = 'processed'; - fileItem.collection_name = res.collection_name; files = files; } } catch (e) { @@ -523,12 +522,12 @@ {/if}
- {:else if file.type === 'doc'} + {:else if ['doc', 'file'].includes(file.type)}
- {#if file.upload_status} + {#if file.status === 'processed'} { const extractCharacter = (json) => { function getTrimmedValue(json, keys) { - return keys.map((key) => json[key]).find((value) => value && value.trim()); + return keys + .map((key) => { + const keyParts = key.split('.'); + let value = json; + for (const part of keyParts) { + if (value && value[part] != null) { + value = value[part]; + } else { + value = null; + break; + } + } + return value && value.trim(); + }) + .find((value) => value); } - const name = getTrimmedValue(json, ['char_name', 'name']); - const summary = getTrimmedValue(json, ['personality', 'title']); - const personality = getTrimmedValue(json, ['char_persona', 'description']); - const scenario = getTrimmedValue(json, ['world_scenario', 'scenario']); - const greeting = getTrimmedValue(json, ['char_greeting', 'greeting', 'first_mes']); - const examples = getTrimmedValue(json, ['example_dialogue', 'mes_example', 'definition']); + const name = getTrimmedValue(json, ['char_name', 'name', 'data.name']); + const summary = getTrimmedValue(json, ['personality', 'title', 'data.description']); + const personality = getTrimmedValue(json, ['char_persona', 'description', 'data.personality']); + const scenario = getTrimmedValue(json, ['world_scenario', 'scenario', 'data.scenario']); + const greeting = getTrimmedValue(json, [ + 'char_greeting', + 'greeting', + 'first_mes', + 'data.first_mes' + ]); + const examples = getTrimmedValue(json, [ + 'example_dialogue', + 'mes_example', + 'definition', + 'data.mes_example' + ]); return { name, summary, personality, scenario, greeting, examples }; }; diff --git a/src/routes/(app)/workspace/models/create/+page.svelte b/src/routes/(app)/workspace/models/create/+page.svelte index eb2ed761b..b870dec58 100644 --- a/src/routes/(app)/workspace/models/create/+page.svelte +++ b/src/routes/(app)/workspace/models/create/+page.svelte @@ -226,6 +226,8 @@ return null; }); + console.log(character); + if (character && character.character) { character = character.character; console.log(character); From b4bdea6d85047e58aeab80941d9a1ac78e61f0b7 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 18 Jun 2024 14:33:44 -0700 Subject: [PATCH 068/287] fix: files --- backend/apps/webui/models/files.py | 2 +- backend/apps/webui/routers/files.py | 39 ++++++++++++++++- src/lib/apis/files/index.ts | 28 +++++++++++++ src/lib/components/chat/MessageInput.svelte | 8 +++- .../chat/Messages/UserMessage.svelte | 42 +++++++++++++++++++ 5 files changed, 116 insertions(+), 3 deletions(-) diff --git a/backend/apps/webui/models/files.py b/backend/apps/webui/models/files.py index c62fa4019..6459ad725 100644 --- a/backend/apps/webui/models/files.py +++ b/backend/apps/webui/models/files.py @@ -42,7 +42,7 @@ class FileModel(BaseModel): #################### -class FileResponse(BaseModel): +class FileModelResponse(BaseModel): id: str user_id: str filename: str diff --git a/backend/apps/webui/routers/files.py b/backend/apps/webui/routers/files.py index 471079e4c..37cee6580 100644 --- a/backend/apps/webui/routers/files.py +++ b/backend/apps/webui/routers/files.py @@ -12,12 +12,20 @@ from fastapi import ( from datetime import datetime, timedelta from typing import List, Union, Optional +from pathlib import Path from fastapi import APIRouter +from fastapi.responses import StreamingResponse, JSONResponse, FileResponse + from pydantic import BaseModel import json -from apps.webui.models.files import Files, FileForm, FileModel, FileResponse +from apps.webui.models.files import ( + Files, + FileForm, + FileModel, + FileModelResponse, +) from utils.utils import get_verified_user, get_admin_user from constants import ERROR_MESSAGES @@ -121,6 +129,35 @@ async def get_file_by_id(id: str, user=Depends(get_verified_user)): ) +############################ +# Get File Content By Id +############################ + + +@router.get("/{id}/content", response_model=Optional[FileModel]) +async def get_file_content_by_id(id: str, user=Depends(get_verified_user)): + file = Files.get_file_by_id(id) + + if file: + file_path = Path(file.meta["path"]) + + # Check if the file already exists in the cache + if file_path.is_file(): + + print(f"file_path: {file_path}") + return FileResponse(file_path) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + ############################ # Delete File By Id ############################ diff --git a/src/lib/apis/files/index.ts b/src/lib/apis/files/index.ts index d467d2889..352fa509b 100644 --- a/src/lib/apis/files/index.ts +++ b/src/lib/apis/files/index.ts @@ -92,6 +92,34 @@ export const getFileById = async (token: string, id: string) => { return res; }; +export const getFileContentById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/files/${id}/content`, { + method: 'GET', + headers: { + Accept: 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return await res.blob(); + }) + .catch((err) => { + error = err.detail; + console.log(err); + + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + export const deleteFileById = async (token: string, id: string) => { let error = null; diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index ce619e31d..f199b9154 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -22,7 +22,12 @@ } from '$lib/apis/rag'; import { uploadFile } from '$lib/apis/files'; - import { SUPPORTED_FILE_TYPE, SUPPORTED_FILE_EXTENSIONS, WEBUI_BASE_URL } from '$lib/constants'; + import { + SUPPORTED_FILE_TYPE, + SUPPORTED_FILE_EXTENSIONS, + WEBUI_BASE_URL, + WEBUI_API_BASE_URL + } from '$lib/constants'; import Prompts from './MessageInput/PromptCommands.svelte'; import Suggestions from './MessageInput/Suggestions.svelte'; @@ -116,6 +121,7 @@ type: 'file', file: uploadedFile, id: uploadedFile.id, + url: `${WEBUI_API_BASE_URL}/files/${uploadedFile.id}`, name: file.name, collection_name: '', status: 'uploaded', diff --git a/src/lib/components/chat/Messages/UserMessage.svelte b/src/lib/components/chat/Messages/UserMessage.svelte index 04591a14f..f0b27d5d5 100644 --- a/src/lib/components/chat/Messages/UserMessage.svelte +++ b/src/lib/components/chat/Messages/UserMessage.svelte @@ -8,6 +8,7 @@ import Tooltip from '$lib/components/common/Tooltip.svelte'; import { user as _user } from '$lib/stores'; + import { getFileContentById } from '$lib/apis/files'; const i18n = getContext('i18n'); @@ -97,6 +98,47 @@
{#if file.type === 'image'} input + {:else if file.type === 'file'} + {:else if file.type === 'doc'} {#if role === 'admin'} + +
diff --git a/src/routes/(app)/workspace/playground/+page.svelte b/src/routes/(app)/workspace/playground/+page.svelte deleted file mode 100644 index aed8abf12..000000000 --- a/src/routes/(app)/workspace/playground/+page.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - - From eef125d08590ca47117b93a26ab78a339c95df45 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 18 Jun 2024 17:48:56 -0700 Subject: [PATCH 084/287] refac: settings order --- src/lib/components/chat/SettingsModal.svelte | 58 ++++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index d6b3a21e2..716091007 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/src/lib/components/chat/SettingsModal.svelte @@ -88,35 +88,6 @@
{$i18n.t('General')}
- {#if $user.role === 'admin'} - - {/if} -
+ {#if $user.role === 'admin'} + + {/if} +
From 43e08c6afa00a536fc50bd81a667bc935e1d5fae Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 00:54:58 -0700 Subject: [PATCH 105/287] refac --- backend/apps/webui/models/functions.py | 4 +- backend/apps/webui/routers/functions.py | 8 +- backend/apps/webui/utils.py | 4 +- src/lib/components/workspace/Functions.svelte | 2 +- .../workspace/Functions/FunctionEditor.svelte | 281 ++++++++++++++++++ .../workspace/functions/create/+page.svelte | 38 ++- 6 files changed, 308 insertions(+), 29 deletions(-) diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py index ac12ab9e3..91fbdb769 100644 --- a/backend/apps/webui/models/functions.py +++ b/backend/apps/webui/models/functions.py @@ -64,7 +64,6 @@ class FunctionResponse(BaseModel): class FunctionForm(BaseModel): id: str name: str - type: str content: str meta: FunctionMeta @@ -75,12 +74,13 @@ class FunctionsTable: self.db.create_tables([Function]) def insert_new_function( - self, user_id: str, form_data: FunctionForm + self, user_id: str, type: str, form_data: FunctionForm ) -> Optional[FunctionModel]: function = FunctionModel( **{ **form_data.model_dump(), "user_id": user_id, + "type": type, "updated_at": int(time.time()), "created_at": int(time.time()), } diff --git a/backend/apps/webui/routers/functions.py b/backend/apps/webui/routers/functions.py index 1021cc10a..ea5fde336 100644 --- a/backend/apps/webui/routers/functions.py +++ b/backend/apps/webui/routers/functions.py @@ -69,12 +69,12 @@ async def create_new_function( with open(function_path, "w") as function_file: function_file.write(form_data.content) - function_module = load_function_module_by_id(form_data.id) + function_module, function_type = load_function_module_by_id(form_data.id) FUNCTIONS = request.app.state.FUNCTIONS FUNCTIONS[form_data.id] = function_module - function = Functions.insert_new_function(user.id, form_data) + function = Functions.insert_new_function(user.id, function_type, form_data) function_cache_dir = Path(CACHE_DIR) / "functions" / form_data.id function_cache_dir.mkdir(parents=True, exist_ok=True) @@ -132,12 +132,12 @@ async def update_toolkit_by_id( with open(function_path, "w") as function_file: function_file.write(form_data.content) - function_module = load_function_module_by_id(id) + function_module, function_type = load_function_module_by_id(id) FUNCTIONS = request.app.state.FUNCTIONS FUNCTIONS[id] = function_module - updated = {**form_data.model_dump(exclude={"id"})} + updated = {**form_data.model_dump(exclude={"id"}), "type": function_type} print(updated) function = Functions.update_function_by_id(id, updated) diff --git a/backend/apps/webui/utils.py b/backend/apps/webui/utils.py index 64d116f11..3e075a8a8 100644 --- a/backend/apps/webui/utils.py +++ b/backend/apps/webui/utils.py @@ -33,9 +33,9 @@ def load_function_module_by_id(function_id): spec.loader.exec_module(module) print(f"Loaded module: {module.__name__}") if hasattr(module, "Pipe"): - return module.Pipe() + return module.Pipe(), "pipe" elif hasattr(module, "Filter"): - return module.Filter() + return module.Filter(), "filter" else: raise Exception("No Function class found") except Exception as e: diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index ebadce50c..aeb53bde0 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -74,7 +74,7 @@
+ import { getContext, createEventDispatcher, onMount } from 'svelte'; + + const i18n = getContext('i18n'); + + import CodeEditor from '$lib/components/common/CodeEditor.svelte'; + import { goto } from '$app/navigation'; + import ConfirmDialog from '$lib/components/common/ConfirmDialog.svelte'; + + const dispatch = createEventDispatcher(); + + let formElement = null; + let loading = false; + let showConfirm = false; + + export let edit = false; + export let clone = false; + + export let id = ''; + export let name = ''; + export let meta = { + description: '' + }; + export let content = ''; + + $: if (name && !edit && !clone) { + id = name.replace(/\s+/g, '_').toLowerCase(); + } + + let codeEditor; + let boilerplate = `import os +import requests +from datetime import datetime + + +class Tools: + def __init__(self): + pass + + # Add your custom tools using pure Python code here, make sure to add type hints + # Use Sphinx-style docstrings to document your tools, they will be used for generating tools specifications + # Please refer to function_calling_filter_pipeline.py file from pipelines project for an example + + def get_user_name_and_email_and_id(self, __user__: dict = {}) -> str: + """ + Get the user name, Email and ID from the user object. + """ + + # Do not include :param for __user__ in the docstring as it should not be shown in the tool's specification + # The session user object will be passed as a parameter when the function is called + + print(__user__) + result = "" + + if "name" in __user__: + result += f"User: {__user__['name']}" + if "id" in __user__: + result += f" (ID: {__user__['id']})" + if "email" in __user__: + result += f" (Email: {__user__['email']})" + + if result == "": + result = "User: Unknown" + + return result + + def get_current_time(self) -> str: + """ + Get the current time in a more human-readable format. + :return: The current time. + """ + + now = datetime.now() + current_time = now.strftime("%I:%M:%S %p") # Using 12-hour format with AM/PM + current_date = now.strftime( + "%A, %B %d, %Y" + ) # Full weekday, month name, day, and year + + return f"Current Date and Time = {current_date}, {current_time}" + + def calculator(self, equation: str) -> str: + """ + Calculate the result of an equation. + :param equation: The equation to calculate. + """ + + # Avoid using eval in production code + # https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html + try: + result = eval(equation) + return f"{equation} = {result}" + except Exception as e: + print(e) + return "Invalid equation" + + def get_current_weather(self, city: str) -> str: + """ + Get the current weather for a given city. + :param city: The name of the city to get the weather for. + :return: The current weather information or an error message. + """ + api_key = os.getenv("OPENWEATHER_API_KEY") + if not api_key: + return ( + "API key is not set in the environment variable 'OPENWEATHER_API_KEY'." + ) + + base_url = "http://api.openweathermap.org/data/2.5/weather" + params = { + "q": city, + "appid": api_key, + "units": "metric", # Optional: Use 'imperial' for Fahrenheit + } + + try: + response = requests.get(base_url, params=params) + response.raise_for_status() # Raise HTTPError for bad responses (4xx and 5xx) + data = response.json() + + if data.get("cod") != 200: + return f"Error fetching weather data: {data.get('message')}" + + weather_description = data["weather"][0]["description"] + temperature = data["main"]["temp"] + humidity = data["main"]["humidity"] + wind_speed = data["wind"]["speed"] + + return f"Weather in {city}: {temperature}°C" + except requests.RequestException as e: + return f"Error fetching weather data: {str(e)}" +`; + + const saveHandler = async () => { + loading = true; + dispatch('save', { + id, + name, + meta, + content + }); + }; + + const submitHandler = async () => { + if (codeEditor) { + const res = await codeEditor.formatPythonCodeHandler(); + + if (res) { + console.log('Code formatted successfully'); + saveHandler(); + } + } + }; + + +
+
+
{ + if (edit) { + submitHandler(); + } else { + showConfirm = true; + } + }} + > +
+ +
+ + +
+
+
+ + { + submitHandler(); + }} +> +
+
+
Please carefully review the following warnings:
+ +
    +
  • Tools have a function calling system that allows arbitrary code execution.
  • +
  • Do not install tools from sources you do not fully trust.
  • +
+
+ +
+ 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. +
+
+
diff --git a/src/routes/(app)/workspace/functions/create/+page.svelte b/src/routes/(app)/workspace/functions/create/+page.svelte index c785c74cd..3b7dc270d 100644 --- a/src/routes/(app)/workspace/functions/create/+page.svelte +++ b/src/routes/(app)/workspace/functions/create/+page.svelte @@ -1,18 +1,18 @@ {#if mounted} - { saveHandler(e.detail); From 40cde07e5ce90cebed8e1cb5a066c355035e4386 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 01:07:55 -0700 Subject: [PATCH 106/287] feat: function filter example boilerplate --- .../workspace/Functions/FunctionEditor.svelte | 135 ++++-------------- .../workspace/functions/edit/+page.svelte | 40 +++--- 2 files changed, 49 insertions(+), 126 deletions(-) diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte index 385a9ea68..d84865b93 100644 --- a/src/lib/components/workspace/Functions/FunctionEditor.svelte +++ b/src/lib/components/workspace/Functions/FunctionEditor.svelte @@ -1,14 +1,13 @@ -{#if tool} - { saveHandler(e.detail); }} From 9108df177c57a4e8f945c1b428585317e962180e Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 01:12:09 -0700 Subject: [PATCH 107/287] refac: comments --- src/lib/components/workspace/Functions/FunctionEditor.svelte | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte index d84865b93..210e8db2b 100644 --- a/src/lib/components/workspace/Functions/FunctionEditor.svelte +++ b/src/lib/components/workspace/Functions/FunctionEditor.svelte @@ -36,6 +36,8 @@ class Filter: pass def inlet(self, body: dict, user: Optional[dict] = None) -> dict: + # This method is invoked before the request is sent to the chat completion API. + # It can be used to modify the request body or perform validation checks. print("inlet") print(body) print(user) @@ -50,9 +52,12 @@ class Filter: return body def outlet(self, body: dict, user: Optional[dict] = None) -> dict: + # This method is invoked after the chat completion API has processed + # the request and generated a response. It can be used to overwrite the response messages. print(f"outlet") print(body) print(user) + return body`; const saveHandler = async () => { From bf5775e07a635c9bfe6491a0db5ebc905c2adc61 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 01:16:31 -0700 Subject: [PATCH 108/287] refac --- backend/apps/webui/models/functions.py | 1 + src/lib/components/workspace/Functions.svelte | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py index 91fbdb769..f5fab34db 100644 --- a/backend/apps/webui/models/functions.py +++ b/backend/apps/webui/models/functions.py @@ -55,6 +55,7 @@ class FunctionModel(BaseModel): class FunctionResponse(BaseModel): id: str user_id: str + type: str name: str meta: FunctionMeta updated_at: int # timestamp in epoch diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index aeb53bde0..15793fa01 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -35,6 +35,8 @@ toast.error(error); return []; }); + + console.log(functions); }); @@ -107,15 +109,25 @@ href={`/workspace/functions/edit?id=${encodeURIComponent(func.id)}`} class="flex items-center text-left" > -
+
+
+ {func.type} +
+
{func.name}
-
{func.id}
-
- {func.meta.description} + +
+
{func.id}
+ +
+ {func.meta.description} +
From 08cc20cb935924dd34476c8e21b654be01b7c39c Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 01:44:52 -0700 Subject: [PATCH 109/287] feat: filter selector model --- src/lib/components/workspace/Functions.svelte | 27 ++------- .../workspace/Functions/FunctionEditor.svelte | 27 ++++++--- .../workspace/Models/FiltersSelector.svelte | 59 +++++++++++++++++++ src/lib/stores/index.ts | 2 + src/routes/(app)/workspace/+layout.svelte | 7 ++- .../workspace/functions/create/+page.svelte | 2 + .../workspace/functions/edit/+page.svelte | 2 + .../(app)/workspace/models/edit/+page.svelte | 23 +++++++- 8 files changed, 117 insertions(+), 32 deletions(-) create mode 100644 src/lib/components/workspace/Models/FiltersSelector.svelte diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index 15793fa01..8f0139009 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -3,7 +3,7 @@ import fileSaver from 'file-saver'; const { saveAs } = fileSaver; - import { WEBUI_NAME } from '$lib/stores'; + import { WEBUI_NAME, functions } from '$lib/stores'; import { onMount, getContext } from 'svelte'; import { createNewPrompt, deletePromptByCommand, getPrompts } from '$lib/apis/prompts'; @@ -27,17 +27,6 @@ let showConfirm = false; let query = ''; - - let functions = []; - - onMount(async () => { - functions = await getFunctions(localStorage.token).catch((error) => { - toast.error(error); - return []; - }); - - console.log(functions); - }); @@ -94,7 +83,7 @@
- {#each functions.filter((f) => query === '' || f.name + {#each $functions.filter((f) => query === '' || f.name .toLowerCase() .includes(query.toLowerCase()) || f.id.toLowerCase().includes(query.toLowerCase())) as func}
+
+ func.type === 'filter')} + /> +
+
{$i18n.t('Capabilities')}
From 448ca9d836566163a6e8037d55fefcffeae2247a Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 01:51:39 -0700 Subject: [PATCH 110/287] refac --- backend/main.py | 212 +++++++++++------- .../workspace/Functions/FunctionEditor.svelte | 9 +- 2 files changed, 132 insertions(+), 89 deletions(-) diff --git a/backend/main.py b/backend/main.py index 0a0587159..11c78645b 100644 --- a/backend/main.py +++ b/backend/main.py @@ -170,6 +170,13 @@ app.state.MODELS = {} origins = ["*"] +################################## +# +# ChatCompletion Middleware +# +################################## + + async def get_function_call_response( messages, files, tool_id, template, task_model_id, user ): @@ -469,6 +476,12 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): app.add_middleware(ChatCompletionMiddleware) +################################## +# +# Pipeline Middleware +# +################################## + def filter_pipeline(payload, user): user = {"id": user.id, "email": user.email, "name": user.name, "role": user.role} @@ -628,7 +641,6 @@ async def update_embedding_function(request: Request, call_next): app.mount("/ws", socket_app) - app.mount("/ollama", ollama_app) app.mount("/openai", openai_app) @@ -730,6 +742,104 @@ async def get_models(user=Depends(get_verified_user)): return {"data": models} +@app.post("/api/chat/completions") +async def generate_chat_completions(form_data: dict, user=Depends(get_verified_user)): + model_id = form_data["model"] + if model_id not in app.state.MODELS: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Model not found", + ) + + model = app.state.MODELS[model_id] + print(model) + + if model["owned_by"] == "ollama": + return await generate_ollama_chat_completion(form_data, user=user) + else: + return await generate_openai_chat_completion(form_data, user=user) + + +@app.post("/api/chat/completed") +async def chat_completed(form_data: dict, user=Depends(get_verified_user)): + data = form_data + model_id = data["model"] + + filters = [ + model + for model in app.state.MODELS.values() + if "pipeline" in model + and "type" in model["pipeline"] + and model["pipeline"]["type"] == "filter" + and ( + model["pipeline"]["pipelines"] == ["*"] + or any( + model_id == target_model_id + for target_model_id in model["pipeline"]["pipelines"] + ) + ) + ] + sorted_filters = sorted(filters, key=lambda x: x["pipeline"]["priority"]) + + print(model_id) + + if model_id in app.state.MODELS: + model = app.state.MODELS[model_id] + if "pipeline" in model: + sorted_filters = [model] + sorted_filters + + for filter in sorted_filters: + r = None + try: + urlIdx = filter["urlIdx"] + + url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] + key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] + + if key != "": + headers = {"Authorization": f"Bearer {key}"} + r = requests.post( + f"{url}/{filter['id']}/filter/outlet", + headers=headers, + json={ + "user": {"id": user.id, "name": user.name, "role": user.role}, + "body": data, + }, + ) + + r.raise_for_status() + data = r.json() + except Exception as e: + # Handle connection error here + print(f"Connection error: {e}") + + if r is not None: + try: + res = r.json() + if "detail" in res: + return JSONResponse( + status_code=r.status_code, + content=res, + ) + except: + pass + + else: + pass + + return data + + +################################## +# +# Task Endpoints +# +################################## + + +# TODO: Refactor task API endpoints below into a separate file + + @app.get("/api/task/config") async def get_task_config(user=Depends(get_verified_user)): return { @@ -1015,92 +1125,14 @@ async def get_tools_function_calling(form_data: dict, user=Depends(get_verified_ ) -@app.post("/api/chat/completions") -async def generate_chat_completions(form_data: dict, user=Depends(get_verified_user)): - model_id = form_data["model"] - if model_id not in app.state.MODELS: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail="Model not found", - ) - - model = app.state.MODELS[model_id] - print(model) - - if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion(form_data, user=user) - else: - return await generate_openai_chat_completion(form_data, user=user) +################################## +# +# Pipelines Endpoints +# +################################## -@app.post("/api/chat/completed") -async def chat_completed(form_data: dict, user=Depends(get_verified_user)): - data = form_data - model_id = data["model"] - - filters = [ - model - for model in app.state.MODELS.values() - if "pipeline" in model - and "type" in model["pipeline"] - and model["pipeline"]["type"] == "filter" - and ( - model["pipeline"]["pipelines"] == ["*"] - or any( - model_id == target_model_id - for target_model_id in model["pipeline"]["pipelines"] - ) - ) - ] - sorted_filters = sorted(filters, key=lambda x: x["pipeline"]["priority"]) - - print(model_id) - - if model_id in app.state.MODELS: - model = app.state.MODELS[model_id] - if "pipeline" in model: - sorted_filters = [model] + sorted_filters - - for filter in sorted_filters: - r = None - try: - urlIdx = filter["urlIdx"] - - url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] - key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] - - if key != "": - headers = {"Authorization": f"Bearer {key}"} - r = requests.post( - f"{url}/{filter['id']}/filter/outlet", - headers=headers, - json={ - "user": {"id": user.id, "name": user.name, "role": user.role}, - "body": data, - }, - ) - - r.raise_for_status() - data = r.json() - except Exception as e: - # Handle connection error here - print(f"Connection error: {e}") - - if r is not None: - try: - res = r.json() - if "detail" in res: - return JSONResponse( - status_code=r.status_code, - content=res, - ) - except: - pass - - else: - pass - - return data +# TODO: Refactor pipelines API endpoints below into a separate file @app.get("/api/pipelines/list") @@ -1423,6 +1455,13 @@ async def update_pipeline_valves( ) +################################## +# +# Config Endpoints +# +################################## + + @app.get("/api/config") async def get_app_config(): # Checking and Handling the Absence of 'ui' in CONFIG_DATA @@ -1486,6 +1525,9 @@ async def update_model_filter_config( } +# TODO: webhook endpoint should be under config endpoints + + @app.get("/api/webhook") async def get_webhook_url(user=Depends(get_admin_user)): return { diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte index 12cb0386d..6e35616f2 100644 --- a/src/lib/components/workspace/Functions/FunctionEditor.svelte +++ b/src/lib/components/workspace/Functions/FunctionEditor.svelte @@ -30,9 +30,10 @@ let boilerplate = `from pydantic import BaseModel from typing import Optional + class Filter: class Valves(BaseModel): - max_turns: int + max_turns: int = 4 pass def __init__(self): @@ -42,14 +43,14 @@ class Filter: # Initialize 'valves' with specific configurations. Using 'Valves' instance helps encapsulate settings, # which ensures settings are managed cohesively and not confused with operational flags like 'file_handler'. - self.valves = self.Valves(**{"max_turns": 10}) + self.valves = self.Valves(**{"max_turns": 2}) pass def inlet(self, body: dict, user: Optional[dict] = None) -> dict: # Modify the request body or validate it before processing by the chat completion API. # This function is the pre-processor for the API where various checks on the input can be performed. # It can also modify the request before sending it to the API. - + print("inlet") print(body) print(user) @@ -65,7 +66,7 @@ class Filter: def outlet(self, body: dict, user: Optional[dict] = None) -> dict: # Modify or analyze the response body after processing by the API. - # This function is the post-processor for the API, which can be used to modify the response + # This function is the post-processor for the API, which can be used to modify the response # or perform additional checks and analytics. print(f"outlet") print(body) From 6b8a7b993949f343fd4d1702b74218d9fe9b5c72 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 02:06:10 -0700 Subject: [PATCH 111/287] refac: chat completion middleware --- backend/main.py | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/backend/main.py b/backend/main.py index 11c78645b..febda4ced 100644 --- a/backend/main.py +++ b/backend/main.py @@ -316,7 +316,7 @@ async def get_function_call_response( class ChatCompletionMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): - return_citations = False + data_items = [] if request.method == "POST" and ( "/ollama/api/chat" in request.url.path @@ -326,23 +326,17 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): # Read the original request body body = await request.body() - # Decode body to string body_str = body.decode("utf-8") - # Parse string to JSON data = json.loads(body_str) if body_str else {} + model_id = data["model"] user = get_current_user( request, get_http_authorization_cred(request.headers.get("Authorization")), ) - # Remove the citations from the body - return_citations = data.get("citations", False) - if "citations" in data: - del data["citations"] - # Set the task model - task_model_id = data["model"] + task_model_id = model_id if task_model_id not in app.state.MODELS: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, @@ -364,12 +358,11 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ): task_model_id = app.state.config.TASK_MODEL_EXTERNAL + skip_files = False prompt = get_last_user_message(data["messages"]) context = "" # If tool_ids field is present, call the functions - - skip_files = False if "tool_ids" in data: print(data["tool_ids"]) for tool_id in data["tool_ids"]: @@ -415,8 +408,9 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): context += ("\n" if context != "" else "") + rag_context log.debug(f"rag_context: {rag_context}, citations: {citations}") - else: - return_citations = False + + if citations: + data_items.append({"citations": citations}) del data["files"] @@ -426,7 +420,7 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ) print(system_prompt) data["messages"] = add_or_update_system_message( - f"\n{system_prompt}", data["messages"] + system_prompt, data["messages"] ) modified_body_bytes = json.dumps(data).encode("utf-8") @@ -444,18 +438,18 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): response = await call_next(request) - if return_citations: - # Inject the citations into the response + # If there are data_items to inject into the response + if len(data_items) > 0: if isinstance(response, StreamingResponse): # If it's a streaming response, inject it as SSE event or NDJSON line content_type = response.headers.get("Content-Type") if "text/event-stream" in content_type: return StreamingResponse( - self.openai_stream_wrapper(response.body_iterator, citations), + self.openai_stream_wrapper(response.body_iterator, data_items), ) if "application/x-ndjson" in content_type: return StreamingResponse( - self.ollama_stream_wrapper(response.body_iterator, citations), + self.ollama_stream_wrapper(response.body_iterator, data_items), ) return response @@ -463,13 +457,17 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): async def _receive(self, body: bytes): return {"type": "http.request", "body": body, "more_body": False} - async def openai_stream_wrapper(self, original_generator, citations): - yield f"data: {json.dumps({'citations': citations})}\n\n" + async def openai_stream_wrapper(self, original_generator, data_items): + for item in data_items: + yield f"data: {json.dumps(item)}\n\n" + async for data in original_generator: yield data - async def ollama_stream_wrapper(self, original_generator, citations): - yield f"{json.dumps({'citations': citations})}\n" + async def ollama_stream_wrapper(self, original_generator, data_items): + for item in data_items: + yield f"{json.dumps(item)}\n" + async for data in original_generator: yield data From c4bd60114eb6996f650d5ce0ab4b3ac0f41d6606 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 02:30:00 -0700 Subject: [PATCH 112/287] feat: filter inlet support --- backend/main.py | 67 +++++++++++++++---- src/lib/components/chat/Chat.svelte | 5 +- .../workspace/Models/FiltersSelector.svelte | 1 + 3 files changed, 58 insertions(+), 15 deletions(-) diff --git a/backend/main.py b/backend/main.py index febda4ced..951bf9654 100644 --- a/backend/main.py +++ b/backend/main.py @@ -50,7 +50,9 @@ from typing import List, Optional from apps.webui.models.models import Models, ModelModel from apps.webui.models.tools import Tools -from apps.webui.utils import load_toolkit_module_by_id +from apps.webui.models.functions import Functions + +from apps.webui.utils import load_toolkit_module_by_id, load_function_module_by_id from utils.utils import ( @@ -318,9 +320,9 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): data_items = [] - if request.method == "POST" and ( - "/ollama/api/chat" in request.url.path - or "/chat/completions" in request.url.path + if request.method == "POST" and any( + endpoint in request.url.path + for endpoint in ["/ollama/api/chat", "/chat/completions"] ): log.debug(f"request.url.path: {request.url.path}") @@ -328,23 +330,62 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): body = await request.body() body_str = body.decode("utf-8") data = json.loads(body_str) if body_str else {} - - model_id = data["model"] user = get_current_user( request, get_http_authorization_cred(request.headers.get("Authorization")), ) - # Set the task model - task_model_id = model_id - if task_model_id not in app.state.MODELS: + # Flag to skip RAG completions if file_handler is present in tools/functions + skip_files = False + + model_id = data["model"] + if model_id not in app.state.MODELS: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Model not found", ) + model = app.state.MODELS[model_id] - # Check if the user has a custom task model - # If the user has a custom task model, use that model + print(":", data) + + # Check if the model has any filters + for filter_id in model["info"]["meta"].get("filterIds", []): + filter = Functions.get_function_by_id(filter_id) + if filter: + if filter_id in webui_app.state.FUNCTIONS: + function_module = webui_app.state.FUNCTIONS[filter_id] + else: + function_module, function_type = load_function_module_by_id( + filter_id + ) + webui_app.state.FUNCTIONS[filter_id] = function_module + + # Check if the function has a file_handler variable + if getattr(function_module, "file_handler"): + skip_files = True + + try: + if hasattr(function_module, "inlet"): + data = function_module.inlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + except Exception as e: + print(f"Error: {e}") + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=e, + ) + + print("Filtered:", data) + # Set the task model + task_model_id = data["model"] + # Check if the user has a custom task model and use that model if app.state.MODELS[task_model_id]["owned_by"] == "ollama": if ( app.state.config.TASK_MODEL @@ -358,7 +399,6 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ): task_model_id = app.state.config.TASK_MODEL_EXTERNAL - skip_files = False prompt = get_last_user_message(data["messages"]) context = "" @@ -409,8 +449,9 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): log.debug(f"rag_context: {rag_context}, citations: {citations}") - if citations: + if citations and data.get("citations"): data_items.append({"citations": citations}) + del data["citations"] del data["files"] diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index b33b26fa3..1fae82415 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -630,7 +630,7 @@ keep_alive: $settings.keepAlive ?? undefined, tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined, files: files.length > 0 ? files : undefined, - citations: files.length > 0, + citations: files.length > 0 ? true : undefined, chat_id: $chatId }); @@ -928,7 +928,8 @@ max_tokens: $settings?.params?.max_tokens ?? undefined, tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined, files: files.length > 0 ? files : undefined, - citations: files.length > 0, + citations: files.length > 0 ? true : undefined, + chat_id: $chatId }, `${OPENAI_API_BASE_URL}` diff --git a/src/lib/components/workspace/Models/FiltersSelector.svelte b/src/lib/components/workspace/Models/FiltersSelector.svelte index 291bb8939..92f64c2cf 100644 --- a/src/lib/components/workspace/Models/FiltersSelector.svelte +++ b/src/lib/components/workspace/Models/FiltersSelector.svelte @@ -31,6 +31,7 @@ {$i18n.t('To select filters here, add them to the "Functions" workspace first.')}
+
{#if filters.length > 0}
From 96d7c3e99fd9e6c5a70d73051576b89478ead098 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 02:37:36 -0700 Subject: [PATCH 113/287] fix: raise error --- backend/main.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/backend/main.py b/backend/main.py index 951bf9654..5f845877e 100644 --- a/backend/main.py +++ b/backend/main.py @@ -330,11 +330,11 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): body = await request.body() body_str = body.decode("utf-8") data = json.loads(body_str) if body_str else {} + user = get_current_user( request, get_http_authorization_cred(request.headers.get("Authorization")), ) - # Flag to skip RAG completions if file_handler is present in tools/functions skip_files = False @@ -346,8 +346,6 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ) model = app.state.MODELS[model_id] - print(":", data) - # Check if the model has any filters for filter_id in model["info"]["meta"].get("filterIds", []): filter = Functions.get_function_by_id(filter_id) @@ -377,12 +375,11 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ) except Exception as e: print(f"Error: {e}") - raise HTTPException( + return JSONResponse( status_code=status.HTTP_400_BAD_REQUEST, - detail=e, + content={"detail": str(e)}, ) - print("Filtered:", data) # Set the task model task_model_id = data["model"] # Check if the user has a custom task model and use that model From f14ca48334718f3f187f3fbd3f3c5221d349f685 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 02:42:56 -0700 Subject: [PATCH 114/287] refac --- .../workspace/Functions/FunctionEditor.svelte | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte index 6e35616f2..b2a9ea652 100644 --- a/src/lib/components/workspace/Functions/FunctionEditor.svelte +++ b/src/lib/components/workspace/Functions/FunctionEditor.svelte @@ -39,6 +39,7 @@ class Filter: def __init__(self): # Indicates custom file handling logic. This flag helps disengage default routines in favor of custom # implementations, informing the WebUI to defer file-related operations to designated methods within this class. + # Alternatively, you can remove the files directly from the body in from the inlet hook self.file_handler = True # Initialize 'valves' with specific configurations. Using 'Valves' instance helps encapsulate settings, @@ -50,16 +51,15 @@ class Filter: # Modify the request body or validate it before processing by the chat completion API. # This function is the pre-processor for the API where various checks on the input can be performed. # It can also modify the request before sending it to the API. + print(f"inlet:{__name__}") + print(f"inlet:body:{body}") + print(f"inlet:user:{user}") - print("inlet") - print(body) - print(user) - - if user.get("role", "admin") in ["user"]: + if user.get("role", "admin") in ["user", "admin"]: messages = body.get("messages", []) - if len(messages) > self.max_turns: + if len(messages) > self.valves.max_turns: raise Exception( - f"Conversation turn limit exceeded. Max turns: {self.max_turns}" + f"Conversation turn limit exceeded. Max turns: {self.valves.max_turns}" ) return body @@ -68,9 +68,9 @@ class Filter: # Modify or analyze the response body after processing by the API. # This function is the post-processor for the API, which can be used to modify the response # or perform additional checks and analytics. - print(f"outlet") - print(body) - print(user) + print(f"outlet:{__name__}") + print(f"outlet:body:{body}") + print(f"outlet:user:{user}") return body`; From 3101ff143b558b132176cb2362df5a3792c99e6f Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 02:47:27 -0700 Subject: [PATCH 115/287] refac: disable continuing with error message --- src/lib/components/chat/Chat.svelte | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 1fae82415..a60aef51a 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -323,6 +323,13 @@ } else if (messages.length != 0 && messages.at(-1).done != true) { // Response not done console.log('wait'); + } else if (messages.length != 0 && messages.at(-1).error) { + // Error in response + toast.error( + $i18n.t( + `Oops! There was an error in the previous response. Please try again or contact admin.` + ) + ); } else if ( files.length > 0 && files.filter((file) => file.type !== 'image' && file.status !== 'processed').length > 0 From afd270523c20af86138224bb2b20151bdb5984c0 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 03:23:50 -0700 Subject: [PATCH 116/287] feat: filter func outlet --- backend/main.py | 53 +++++++++++++++++++++++------ src/lib/components/chat/Chat.svelte | 4 ++- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/backend/main.py b/backend/main.py index 5f845877e..dade596a4 100644 --- a/backend/main.py +++ b/backend/main.py @@ -474,10 +474,7 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ], ] - response = await call_next(request) - - # If there are data_items to inject into the response - if len(data_items) > 0: + response = await call_next(request) if isinstance(response, StreamingResponse): # If it's a streaming response, inject it as SSE event or NDJSON line content_type = response.headers.get("Content-Type") @@ -489,7 +486,11 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): return StreamingResponse( self.ollama_stream_wrapper(response.body_iterator, data_items), ) + else: + return response + # If it's not a chat completion request, just pass it through + response = await call_next(request) return response async def _receive(self, body: bytes): @@ -800,6 +801,12 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u async def chat_completed(form_data: dict, user=Depends(get_verified_user)): data = form_data model_id = data["model"] + if model_id not in app.state.MODELS: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Model not found", + ) + model = app.state.MODELS[model_id] filters = [ model @@ -815,14 +822,10 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): ) ) ] + sorted_filters = sorted(filters, key=lambda x: x["pipeline"]["priority"]) - - print(model_id) - - if model_id in app.state.MODELS: - model = app.state.MODELS[model_id] - if "pipeline" in model: - sorted_filters = [model] + sorted_filters + if "pipeline" in model: + sorted_filters = [model] + sorted_filters for filter in sorted_filters: r = None @@ -863,6 +866,34 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): else: pass + # Check if the model has any filters + for filter_id in model["info"]["meta"].get("filterIds", []): + filter = Functions.get_function_by_id(filter_id) + if filter: + if filter_id in webui_app.state.FUNCTIONS: + function_module = webui_app.state.FUNCTIONS[filter_id] + else: + function_module, function_type = load_function_module_by_id(filter_id) + webui_app.state.FUNCTIONS[filter_id] = function_module + + try: + if hasattr(function_module, "outlet"): + data = function_module.outlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + except Exception as e: + print(f"Error: {e}") + return JSONResponse( + status_code=status.HTTP_400_BAD_REQUEST, + content={"detail": str(e)}, + ) + return data diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index a60aef51a..9cf2201fc 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -278,7 +278,9 @@ })), chat_id: $chatId }).catch((error) => { - console.error(error); + toast.error(error); + messages.at(-1).error = { content: error }; + return null; }); From a3f09949c0aef73bfaa8444aeb2775bc2fef501e Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 03:29:50 -0700 Subject: [PATCH 117/287] refac --- .../components/workspace/Functions/FunctionEditor.svelte | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte index b2a9ea652..9706bd65c 100644 --- a/src/lib/components/workspace/Functions/FunctionEditor.svelte +++ b/src/lib/components/workspace/Functions/FunctionEditor.svelte @@ -72,7 +72,13 @@ class Filter: print(f"outlet:body:{body}") print(f"outlet:user:{user}") - return body`; + messages = [ + {**message, "content": f"{message['content']} - @@Modified from Outlet"} + for message in body.get("messages", []) + ] + + return {"messages": messages} +`; const saveHandler = async () => { loading = true; From e20baad60112e2d909b7a032726e906b1c34c213 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 03:35:21 -0700 Subject: [PATCH 118/287] refac --- .../components/workspace/Functions/FunctionEditor.svelte | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte index 9706bd65c..6e30013cc 100644 --- a/src/lib/components/workspace/Functions/FunctionEditor.svelte +++ b/src/lib/components/workspace/Functions/FunctionEditor.svelte @@ -73,11 +73,15 @@ class Filter: print(f"outlet:user:{user}") messages = [ - {**message, "content": f"{message['content']} - @@Modified from Outlet"} + { + **message, + "content": f"{message['content']} - @@Modified from Filter Outlet", + } for message in body.get("messages", []) ] return {"messages": messages} + `; const saveHandler = async () => { From 015772ef9ab2447e97855bff7ce73a8e83ad0dc2 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 03:45:13 -0700 Subject: [PATCH 119/287] refac --- backend/apps/openai/main.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/apps/openai/main.py b/backend/apps/openai/main.py index c60c52fad..302dd8d98 100644 --- a/backend/apps/openai/main.py +++ b/backend/apps/openai/main.py @@ -432,7 +432,12 @@ async def generate_chat_completion( idx = model["urlIdx"] if "pipeline" in model and model.get("pipeline"): - payload["user"] = {"name": user.name, "id": user.id} + payload["user"] = { + "name": user.name, + "id": user.id, + "email": user.email, + "role": user.role, + } # Check if the model is "gpt-4-vision-preview" and set "max_tokens" to 4000 # This is a workaround until OpenAI fixes the issue with this model From c689356b31bd032983c680223804d90d8cbd6602 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 03:57:36 -0700 Subject: [PATCH 120/287] refac --- backend/apps/ollama/main.py | 17 ++++------------- src/lib/components/chat/Chat.svelte | 2 +- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/backend/apps/ollama/main.py b/backend/apps/ollama/main.py index 22a30474e..455dc89a5 100644 --- a/backend/apps/ollama/main.py +++ b/backend/apps/ollama/main.py @@ -53,7 +53,7 @@ from config import ( UPLOAD_DIR, AppConfig, ) -from utils.misc import calculate_sha256 +from utils.misc import calculate_sha256, add_or_update_system_message log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["OLLAMA"]) @@ -834,18 +834,9 @@ async def generate_chat_completion( ) if payload.get("messages"): - for message in payload["messages"]: - if message.get("role") == "system": - message["content"] = system + message["content"] - break - else: - payload["messages"].insert( - 0, - { - "role": "system", - "content": system, - }, - ) + payload["messages"] = add_or_update_system_message( + system, payload["messages"] + ) if url_idx == None: if ":" not in payload["model"]: diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 9cf2201fc..d83eb3cb2 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -941,7 +941,7 @@ chat_id: $chatId }, - `${OPENAI_API_BASE_URL}` + `${WEBUI_BASE_URL}/api` ); // Wait until history/message have been updated From de26a78a16ff51312be4c1dbcfea5d6be4b0bbc7 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 04:21:55 -0700 Subject: [PATCH 121/287] refac --- backend/main.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/backend/main.py b/backend/main.py index dade596a4..3d95d1913 100644 --- a/backend/main.py +++ b/backend/main.py @@ -42,7 +42,7 @@ from apps.openai.main import ( from apps.audio.main import app as audio_app from apps.images.main import app as images_app from apps.rag.main import app as rag_app -from apps.webui.main import app as webui_app +from apps.webui.main import app as webui_app, get_pipe_models from pydantic import BaseModel @@ -448,10 +448,12 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): if citations and data.get("citations"): data_items.append({"citations": citations}) - del data["citations"] del data["files"] + if data.get("citations"): + del data["citations"] + if context != "": system_prompt = rag_template( rag_app.state.config.RAG_TEMPLATE, context, prompt @@ -691,17 +693,18 @@ webui_app.state.EMBEDDING_FUNCTION = rag_app.state.EMBEDDING_FUNCTION async def get_all_models(): + pipe_models = [] openai_models = [] ollama_models = [] + pipe_models = await get_pipe_models() + if app.state.config.ENABLE_OPENAI_API: openai_models = await get_openai_models() - openai_models = openai_models["data"] if app.state.config.ENABLE_OLLAMA_API: ollama_models = await get_ollama_models() - ollama_models = [ { "id": model["model"], @@ -714,9 +717,9 @@ async def get_all_models(): for model in ollama_models["models"] ] - models = openai_models + ollama_models - custom_models = Models.get_all_models() + models = pipe_models + openai_models + ollama_models + custom_models = Models.get_all_models() for custom_model in custom_models: if custom_model.base_model_id == None: for model in models: @@ -791,6 +794,13 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u model = app.state.MODELS[model_id] print(model) + + + if model.get('pipe') == True: + print('hi') + + + if model["owned_by"] == "ollama": return await generate_ollama_chat_completion(form_data, user=user) else: From d6e4aef607350ec2d54f7c46b5417e26bb17fc55 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 04:38:59 -0700 Subject: [PATCH 122/287] feat: pipe function --- backend/apps/webui/main.py | 58 ++++++++++ backend/main.py | 221 ++++++++++++++++++++++++++----------- backend/utils/misc.py | 19 ++++ 3 files changed, 234 insertions(+), 64 deletions(-) diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index 4a53b15bf..5ccb8ae58 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -15,6 +15,9 @@ from apps.webui.routers import ( files, functions, ) +from apps.webui.models.functions import Functions +from apps.webui.utils import load_function_module_by_id + from config import ( WEBUI_BUILD_HASH, SHOW_ADMIN_DETAILS, @@ -97,3 +100,58 @@ async def get_status(): "default_models": app.state.config.DEFAULT_MODELS, "default_prompt_suggestions": app.state.config.DEFAULT_PROMPT_SUGGESTIONS, } + + +async def get_pipe_models(): + pipes = Functions.get_functions_by_type("pipe") + pipe_models = [] + + for pipe in pipes: + # Check if function is already loaded + if pipe.id not in app.state.FUNCTIONS: + function_module, function_type = load_function_module_by_id(pipe.id) + app.state.FUNCTIONS[pipe.id] = function_module + else: + function_module = app.state.FUNCTIONS[pipe.id] + + # Check if function is a manifold + if hasattr(function_module, "type"): + if function_module.type == "manifold": + manifold_pipes = [] + + # Check if pipes is a function or a list + if callable(pipe.pipes): + manifold_pipes = pipe.pipes() + else: + manifold_pipes = pipe.pipes + + for p in manifold_pipes: + manifold_pipe_id = f'{pipe.id}.{p["id"]}' + manifold_pipe_name = p["name"] + + if hasattr(pipe, "name"): + manifold_pipe_name = f"{pipe.name}{manifold_pipe_name}" + + pipe_models.append( + { + "id": manifold_pipe_id, + "name": manifold_pipe_name, + "object": "model", + "created": pipe.created_at, + "owned_by": "openai", + "pipe": {"type": pipe.type}, + } + ) + else: + pipe_models.append( + { + "id": pipe.id, + "name": pipe.name, + "object": "model", + "created": pipe.created_at, + "owned_by": "openai", + "pipe": {"type": "pipe"}, + } + ) + + return pipe_models diff --git a/backend/main.py b/backend/main.py index 3d95d1913..d6a8c8831 100644 --- a/backend/main.py +++ b/backend/main.py @@ -15,6 +15,7 @@ import uuid import inspect import asyncio +from fastapi.concurrency import run_in_threadpool from fastapi import FastAPI, Request, Depends, status, UploadFile, File, Form from fastapi.staticfiles import StaticFiles from fastapi.responses import JSONResponse @@ -46,7 +47,7 @@ from apps.webui.main import app as webui_app, get_pipe_models from pydantic import BaseModel -from typing import List, Optional +from typing import List, Optional, Iterator, Generator, Union from apps.webui.models.models import Models, ModelModel from apps.webui.models.tools import Tools @@ -66,7 +67,11 @@ from utils.task import ( search_query_generation_template, tools_function_calling_generation_template, ) -from utils.misc import get_last_user_message, add_or_update_system_message +from utils.misc import ( + get_last_user_message, + add_or_update_system_message, + stream_message_template, +) from apps.rag.utils import get_rag_context, rag_template @@ -347,38 +352,39 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): model = app.state.MODELS[model_id] # Check if the model has any filters - for filter_id in model["info"]["meta"].get("filterIds", []): - filter = Functions.get_function_by_id(filter_id) - if filter: - if filter_id in webui_app.state.FUNCTIONS: - function_module = webui_app.state.FUNCTIONS[filter_id] - else: - function_module, function_type = load_function_module_by_id( - filter_id - ) - webui_app.state.FUNCTIONS[filter_id] = function_module - - # Check if the function has a file_handler variable - if getattr(function_module, "file_handler"): - skip_files = True - - try: - if hasattr(function_module, "inlet"): - data = function_module.inlet( - data, - { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - }, + if "info" in model and "meta" in model["info"]: + for filter_id in model["info"]["meta"].get("filterIds", []): + filter = Functions.get_function_by_id(filter_id) + if filter: + if filter_id in webui_app.state.FUNCTIONS: + function_module = webui_app.state.FUNCTIONS[filter_id] + else: + function_module, function_type = load_function_module_by_id( + filter_id + ) + webui_app.state.FUNCTIONS[filter_id] = function_module + + # Check if the function has a file_handler variable + if getattr(function_module, "file_handler"): + skip_files = True + + try: + if hasattr(function_module, "inlet"): + data = function_module.inlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + except Exception as e: + print(f"Error: {e}") + return JSONResponse( + status_code=status.HTTP_400_BAD_REQUEST, + content={"detail": str(e)}, ) - except Exception as e: - print(f"Error: {e}") - return JSONResponse( - status_code=status.HTTP_400_BAD_REQUEST, - content={"detail": str(e)}, - ) # Set the task model task_model_id = data["model"] @@ -794,13 +800,97 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u model = app.state.MODELS[model_id] print(model) - + pipe = model.get("pipe") + if pipe: - if model.get('pipe') == True: - print('hi') - - - + def job(): + pipe_id = form_data["model"] + if "." in pipe_id: + pipe_id, sub_pipe_id = pipe_id.split(".", 1) + print(pipe_id) + + pipe = webui_app.state.FUNCTIONS[pipe_id].pipe + if form_data["stream"]: + + def stream_content(): + res = pipe(body=form_data) + + 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}" + try: + line = line.decode("utf-8") + except: + pass + + if line.startswith("data:"): + yield f"{line}\n\n" + else: + line = stream_message_template(form_data["model"], line) + yield f"data: {json.dumps(line)}\n\n" + + if isinstance(res, str) or isinstance(res, Generator): + finish_message = { + "id": f"{form_data['model']}-{str(uuid.uuid4())}", + "object": "chat.completion.chunk", + "created": int(time.time()), + "model": form_data["model"], + "choices": [ + { + "index": 0, + "delta": {}, + "logprobs": None, + "finish_reason": "stop", + } + ], + } + + yield f"data: {json.dumps(finish_message)}\n\n" + yield f"data: [DONE]" + + return StreamingResponse( + stream_content(), media_type="text/event-stream" + ) + else: + res = pipe(body=form_data) + + if isinstance(res, dict): + return res + elif isinstance(res, BaseModel): + return res.model_dump() + else: + message = "" + if isinstance(res, str): + message = res + if isinstance(res, Generator): + for stream in res: + message = f"{message}{stream}" + + return { + "id": f"{form_data['model']}-{str(uuid.uuid4())}", + "object": "chat.completion", + "created": int(time.time()), + "model": form_data["model"], + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": message, + }, + "logprobs": None, + "finish_reason": "stop", + } + ], + } + + return await run_in_threadpool(job) if model["owned_by"] == "ollama": return await generate_ollama_chat_completion(form_data, user=user) else: @@ -877,32 +967,35 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): pass # Check if the model has any filters - for filter_id in model["info"]["meta"].get("filterIds", []): - filter = Functions.get_function_by_id(filter_id) - if filter: - if filter_id in webui_app.state.FUNCTIONS: - function_module = webui_app.state.FUNCTIONS[filter_id] - else: - function_module, function_type = load_function_module_by_id(filter_id) - webui_app.state.FUNCTIONS[filter_id] = function_module - - try: - if hasattr(function_module, "outlet"): - data = function_module.outlet( - data, - { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - }, + if "info" in model and "meta" in model["info"]: + for filter_id in model["info"]["meta"].get("filterIds", []): + filter = Functions.get_function_by_id(filter_id) + if filter: + if filter_id in webui_app.state.FUNCTIONS: + function_module = webui_app.state.FUNCTIONS[filter_id] + else: + function_module, function_type = load_function_module_by_id( + filter_id + ) + webui_app.state.FUNCTIONS[filter_id] = function_module + + try: + if hasattr(function_module, "outlet"): + data = function_module.outlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + except Exception as e: + print(f"Error: {e}") + return JSONResponse( + status_code=status.HTTP_400_BAD_REQUEST, + content={"detail": str(e)}, ) - except Exception as e: - print(f"Error: {e}") - return JSONResponse( - status_code=status.HTTP_400_BAD_REQUEST, - content={"detail": str(e)}, - ) return data diff --git a/backend/utils/misc.py b/backend/utils/misc.py index 41fbdcc75..b4e499df8 100644 --- a/backend/utils/misc.py +++ b/backend/utils/misc.py @@ -4,6 +4,8 @@ import json import re from datetime import timedelta from typing import Optional, List, Tuple +import uuid +import time def get_last_user_message(messages: List[dict]) -> str: @@ -62,6 +64,23 @@ def add_or_update_system_message(content: str, messages: List[dict]): return messages +def stream_message_template(model: str, message: str): + return { + "id": f"{model}-{str(uuid.uuid4())}", + "object": "chat.completion.chunk", + "created": int(time.time()), + "model": model, + "choices": [ + { + "index": 0, + "delta": {"content": message}, + "logprobs": None, + "finish_reason": None, + } + ], + } + + def get_gravatar_url(email): # Trim leading and trailing whitespace from # an email address and force all characters From 59fa2f8f26ca11d3089528dd01a479e59af77241 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 04:47:40 -0700 Subject: [PATCH 123/287] refac: pipe function support --- backend/apps/webui/main.py | 8 ++++---- backend/main.py | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index 5ccb8ae58..ce58047ed 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -120,16 +120,16 @@ async def get_pipe_models(): manifold_pipes = [] # Check if pipes is a function or a list - if callable(pipe.pipes): - manifold_pipes = pipe.pipes() + if callable(function_module.pipes): + manifold_pipes = function_module.pipes() else: - manifold_pipes = pipe.pipes + manifold_pipes = function_module.pipes for p in manifold_pipes: manifold_pipe_id = f'{pipe.id}.{p["id"]}' manifold_pipe_name = p["name"] - if hasattr(pipe, "name"): + if hasattr(function_module, "name"): manifold_pipe_name = f"{pipe.name}{manifold_pipe_name}" pipe_models.append( diff --git a/backend/main.py b/backend/main.py index d6a8c8831..47078b681 100644 --- a/backend/main.py +++ b/backend/main.py @@ -802,6 +802,12 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u pipe = model.get("pipe") if pipe: + form_data["user"] = { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + } def job(): pipe_id = form_data["model"] From 9ebd308d286094f7b317630af7fe1991fb14294b Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 04:51:51 -0700 Subject: [PATCH 124/287] refac --- src/lib/components/workspace/Functions.svelte | 6 +++++- src/routes/(app)/workspace/functions/create/+page.svelte | 5 ++++- src/routes/(app)/workspace/functions/edit/+page.svelte | 4 +++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index 8f0139009..35e308220 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -3,7 +3,7 @@ import fileSaver from 'file-saver'; const { saveAs } = fileSaver; - import { WEBUI_NAME, functions } from '$lib/stores'; + import { WEBUI_NAME, functions, models } from '$lib/stores'; import { onMount, getContext } from 'svelte'; import { createNewPrompt, deletePromptByCommand, getPrompts } from '$lib/apis/prompts'; @@ -19,6 +19,7 @@ import ArrowDownTray from '../icons/ArrowDownTray.svelte'; import Tooltip from '../common/Tooltip.svelte'; import ConfirmDialog from '../common/ConfirmDialog.svelte'; + import { getModels } from '$lib/apis'; const i18n = getContext('i18n'); @@ -226,7 +227,9 @@ if (res) { toast.success('Function deleted successfully'); + functions.set(await getFunctions(localStorage.token)); + models.set(await getModels(localStorage.token)); } }} > @@ -349,6 +352,7 @@ toast.success('Functions imported successfully'); functions.set(await getFunctions(localStorage.token)); + models.set(await getModels(localStorage.token)); }; reader.readAsText(importFiles[0]); diff --git a/src/routes/(app)/workspace/functions/create/+page.svelte b/src/routes/(app)/workspace/functions/create/+page.svelte index 5faf3d50b..0f73cf94e 100644 --- a/src/routes/(app)/workspace/functions/create/+page.svelte +++ b/src/routes/(app)/workspace/functions/create/+page.svelte @@ -3,9 +3,10 @@ import { onMount } from 'svelte'; import { goto } from '$app/navigation'; - import { functions } from '$lib/stores'; + import { functions, models } from '$lib/stores'; import { createNewFunction, getFunctions } from '$lib/apis/functions'; import FunctionEditor from '$lib/components/workspace/Functions/FunctionEditor.svelte'; + import { getModels } from '$lib/apis'; let mounted = false; let clone = false; @@ -26,6 +27,8 @@ if (res) { toast.success('Function created successfully'); functions.set(await getFunctions(localStorage.token)); + models.set(await getModels(localStorage.token)); + await goto('/workspace/functions'); } }; diff --git a/src/routes/(app)/workspace/functions/edit/+page.svelte b/src/routes/(app)/workspace/functions/edit/+page.svelte index a61dda142..21fc5acb6 100644 --- a/src/routes/(app)/workspace/functions/edit/+page.svelte +++ b/src/routes/(app)/workspace/functions/edit/+page.svelte @@ -4,11 +4,12 @@ import { goto } from '$app/navigation'; import { page } from '$app/stores'; - import { functions } from '$lib/stores'; + import { functions, models } from '$lib/stores'; import { updateFunctionById, getFunctions, getFunctionById } from '$lib/apis/functions'; import FunctionEditor from '$lib/components/workspace/Functions/FunctionEditor.svelte'; import Spinner from '$lib/components/common/Spinner.svelte'; + import { getModels } from '$lib/apis'; let func = null; @@ -27,6 +28,7 @@ if (res) { toast.success('Function updated successfully'); functions.set(await getFunctions(localStorage.token)); + models.set(await getModels(localStorage.token)); } }; From 5a2c2770a4e108c734eb09fed078301ac15b80f0 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 04:53:23 -0700 Subject: [PATCH 125/287] chore: format --- backend/apps/webui/internal/db.py | 10 ++++++---- src/lib/i18n/locales/ar-BH/translation.json | 5 ++++- src/lib/i18n/locales/bg-BG/translation.json | 5 ++++- src/lib/i18n/locales/bn-BD/translation.json | 5 ++++- src/lib/i18n/locales/ca-ES/translation.json | 5 ++++- src/lib/i18n/locales/ceb-PH/translation.json | 5 ++++- src/lib/i18n/locales/de-DE/translation.json | 5 ++++- src/lib/i18n/locales/dg-DG/translation.json | 5 ++++- src/lib/i18n/locales/en-GB/translation.json | 5 ++++- src/lib/i18n/locales/en-US/translation.json | 5 ++++- src/lib/i18n/locales/es-ES/translation.json | 5 ++++- src/lib/i18n/locales/fa-IR/translation.json | 5 ++++- src/lib/i18n/locales/fi-FI/translation.json | 5 ++++- src/lib/i18n/locales/fr-CA/translation.json | 5 ++++- src/lib/i18n/locales/fr-FR/translation.json | 5 ++++- src/lib/i18n/locales/he-IL/translation.json | 5 ++++- src/lib/i18n/locales/hi-IN/translation.json | 5 ++++- src/lib/i18n/locales/hr-HR/translation.json | 5 ++++- src/lib/i18n/locales/it-IT/translation.json | 5 ++++- src/lib/i18n/locales/ja-JP/translation.json | 5 ++++- src/lib/i18n/locales/ka-GE/translation.json | 5 ++++- src/lib/i18n/locales/ko-KR/translation.json | 5 ++++- src/lib/i18n/locales/lt-LT/translation.json | 5 ++++- src/lib/i18n/locales/nb-NO/translation.json | 5 ++++- src/lib/i18n/locales/nl-NL/translation.json | 5 ++++- src/lib/i18n/locales/pa-IN/translation.json | 5 ++++- src/lib/i18n/locales/pl-PL/translation.json | 5 ++++- src/lib/i18n/locales/pt-BR/translation.json | 5 ++++- src/lib/i18n/locales/pt-PT/translation.json | 5 ++++- src/lib/i18n/locales/ru-RU/translation.json | 5 ++++- src/lib/i18n/locales/sr-RS/translation.json | 5 ++++- src/lib/i18n/locales/sv-SE/translation.json | 5 ++++- src/lib/i18n/locales/tk-TW/translation.json | 5 ++++- src/lib/i18n/locales/tr-TR/translation.json | 5 ++++- src/lib/i18n/locales/uk-UA/translation.json | 5 ++++- src/lib/i18n/locales/vi-VN/translation.json | 5 ++++- src/lib/i18n/locales/zh-CN/translation.json | 5 ++++- src/lib/i18n/locales/zh-TW/translation.json | 5 ++++- 38 files changed, 154 insertions(+), 41 deletions(-) diff --git a/backend/apps/webui/internal/db.py b/backend/apps/webui/internal/db.py index b61eb012d..80c30d652 100644 --- a/backend/apps/webui/internal/db.py +++ b/backend/apps/webui/internal/db.py @@ -11,6 +11,7 @@ from config import SRC_LOG_LEVELS, DATA_DIR, DATABASE_URL, BACKEND_DIR log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["DB"]) + class JSONField(TextField): def db_value(self, value): return json.dumps(value) @@ -19,6 +20,7 @@ class JSONField(TextField): if value is not None: return json.loads(value) + # Check if the file exists if os.path.exists(f"{DATA_DIR}/ollama.db"): # Rename the file @@ -28,9 +30,9 @@ else: pass -# The `register_connection` function encapsulates the logic for setting up -# the database connection based on the connection string, while `connect` -# is a Peewee-specific method to manage the connection state and avoid errors +# The `register_connection` function encapsulates the logic for setting up +# the database connection based on the connection string, while `connect` +# is a Peewee-specific method to manage the connection state and avoid errors # when a connection is already open. try: DB = register_connection(DATABASE_URL) @@ -49,4 +51,4 @@ try: DB.connect(reuse_if_open=True) except OperationalError as e: log.info(f"Failed to connect to database again due to: {e}") - pass \ No newline at end of file + pass diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 5385c7783..2540e4065 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "وضع الملف", "File not found.": "لم يتم العثور على الملف.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "تم اكتشاف انتحال بصمة الإصبع: غير قادر على استخدام الأحرف الأولى كصورة رمزية. الافتراضي لصورة الملف الشخصي الافتراضية.", "Fluidly stream large external response chunks": "دفق قطع الاستجابة الخارجية الكبيرة بسلاسة", "Focus chat input": "التركيز على إدخال الدردشة", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "يُسمح فقط بالأحرف الأبجدية الرقمية والواصلات في سلسلة الأمر.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "خطاء! تمسك بقوة! ملفاتك لا تزال في فرن المعالجة. نحن نطبخهم إلى حد الكمال. يرجى التحلي بالصبر وسنخبرك عندما يصبحون جاهزين.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "خطاء! يبدو أن عنوان URL غير صالح. يرجى التحقق مرة أخرى والمحاولة مرة أخرى.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "خطاء! أنت تستخدم طريقة غير مدعومة (الواجهة الأمامية فقط). يرجى تقديم واجهة WebUI من الواجهة الخلفية.", "Open": "فتح", "Open AI": "AI فتح", @@ -541,6 +543,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "الى كتابة المحادثه", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "اليوم", "Toggle settings": "فتح وأغلاق الاعدادات", @@ -557,7 +560,7 @@ "Type Hugging Face Resolve (Download) URL": "اكتب عنوان URL لحل مشكلة الوجه (تنزيل).", "Uh-oh! There was an issue connecting to {{provider}}.": "{{provider}}خطاء أوه! حدثت مشكلة في الاتصال بـ ", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع ملف غير معروف '{{file_type}}', ولكن القبول والتعامل كنص عادي ", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "تحديث ونسخ الرابط", "Update password": "تحديث كلمة المرور", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 3bebc7f7d..f1edfef17 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Файл Мод", "File not found.": "Файл не е намерен.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Потвърждаване на отпечатък: Не може да се използва инициализационна буква като аватар. Потребителят се връща към стандартна аватарка.", "Fluidly stream large external response chunks": "Плавно предаване на големи части от външен отговор", "Focus chat input": "Фокусиране на чат вход", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Само алфанумерични знаци и тире са разрешени в командния низ.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Упс! Задръжте! Файловете ви все още са в пещта за обработка. Готвим ги до съвършенство. Моля, бъдете търпеливи и ще ви уведомим, когато са готови.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Изглежда URL адресът е невалиден. Моля, проверете отново и опитайте пак.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Използвате неподдържан метод (само фронтенд). Моля, сервирайте WebUI от бекенда.", "Open": "Отвори", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "към чат входа.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "днес", "Toggle settings": "Toggle settings", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Въведете Hugging Face Resolve (Download) URL", "Uh-oh! There was an issue connecting to {{provider}}.": "О, не! Възникна проблем при свързването с {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Непознат файлов тип '{{file_type}}', но се приема и обработва като текст", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Обнови и копирай връзка", "Update password": "Обновяване на парола", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index da41219b9..6a8158c16 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "ফাইল মোড", "File not found.": "ফাইল পাওয়া যায়নি", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "ফিঙ্গারপ্রিন্ট স্পুফিং ধরা পড়েছে: অ্যাভাটার হিসেবে নামের আদ্যক্ষর ব্যবহার করা যাচ্ছে না। ডিফল্ট প্রোফাইল পিকচারে ফিরিয়ে নেয়া হচ্ছে।", "Fluidly stream large external response chunks": "বড় এক্সটার্নাল রেসপন্স চাঙ্কগুলো মসৃণভাবে প্রবাহিত করুন", "Focus chat input": "চ্যাট ইনপুট ফোকাস করুন", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "কমান্ড স্ট্রিং-এ শুধুমাত্র ইংরেজি অক্ষর, সংখ্যা এবং হাইফেন ব্যবহার করা যাবে।", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "আহা! আরেকটু ধৈর্য্য ধরুন! আপনার ফাইলগুলো এখনো প্রোসেস চলছে, আমরা ওগুলোকে সেরা প্রক্রিয়াজাত করছি। তৈরি হয়ে গেলে আপনাকে জানিয়ে দেয়া হবে।", "Oops! Looks like the URL is invalid. Please double-check and try again.": "ওহ, মনে হচ্ছে ইউআরএলটা ইনভ্যালিড। দয়া করে আর চেক করে চেষ্টা করুন।", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "আপনি একটা আনসাপোর্টেড পদ্ধতি (শুধু ফ্রন্টএন্ড) ব্যবহার করছেন। দয়া করে WebUI ব্যাকএন্ড থেকে চালনা করুন।", "Open": "খোলা", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "চ্যাট ইনপুটে", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "আজ", "Toggle settings": "সেটিংস টোগল", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Hugging Face থেকে ডাউনলোড করার ইউআরএল টাইপ করুন", "Uh-oh! There was an issue connecting to {{provider}}.": "ওহ-হো! {{provider}} এর সাথে কানেকশনে সমস্যা হয়েছে।", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "অপরিচিত ফাইল ফরম্যাট '{{file_type}}', তবে প্লেইন টেক্সট হিসেবে গ্রহণ করা হলো", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "আপডেট এবং লিংক কপি করুন", "Update password": "পাসওয়ার্ড আপডেট করুন", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 1d326fca9..62d310595 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Mode Arxiu", "File not found.": "Arxiu no trobat.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "S'ha detectat la suplantació d'identitat d'empremtes digitals: no es poden utilitzar les inicials com a avatar. Per defecte a la imatge de perfil predeterminada.", "Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de respuesta externa", "Focus chat input": "Enfoca l'entrada del xat", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Només es permeten caràcters alfanumèrics i guions en la cadena de comandes.", "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.": "Ui! Aguanta! Els teus fitxers encara estan en el forn de processament. Els estem cuinant a la perfecció. Si us plau, tingues paciència i t'avisarem quan estiguin llestos.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ui! Sembla que l'URL és invàlida. Si us plau, revisa-ho i prova de nou.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ui! Estàs utilitzant un mètode no suportat (només frontend). Si us plau, serveix la WebUI des del backend.", "Open": "Obre", "Open AI": "Open AI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "a l'entrada del xat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Avui", "Toggle settings": "Commuta configuracions", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "Escriu URL de Resolució (Descàrrega) de Hugging Face", "Uh-oh! There was an issue connecting to {{provider}}.": "Uf! Hi va haver un problema connectant-se a {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipus d'Arxiu Desconegut '{{file_type}}', però acceptant i tractant com a text pla", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Actualitza i Copia enllaç", "Update password": "Actualitza contrasenya", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 57bfe540f..727e7a1cd 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "File mode", "File not found.": "Wala makit-an ang file.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "", "Fluidly stream large external response chunks": "Hapsay nga paghatud sa daghang mga tipik sa eksternal nga mga tubag", "Focus chat input": "Pag-focus sa entry sa diskusyon", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Ang alphanumeric nga mga karakter ug hyphen lang ang gitugotan sa command string.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! ", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! ", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! ", "Open": "Bukas", "Open AI": "Buksan ang AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "sa entrada sa iring.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "I-toggle ang mga setting", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Pagsulod sa resolusyon (pag-download) URL Hugging Face", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Wala mailhi nga tipo sa file '{{file_type}}', apan gidawat ug gitratar ingon yano nga teksto", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "I-update ang password", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index d85fc0721..9587faf9c 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "File Modus", "File not found.": "Datei nicht gefunden.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingerprint spoofing erkannt: Initialen können nicht als Avatar verwendet werden. Es wird auf das Standardprofilbild zurückgegriffen.", "Fluidly stream large external response chunks": "Große externe Antwortblöcke flüssig streamen", "Focus chat input": "Chat-Eingabe fokussieren", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Nur alphanumerische Zeichen und Bindestriche sind im Befehlsstring erlaubt.", "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.": "Hoppla! Warte noch einen Moment! Die Dateien sind noch im der Verarbeitung. Bitte habe etwas Geduld und wir informieren Dich, sobald sie bereit sind.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hoppla! Es sieht so aus, als wäre die URL ungültig. Bitte überprüfe sie und versuche es nochmal.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppla! du verwendest eine nicht unterstützte Methode (nur Frontend). Bitte stelle die WebUI vom Backend aus bereit.", "Open": "Öffne", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "to chat input.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Heute", "Toggle settings": "Einstellungen umschalten", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Gib die Hugging Face Resolve (Download) URL ein", "Uh-oh! There was an issue connecting to {{provider}}.": "Ups! Es gab ein Problem bei der Verbindung mit {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unbekannter Dateityp '{{file_type}}', wird jedoch akzeptiert und als einfacher Text behandelt.", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Erneuern und kopieren", "Update password": "Passwort aktualisieren", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index a027efa65..1ca601a0a 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Bark Mode", "File not found.": "Bark not found.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingerprint dogeing: Unable to use initials as avatar. Defaulting to default doge image.", "Fluidly stream large external response chunks": "Fluidly wow big chunks", "Focus chat input": "Focus chat bork", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Only wow characters and hyphens are allowed in the bork string.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Looks like the URL is invalid. Please double-check and try again.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.", "Open": "Open", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "to chat input. Very chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "Toggle settings much toggle", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Type Hugging Face Resolve (Download) URL much download", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! There was an issue connecting to {{provider}}. Much uh-oh!", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unknown File Type '{{file_type}}', but accepting and treating as plain text very unknown", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "Update password much change", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 2d6504ddd..f332244ca 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "", "File not found.": "", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "", "Fluidly stream large external response chunks": "", "Focus chat input": "", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "", "Open": "", "Open AI": "", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "", "Uh-oh! There was an issue connecting to {{provider}}.": "", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 2d6504ddd..f332244ca 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "", "File not found.": "", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "", "Fluidly stream large external response chunks": "", "Focus chat input": "", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "", "Open": "", "Open AI": "", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "", "Uh-oh! There was an issue connecting to {{provider}}.": "", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 91f090e3f..d3d5a1595 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Modo de archivo", "File not found.": "Archivo no encontrado.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Se detectó suplantación de huellas: No se pueden usar las iniciales como avatar. Por defecto se utiliza la imagen de perfil predeterminada.", "Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de respuesta externa", "Focus chat input": "Enfoca la entrada del chat", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Sólo se permiten caracteres alfanuméricos y guiones en la cadena de comando.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "¡Ups! ¡Agárrate fuerte! Tus archivos todavía están en el horno de procesamiento. Los estamos cocinando a la perfección. Tenga paciencia y le avisaremos una vez que estén listos.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "¡Ups! Parece que la URL no es válida. Vuelva a verificar e inténtelo nuevamente.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "¡Ups! Estás utilizando un método no compatible (solo frontend). Por favor ejecute la WebUI desde el backend.", "Open": "Abrir", "Open AI": "Abrir AI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "a la entrada del chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Hoy", "Toggle settings": "Alternar configuración", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "Escriba la URL (Descarga) de Hugging Face Resolve", "Uh-oh! There was an issue connecting to {{provider}}.": "¡Uh oh! Hubo un problema al conectarse a {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de archivo desconocido '{{file_type}}', pero se acepta y se trata como texto sin formato", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Actualizar y copiar enlace", "Update password": "Actualizar contraseña", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 3a70e0d25..cc05e0517 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "حالت فایل", "File not found.": "فایل یافت نشد.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "فانگ سرفیس شناسایی شد: نمی توان از نمایه شما به عنوان آواتار استفاده کرد. پیش فرض به عکس پروفایل پیش فرض برگشت داده شد.", "Fluidly stream large external response chunks": "تکه های پاسخ خارجی بزرگ را به صورت سیال پخش کنید", "Focus chat input": "فوکوس کردن ورودی گپ", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "فقط کاراکترهای الفبایی و خط فاصله در رشته فرمان مجاز هستند.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "اوه! فایل های شما هنوز در فر پردازش هستند. ما آنها را کامل می پزیم. لطفا صبور باشید، به محض آماده شدن به شما اطلاع خواهیم داد.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "اوه! به نظر می رسد URL نامعتبر است. لطفاً دوباره بررسی کنید و دوباره امتحان کنید.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "اوه! شما از یک روش پشتیبانی نشده (فقط frontend) استفاده می کنید. لطفاً WebUI را از بکند اجرا کنید.", "Open": "باز", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "در ورودی گپ.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "امروز", "Toggle settings": "نمایش/عدم نمایش تنظیمات", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "مقدار URL دانلود (Resolve) Hugging Face را وارد کنید", "Uh-oh! There was an issue connecting to {{provider}}.": "اوه اوه! مشکلی در اتصال به {{provider}} وجود داشت.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع فایل '{{file_type}}' ناشناخته است، به عنوان یک فایل متنی ساده با آن برخورد می شود.", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "به روزرسانی و کپی لینک", "Update password": "به روزرسانی رمزعبور", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index b2f094f5a..302bd4381 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Tiedostotila", "File not found.": "Tiedostoa ei löytynyt.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Sormenjäljen väärentäminen havaittu: Ei voi käyttää alkukirjaimia avatarina. Käytetään oletusprofiilikuvaa.", "Fluidly stream large external response chunks": "Virtaa suuria ulkoisia vastausosia joustavasti", "Focus chat input": "Fokusoi syöttökenttään", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja komentosarjassa.", "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.": "Hetki pieni, tiedostosi ovat yhä leivinuunissa. Odota kärsivällisesti, ja ilmoitamme, kun ne ovat valmiita.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hups! Näyttää siltä, että URL on virheellinen. Tarkista se ja yritä uudelleen.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hupsista! Käytät ei-tuettua menetelmää. WebUI pitää palvella backendista.", "Open": "Avaa", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "keskustelusyötteeseen.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Tänään", "Toggle settings": "Kytke asetukset", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Kirjoita Hugging Face -resolve-osoite", "Uh-oh! There was an issue connecting to {{provider}}.": "Voi ei! Yhteysongelma {{provider}}:n kanssa.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tuntematon tiedostotyyppi '{{file_type}}', mutta hyväksytään ja käsitellään pelkkänä tekstinä", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Päivitä ja kopioi linkki", "Update password": "Päivitä salasana", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index c4ed662f3..8d0bf9994 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Mode fichier", "File not found.": "Fichier introuvable.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Détection de falsification de empreinte digitale\u00a0: impossible d'utiliser les initiales comme avatar. Par défaut, l'image de profil par défaut est utilisée.", "Fluidly stream large external response chunks": "Diffusez de manière fluide de gros morceaux de réponses externes", "Focus chat input": "Se concentrer sur l'entrée de la discussion", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oups ! Tenez bon ! Vos fichiers sont encore dans le four de traitement. Nous les préparons jusqu'à la perfection. Soyez patient et nous vous informerons dès qu'ils seront prêts.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oups ! Il semble que l'URL soit invalide. Merci de vérifier et réessayer.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oups ! Vous utilisez une méthode non prise en charge (frontal uniquement). Veuillez servir WebUI depuis le backend.", "Open": "Ouvrir", "Open AI": "Open AI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "à l'entrée du chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Aujourd'hui", "Toggle settings": "Basculer les paramètres", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "Entrez l'URL de résolution (téléchargement) Hugging Face", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh ! Il y a eu un problème de connexion à {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Type de fichier inconnu '{{file_type}}', mais accepté et traité comme du texte brut", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Mettre à jour et copier le lien", "Update password": "Mettre à jour le mot de passe", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index aa68cfc74..c78de0368 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Mode Fichier", "File not found.": "Fichier non trouvé.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Usurpation d'empreinte digitale détectée : Impossible d'utiliser les initiales comme avatar. L'image de profil par défaut sera utilisée.", "Fluidly stream large external response chunks": "Diffusez de manière fluide de gros morceaux de réponses externes", "Focus chat input": "Concentrer sur l'entrée du chat", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oups ! Tenez bon ! Vos fichiers sont encore dans le four. Nous les cuisinons à la perfection. Soyez patient et nous vous informerons dès qu'ils seront prêts.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oups ! On dirait que l'URL est invalide. Vérifiez et réessayez.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oups ! Vous utilisez une méthode non-supportée (frontend uniquement). Veuillez également servir WebUI depuis le backend.", "Open": "Ouvrir", "Open AI": "Open AI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "à l'entrée du chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Aujourd'hui", "Toggle settings": "Basculer les paramètres", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "Entrez l'URL de Résolution (Téléchargement) Hugging Face", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh ! Il y a eu un problème de connexion à {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Type de Fichier Inconnu '{{file_type}}', mais accepté et traité comme du texte brut", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Mettre à Jour et Copier le Lien", "Update password": "Mettre à Jour le Mot de Passe", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index c25476c2b..911ce73ea 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "מצב קובץ", "File not found.": "הקובץ לא נמצא.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "התגלתה הזיית טביעת אצבע: לא ניתן להשתמש בראשי תיבות כאווטאר. משתמש בתמונת פרופיל ברירת מחדל.", "Fluidly stream large external response chunks": "שידור נתונים חיצוניים בקצב רציף", "Focus chat input": "מיקוד הקלט לצ'אט", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "רק תווים אלפאנומריים ומקפים מותרים במחרוזת הפקודה.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "אופס! תחזיק מעמד! הקבצים שלך עדיין בתהליך העיבוד. אנו מבשלים אותם לשלמות. נא להתאזר בסבלנות ונודיע לך ברגע שיהיו מוכנים.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "אופס! נראה שהכתובת URL אינה תקינה. אנא בדוק שוב ונסה שנית.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "אופס! אתה משתמש בשיטה לא נתמכת (רק חזית). אנא שרת את ממשק המשתמש האינטרנטי מהשרת האחורי.", "Open": "פתח", "Open AI": "Open AI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "לקלטת שיחה.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "היום", "Toggle settings": "החלפת מצב של הגדרות", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "הקלד כתובת URL של פתרון פנים מחבק (הורד)", "Uh-oh! There was an issue connecting to {{provider}}.": "או-הו! אירעה בעיה בהתחברות ל- {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "סוג קובץ לא ידוע '{{file_type}}', אך מקבל ומתייחס אליו כטקסט רגיל", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "עדכן ושכפל קישור", "Update password": "עדכן סיסמה", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 328d192f6..71fbab8a9 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "फ़ाइल मोड", "File not found.": "फ़ाइल प्राप्त नहीं हुई।", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "फ़िंगरप्रिंट स्पूफ़िंग का पता चला: प्रारंभिक अक्षरों को अवतार के रूप में उपयोग करने में असमर्थ। प्रोफ़ाइल छवि को डिफ़ॉल्ट पर डिफ़ॉल्ट किया जा रहा है.", "Fluidly stream large external response chunks": "बड़े बाह्य प्रतिक्रिया खंडों को तरल रूप से प्रवाहित करें", "Focus chat input": "चैट इनपुट पर फ़ोकस करें", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "कमांड स्ट्रिंग में केवल अल्फ़ान्यूमेरिक वर्ण और हाइफ़न की अनुमति है।", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "उफ़! कृपया प्रतीक्षा करें, आपकी फ़ाइलें अभी भी प्रसंस्करण ओवन में हैं। हम उन्हें पूर्णता से पका रहे हैं। कृपया धैर्य रखें और जब वे तैयार हो जाएंगे तो हम आपको बता देंगे।", "Oops! Looks like the URL is invalid. Please double-check and try again.": "उफ़! ऐसा लगता है कि यूआरएल अमान्य है. कृपया दोबारा जांचें और पुनः प्रयास करें।", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "उफ़! आप एक असमर्थित विधि (केवल फ्रंटएंड) का उपयोग कर रहे हैं। कृपया बैकएंड से WebUI सर्वे करें।", "Open": "खोलें", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "इनपुट चैट करने के लिए.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "आज", "Toggle settings": "सेटिंग्स टॉगल करें", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "हगिंग फेस रिज़ॉल्व (डाउनलोड) यूआरएल टाइप करें", "Uh-oh! There was an issue connecting to {{provider}}.": "उह ओह! {{provider}} से कनेक्ट करने में एक समस्या थी।", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "अज्ञात फ़ाइल प्रकार '{{file_type}}', लेकिन स्वीकार करना और सादे पाठ के रूप में व्यवहार करना", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "अपडेट करें और लिंक कॉपी करें", "Update password": "पासवर्ड अपडेट करें", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 60e8287bb..a5d299790 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Način datoteke", "File not found.": "Datoteka nije pronađena.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Otkriveno krivotvorenje otisaka prstiju: Nemoguće je koristiti inicijale kao avatar. Postavljanje na zadanu profilnu sliku.", "Fluidly stream large external response chunks": "Glavno strujanje velikih vanjskih dijelova odgovora", "Focus chat input": "Fokusiraj unos razgovora", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Samo alfanumerički znakovi i crtice su dopušteni u naredbenom nizu.", "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.": "Ups! Držite se! Vaše datoteke su još uvijek u procesu obrade. Pečemo ih do savršenstva. Molimo vas da budete strpljivi i obavijestit ćemo vas kada budu spremne.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Izgleda da je URL nevažeći. Molimo provjerite ponovno i pokušajte ponovo.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Koristite nepodržanu metodu (samo frontend). Molimo poslužite WebUI s backend-a.", "Open": "Otvoreno", "Open AI": "Open AI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Za pristup WebUI-u obratite se administratoru. Administratori mogu upravljati statusima korisnika s Admin panela.", "To add documents here, upload them to the \"Documents\" workspace first.": "Da biste ovdje dodali dokumente, prvo ih prenesite u radni prostor \"Dokumenti\".", "to chat input.": "u unos razgovora.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Danas", "Toggle settings": "Prebaci postavke", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "Upišite Hugging Face Resolve (Download) URL", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Pojavio se problem s povezivanjem na {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Nepoznata vrsta datoteke '{{file_type}}', ali prihvaćena i obrađuje se kao običan tekst", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Ažuriraj i kopiraj vezu", "Update password": "Ažuriraj lozinku", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index ae3035e08..2e18b622b 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Modalità file", "File not found.": "File non trovato.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Rilevato spoofing delle impronte digitali: impossibile utilizzare le iniziali come avatar. Ripristino all'immagine del profilo predefinita.", "Fluidly stream large external response chunks": "Trasmetti in modo fluido blocchi di risposta esterni di grandi dimensioni", "Focus chat input": "Metti a fuoco l'input della chat", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Nella stringa di comando sono consentiti solo caratteri alfanumerici e trattini.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ops! Aspetta! I tuoi file sono ancora in fase di elaborazione. Li stiamo cucinando alla perfezione. Per favore sii paziente e ti faremo sapere quando saranno pronti.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ops! Sembra che l'URL non sia valido. Si prega di ricontrollare e riprovare.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ops! Stai utilizzando un metodo non supportato (solo frontend). Si prega di servire la WebUI dal backend.", "Open": "Apri", "Open AI": "Open AI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "all'input della chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Oggi", "Toggle settings": "Attiva/disattiva impostazioni", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "Digita l'URL di Hugging Face Resolve (Download)", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Si è verificato un problema durante la connessione a {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo di file sconosciuto '{{file_type}}', ma accettato e trattato come testo normale", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Aggiorna e copia link", "Update password": "Aggiorna password", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 019ce5803..8e120ec0f 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "ファイルモード", "File not found.": "ファイルが見つかりません。", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "指紋のなりすましが検出されました: イニシャルをアバターとして使用できません。デフォルトのプロファイル画像にデフォルト設定されています。", "Fluidly stream large external response chunks": "大規模な外部応答チャンクを流動的にストリーミングする", "Focus chat input": "チャット入力をフォーカス", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "コマンド文字列には英数字とハイフンのみが許可されています。", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "おっと! しばらくお待ちください! ファイルはまだ処理中です。完璧に仕上げていますので、しばらくお待ちください。準備ができたらお知らせします。", "Oops! Looks like the URL is invalid. Please double-check and try again.": "おっと! URL が無効なようです。もう一度確認してやり直してください。", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "おっと! サポートされていない方法 (フロントエンドのみ) を使用しています。バックエンドから WebUI を提供してください。", "Open": "開く", "Open AI": "Open AI", @@ -536,6 +538,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "チャット入力へ。", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "今日", "Toggle settings": "設定を切り替え", @@ -552,7 +555,7 @@ "Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (ダウンロード) URL を入力してください", "Uh-oh! There was an issue connecting to {{provider}}.": "おっと! {{provider}} への接続に問題が発生しました。", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "不明なファイルタイプ '{{file_type}}' ですが、プレーンテキストとして受け入れて処理します", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "リンクの更新とコピー", "Update password": "パスワードを更新", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 9a6d04a85..17b33b48e 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "ფაილური რეჟიმი", "File not found.": "ფაილი ვერ მოიძებნა", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "აღმოჩენილია თითის ანაბეჭდის გაყალბება: ინიციალების გამოყენება ავატარად შეუძლებელია. დეფოლტ პროფილის დეფოლტ სურათი.", "Fluidly stream large external response chunks": "თხევადი ნაკადი დიდი გარე საპასუხო ნაწილაკების", "Focus chat input": "ჩეთის შეყვანის ფოკუსი", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "ბრძანების სტრიქონში დაშვებულია მხოლოდ ალფანუმერული სიმბოლოები და დეფისები.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "უპს! გამაგრდი! თქვენი ფაილები ჯერ კიდევ დამუშავების ღუმელშია. ჩვენ მათ სრულყოფილებამდე ვამზადებთ. გთხოვთ მოითმინოთ და ჩვენ შეგატყობინებთ, როგორც კი ისინი მზად იქნებიან.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "უი! როგორც ჩანს, მისამართი არასწორია. გთხოვთ, გადაამოწმოთ და ისევ სცადოთ.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "უპს! თქვენ იყენებთ მხარდაუჭერელ მეთოდს (მხოლოდ frontend). გთხოვთ, მოემსახუროთ WebUI-ს ბექენდიდან", "Open": "ღია", "Open AI": "ღია AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "ჩატში", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "დღეს", "Toggle settings": "პარამეტრების გადართვა", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "სცადე გადმოწერო Hugging Face Resolve URL", "Uh-oh! There was an issue connecting to {{provider}}.": "{{provider}}-თან დაკავშირების პრობლემა წარმოიშვა.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "უცნობი ფაილის ტიპი „{{file_type}}“, მაგრამ მიიღება და განიხილება როგორც მარტივი ტექსტი", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "განახლება და ბმულის კოპირება", "Update password": "პაროლის განახლება", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 11cba5dcf..101173b16 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "파일 모드", "File not found.": "파일을 찾을 수 없습니다.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingerprint spoofing 감지: 이니셜을 아바타로 사용할 수 없습니다. 기본 프로필 이미지로 설정합니다.", "Fluidly stream large external response chunks": "대규모 외부 응답 청크를 유연하게 스트리밍", "Focus chat input": "채팅 입력창에 포커스", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "명령어 문자열에는 영문자, 숫자 및 하이픈만 허용됩니다.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "이런! 잠시만 기다려 주세요! 파일이 아직 처리 중입니다. 완벽을 위해 준비하고 있습니다. 준비가 되면 알려드리겠습니다.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "이런! URL이 잘못된 것 같습니다. 다시 한번 확인하고 다시 시도해주세요.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "이런! 지원되지 않는 방식(프론트엔드만)을 사용하고 계십니다. 백엔드에서 WebUI를 제공해주세요.", "Open": "열기", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "WebUI에 접속하려면 관리자에게 문의하십시오. 관리자는 관리자 패널에서 사용자 상태를 관리할 수 있습니다.", "To add documents here, upload them to the \"Documents\" workspace first.": "여기에 문서를 추가하려면, \"문서\" 워크스페이스에 먼저 업로드하세요.", "to chat input.": "채팅 입력으로.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "여기서 도구를 선택하려면, \"도구\" 워크스페이스에 먼저 추가하세요.", "Today": "오늘", "Toggle settings": "설정 전환", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (다운로드) URL 입력", "Uh-oh! There was an issue connecting to {{provider}}.": "앗! {{provider}}에 연결하는 데 문제가 있었습니다.", "UI": "UI", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "알 수 없는 파일 유형 '{{file_type}}', 일반 텍스트로 허용하고 처리합니다.", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "업데이트", "Update and Copy Link": "링크 업데이트 및 복사", "Update password": "비밀번호 업데이트", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index ede1c3534..7ba26c77b 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Dokumentų rėžimas", "File not found.": "Failas nerastas.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Nepavyko nsutatyti profilio nuotraukos", "Fluidly stream large external response chunks": "Sklandžiai transliuoti ilgus atsakymus", "Focus chat input": "Fokusuoti žinutės įvestį", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Leistinos tik raidės, skaičiai ir brūkšneliai.", "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.": "Jūsų failai vis dar tvarkomi.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Looks like the URL is invalid. Please double-check and try again.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Naudojate nepalaikomą (front-end) web ui rėžimą. Prašau serviruokite WebUI iš back-end", "Open": "Atverti", "Open AI": "Open AI", @@ -539,6 +541,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "į pokalbio įvestį", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Šiandien", "Toggle settings": "Atverti/užverti parametrus", @@ -555,7 +558,7 @@ "Type Hugging Face Resolve (Download) URL": "Įveskite Hugging Face Resolve nuorodą", "Uh-oh! There was an issue connecting to {{provider}}.": "O ne! Prisijungiant prie {{provider}} kilo problema.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Nepažįstamas '{{file_type}}' failo formatas, tačiau jis priimtas ir bus apdorotas kaip grynas tekstas", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Atnaujinti ir kopijuoti nuorodą", "Update password": "Atnaujinti slaptažodį", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 4db9807ad..d66d1e745 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Filmodus", "File not found.": "Fil ikke funnet.", + "Filters": "", "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", "Focus chat input": "Fokuser chatinput", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Kun alfanumeriske tegn og bindestreker er tillatt i kommandostrengen.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! Hold deg fast! Filene dine er fortsatt i prosesseringsovnen. Vi tilbereder dem til perfeksjon. Vennligst vær tålmodig, vi gir beskjed når de er klare.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Ser ut som URL-en er ugyldig. Vennligst dobbeltsjekk og prøv igjen.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! 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": "Åpne", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "til chatinput.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "I dag", "Toggle settings": "Veksle innstillinger", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Skriv inn Hugging Face Resolve (nedlasting) URL", "Uh-oh! There was an issue connecting to {{provider}}.": "Oops! Det oppsto et problem med tilkoblingen til {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Ukjent filtype '{{file_type}}', men aksepteres og behandles som ren tekst", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Oppdater og kopier lenke", "Update password": "Oppdater passord", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 5e167aeb1..13604ff38 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Bestandsmodus", "File not found.": "Bestand niet gevonden.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Vingerafdruk spoofing gedetecteerd: kan initialen niet gebruiken als avatar. Standaardprofielafbeelding wordt gebruikt.", "Fluidly stream large external response chunks": "Stream vloeiend grote externe responsbrokken", "Focus chat input": "Focus chat input", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Alleen alfanumerieke karakters en streepjes zijn toegestaan in de commando string.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! Houd vast! Je bestanden zijn nog steeds in de verwerkingsoven. We zijn ze aan het bereiden tot perfectie. Wees geduldig en we laten je weten wanneer ze klaar zijn.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Het lijkt erop dat de URL ongeldig is. Controleer het nogmaals en probeer opnieuw.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! Je gebruikt een niet-ondersteunde methode (alleen frontend). Serveer de WebUI vanuit de backend.", "Open": "Open", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "naar chat input.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Vandaag", "Toggle settings": "Wissel instellingen", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Type Hugging Face Resolve (Download) URL", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Er was een probleem met verbinden met {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Onbekend Bestandstype '{{file_type}}', maar accepteren en behandelen als platte tekst", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Update en Kopieer Link", "Update password": "Wijzig wachtwoord", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index 1ab2f7977..4afb7d99a 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "ਫਾਈਲ ਮੋਡ", "File not found.": "ਫਾਈਲ ਨਹੀਂ ਮਿਲੀ।", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "ਫਿੰਗਰਪ੍ਰਿੰਟ ਸਪੂਫਿੰਗ ਪਾਈ ਗਈ: ਅਵਤਾਰ ਵਜੋਂ ਸ਼ੁਰੂਆਤੀ ਅੱਖਰ ਵਰਤਣ ਵਿੱਚ ਅਸਮਰੱਥ। ਮੂਲ ਪ੍ਰੋਫਾਈਲ ਚਿੱਤਰ 'ਤੇ ਡਿਫਾਲਟ।", "Fluidly stream large external response chunks": "ਵੱਡੇ ਬਾਹਰੀ ਜਵਾਬ ਚੰਕਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸਟ੍ਰੀਮ ਕਰੋ", "Focus chat input": "ਗੱਲਬਾਤ ਇਨਪੁਟ 'ਤੇ ਧਿਆਨ ਦਿਓ", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "ਕਮਾਂਡ ਸਤਰ ਵਿੱਚ ਸਿਰਫ਼ ਅਲਫ਼ਾਨਯੂਮੈਰਿਕ ਅੱਖਰ ਅਤੇ ਹਾਈਫਨ ਦੀ ਆਗਿਆ ਹੈ।", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "ਓਹੋ! ਥੋੜਾ ਸਬਰ ਕਰੋ! ਤੁਹਾਡੀਆਂ ਫਾਈਲਾਂ ਅਜੇ ਵੀ ਪ੍ਰਕਿਰਿਆ ਵਿੱਚ ਹਨ। ਅਸੀਂ ਉਨ੍ਹਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਤਿਆਰ ਕਰ ਰਹੇ ਹਾਂ। ਕਿਰਪਾ ਕਰਕੇ ਧੀਰਜ ਰੱਖੋ ਅਤੇ ਅਸੀਂ ਤੁਹਾਨੂੰ ਦੱਸਾਂਗੇ ਜਦੋਂ ਉਹ ਤਿਆਰ ਹੋ ਜਾਣਗੇ।", "Oops! Looks like the URL is invalid. Please double-check and try again.": "ਓਹੋ! ਲੱਗਦਾ ਹੈ ਕਿ URL ਗਲਤ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਜਾਂਚ ਕਰੋ ਅਤੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "ਓਹੋ! ਤੁਸੀਂ ਇੱਕ ਅਣਸਮਰਥਿਤ ਢੰਗ ਵਰਤ ਰਹੇ ਹੋ (ਸਿਰਫ਼ ਫਰੰਟਐਂਡ)। ਕਿਰਪਾ ਕਰਕੇ ਵੈਬਯੂਆਈ ਨੂੰ ਬੈਕਐਂਡ ਤੋਂ ਸਰਵ ਕਰੋ।", "Open": "ਖੋਲ੍ਹੋ", "Open AI": "ਓਪਨ ਏਆਈ", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "ਗੱਲਬਾਤ ਇਨਪੁਟ ਲਈ।", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "ਅੱਜ", "Toggle settings": "ਸੈਟਿੰਗਾਂ ਟੌਗਲ ਕਰੋ", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (ਡਾਊਨਲੋਡ) URL ਟਾਈਪ ਕਰੋ", "Uh-oh! There was an issue connecting to {{provider}}.": "ਓਹੋ! {{provider}} ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਵਿੱਚ ਸਮੱਸਿਆ ਆਈ।", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "ਅਣਜਾਣ ਫਾਈਲ ਕਿਸਮ '{{file_type}}', ਪਰ ਸਧਾਰਨ ਪਾਠ ਵਜੋਂ ਸਵੀਕਾਰ ਕਰਦੇ ਹੋਏ", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "ਅੱਪਡੇਟ ਕਰੋ ਅਤੇ ਲਿੰਕ ਕਾਪੀ ਕਰੋ", "Update password": "ਪਾਸਵਰਡ ਅੱਪਡੇਟ ਕਰੋ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 4ba3183a8..ce5dd123e 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Tryb pliku", "File not found.": "Plik nie został znaleziony.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Wykryto podszywanie się pod odcisk palca: Nie można używać inicjałów jako awatara. Przechodzenie do domyślnego obrazu profilowego.", "Fluidly stream large external response chunks": "Płynnie przesyłaj strumieniowo duże fragmenty odpowiedzi zewnętrznych", "Focus chat input": "Skoncentruj na czacie", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "W poleceniu dozwolone są tylko znaki alfanumeryczne i myślniki.", "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.": "Ups! Trzymaj się! Twoje pliki są wciąż w procesie obróbki. Gotujemy je do perfekcji. Prosimy o cierpliwość, poinformujemy Cię, gdy będą gotowe.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Wygląda na to, że URL jest nieprawidłowy. Sprawdź jeszcze raz i spróbuj ponownie.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Używasz nieobsługiwanej metody (tylko interfejs front-end). Proszę obsłużyć interfejs WebUI z poziomu backendu.", "Open": "Otwórz", "Open AI": "Open AI", @@ -539,6 +541,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "do pola wprowadzania czatu.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Dzisiaj", "Toggle settings": "Przełącz ustawienia", @@ -555,7 +558,7 @@ "Type Hugging Face Resolve (Download) URL": "Wprowadź adres URL do pobrania z Hugging Face", "Uh-oh! There was an issue connecting to {{provider}}.": "O nie! Wystąpił problem z połączeniem z {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Nieznany typ pliku '{{file_type}}', ale akceptowany i traktowany jako zwykły tekst", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Uaktualnij i skopiuj link", "Update password": "Aktualizacja hasła", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index cdee76ee9..f6a865d71 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Modo de Arquivo", "File not found.": "Arquivo não encontrado.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Impostação de impressão digital detectada: Não é possível usar iniciais como avatar. Padronizando para imagem de perfil padrão.", "Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa", "Focus chat input": "Focar entrada de bate-papo", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Somente caracteres alfanuméricos e hífens são permitidos na string de comando.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Opa! Aguente firme! Seus arquivos ainda estão no forno de processamento. Estamos cozinhando-os com perfeição. Por favor, seja paciente e avisaremos quando estiverem prontos.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Opa! Parece que a URL é inválida. Verifique novamente e tente outra vez.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Opa! Você está usando um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.", "Open": "Abrir", "Open AI": "OpenAI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "para a entrada de bate-papo.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Hoje", "Toggle settings": "Alternar configurações", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "Digite a URL do Hugging Face Resolve (Download)", "Uh-oh! There was an issue connecting to {{provider}}.": "Opa! Houve um problema ao conectar-se a {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de arquivo desconhecido '{{file_type}}', mas aceitando e tratando como texto simples", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Atualizar e Copiar Link", "Update password": "Atualizar senha", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 58fe2ea06..8f1b940f1 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Modo de Ficheiro", "File not found.": "Ficheiro não encontrado.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Detectada falsificação da impressão digital: Não é possível usar iniciais como avatar. A usar a imagem de perfil padrão.", "Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa", "Focus chat input": "Focar na conversa", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Apenas caracteres alfanuméricos e hífens são permitidos na string de comando.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Epá! Segura-te! Os teus ficheiros ainda estão no forno de processamento. Estamos a cozinhá-los com perfeição. Por favor, seja paciente e avisaremos quando estiverem prontos.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Epá! Parece que o URL é inválido. Verifique novamente e tente outra vez.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Epá! Você está a usar um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.", "Open": "Abrir", "Open AI": "Open AI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para aceder ao WebUI, entre em contato com o administrador. Os administradores podem gerir o status dos utilizadores no Painel de Administração.", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "para a entrada da conversa.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Hoje", "Toggle settings": "Alternar configurações", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "Escreva o URL do Hugging Face Resolve (Descarregar)", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Houve um problema ao conectar a {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de ficheiro desconhecido '{{file_type}}', mas aceitando e tratando como texto simples", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Atualizar e Copiar Link", "Update password": "Atualizar senha", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 70392ae9f..da1c4af65 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Режим файла", "File not found.": "Файл не найден.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Определение подделки отпечатка: Невозможно использовать инициалы в качестве аватара. По умолчанию используется изображение профиля по умолчанию.", "Fluidly stream large external response chunks": "Плавная потоковая передача больших фрагментов внешних ответов", "Focus chat input": "Фокус ввода чата", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "В строке команды разрешено использовать только буквенно-цифровые символы и дефисы.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Упс! Зажмите пояса! Ваши файлы все еще в процессе обработки. Мы готовим их до идеального состояния. Пожалуйста, будьте терпеливы, и мы сообщим вам, когда они будут готовы.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Похоже, что URL-адрес недействителен. Пожалуйста, перепроверьте и попробуйте еще раз.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Вы используете неподдерживаемый метод (только фронтенд). Пожалуйста, обслуживайте веб-интерфейс из бэкенда.", "Open": "Открыть", "Open AI": "Open AI", @@ -539,6 +541,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "в чате.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Сегодня", "Toggle settings": "Переключить настройки", @@ -555,7 +558,7 @@ "Type Hugging Face Resolve (Download) URL": "Введите URL-адрес Hugging Face Resolve (загрузки)", "Uh-oh! There was an issue connecting to {{provider}}.": "Упс! Возникла проблема подключения к {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Неизвестный тип файла '{{file_type}}', но принимается и обрабатывается как обычный текст", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Обновить и скопировать ссылку", "Update password": "Обновить пароль", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index b1b6a35af..f2d17a13a 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Режим датотеке", "File not found.": "Датотека није пронађена.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Откривено лажно представљање отиска прста: Немогуће је користити иницијале као аватар. Прелазак на подразумевану профилну слику.", "Fluidly stream large external response chunks": "Течно стримујте велике спољне делове одговора", "Focus chat input": "Усредсредите унос ћаскања", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Само алфанумерички знакови и цртице су дозвољени у низу наредби.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Упс! Само тренутак! Ваше датотеке се још обрађују. Припремамо их до савршенства. Молимо вас за стрпљење и обавестићемо вас када буду спремне.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Изгледа да је адреса неважећа. Молимо вас да проверите и покушате поново.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Користите неподржани метод (само фронтенд). Молимо вас да покренете WebUI са бекенда.", "Open": "Отвори", "Open AI": "Open AI", @@ -538,6 +540,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "у унос ћаскања.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Данас", "Toggle settings": "Пребаци подешавања", @@ -554,7 +557,7 @@ "Type Hugging Face Resolve (Download) URL": "Унесите Hugging Face Resolve (Download) адресу", "Uh-oh! There was an issue connecting to {{provider}}.": "Упс! Дошло је до проблема при повезивању са {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Непознат тип датотеке '{{file_type}}', али прихваћен и третиран као обичан текст", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Ажурирај и копирај везу", "Update password": "Ажурирај лозинку", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 692020fb7..2b7790747 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Fil-läge", "File not found.": "Fil hittades inte.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingeravtrycksmanipulering upptäckt: Kan inte använda initialer som avatar. Återställning till standardprofilbild.", "Fluidly stream large external response chunks": "Strömma flytande stora externa svarschunks", "Focus chat input": "Fokusera på chattfältet", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Endast alfanumeriska tecken och bindestreck är tillåtna i kommandosträngen.", "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.": "Hoppsan! Håll i dig! Dina filer är fortfarande i bearbetningsugnen. Vi lagar dem till perfektion. Var tålmodig så meddelar vi dig när de är redo.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hoppsan! Det ser ut som om URL:en är ogiltig. Dubbelkolla gärna och försök igen.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppsan! Du använder en ej stödd metod (endast frontend). Vänligen servera WebUI från backend.", "Open": "Öppna", "Open AI": "Öppna AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "För att få tillgång till WebUI, kontakta administratören. Administratörer kan hantera behörigheter från administrationspanelen.", "To add documents here, upload them to the \"Documents\" workspace first.": "Om du vill lägga till dokument här ska du först ladda upp dem till arbetsytan \"Dokument\".", "to chat input.": "till chattinmatning.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "Om du vill välja verktygslådor här måste du först lägga till dem i arbetsytan \"Verktyg\".", "Today": "Idag", "Toggle settings": "Växla inställningar", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Skriv Hugging Face Resolve (nedladdning) URL", "Uh-oh! There was an issue connecting to {{provider}}.": "Oj då! Det uppstod ett problem med anslutningen till {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Okänd filtyp '{{file_type}}', men accepterar och behandlar som vanlig text", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Uppdatera och kopiera länk", "Update password": "Uppdatera lösenord", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index 2d6504ddd..f332244ca 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "", "File not found.": "", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "", "Fluidly stream large external response chunks": "", "Focus chat input": "", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "", "Open": "", "Open AI": "", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "", "Uh-oh! There was an issue connecting to {{provider}}.": "", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index d3982a4dd..290ccb4da 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Dosya Modu", "File not found.": "Dosya bulunamadı.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Parmak izi sahteciliği tespit edildi: Avatar olarak baş harfler kullanılamıyor. Varsayılan profil resmine dönülüyor.", "Fluidly stream large external response chunks": "Büyük harici yanıt chunklarını akıcı bir şekilde yayınlayın", "Focus chat input": "Sohbet girişine odaklan", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Komut dizisinde yalnızca alfasayısal karakterler ve tireler kabul edilir.", "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.": "Hop! Biraz sabırlı ol! Dosyaların hala hazırlama fırınında. Onları ağzınıza layık olana kadar pişiriyoruz :) Lütfen sabırlı olun; hazır olduklarında size haber vereceğiz.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hop! URL geçersiz gibi görünüyor. Lütfen tekrar kontrol edin ve yeniden deneyin.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hop! Desteklenmeyen bir yöntem kullanıyorsunuz (yalnızca önyüz). Lütfen WebUI'yi arkayüzden sunun.", "Open": "Aç", "Open AI": "Open AI", @@ -537,6 +539,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "sohbet girişine.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Bugün", "Toggle settings": "Ayarları Aç/Kapat", @@ -553,7 +556,7 @@ "Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (Download) URL'sini Yazın", "Uh-oh! There was an issue connecting to {{provider}}.": "Ah! {{provider}}'a bağlanırken bir sorun oluştu.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Bilinmeyen Dosya Türü '{{file_type}}', ancak düz metin olarak kabul ediliyor ve işleniyor", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Güncelle ve Bağlantıyı Kopyala", "Update password": "Parolayı Güncelle", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 684d91811..65cba3696 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "Файловий режим", "File not found.": "Файл не знайдено.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Виявлено підробку відбитків: Неможливо використовувати ініціали як аватар. Повернення до зображення профілю за замовчуванням.", "Fluidly stream large external response chunks": "Плавно передавати великі фрагменти зовнішніх відповідей", "Focus chat input": "Фокус вводу чату", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "У рядку команди дозволено використовувати лише алфавітно-цифрові символи та дефіси.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ой! Зачекайте, будь ласка! Ваші файли ще готуються. Ми робимо все, щоб вони були ідеальними. Будь ласка, будьте терплячі, ми повідомимо вам, коли вони будуть готові.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Схоже, що URL-адреса невірна. Будь ласка, перевірте ще раз та спробуйте ще раз.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Ви використовуєте непідтримуваний метод (тільки для фронтенду). Будь ласка, обслуговуйте WebUI з бекенду.", "Open": "Відкрити", "Open AI": "Open AI", @@ -539,6 +541,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Щоб отримати доступ до веб-інтерфейсу, зверніться до адміністратора. Адміністратори можуть керувати статусами користувачів з Панелі адміністратора.", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "в чаті.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Сьогодні", "Toggle settings": "Переключити налаштування", @@ -555,7 +558,7 @@ "Type Hugging Face Resolve (Download) URL": "Введіть URL ресурсу Hugging Face Resolve (завантаження)", "Uh-oh! There was an issue connecting to {{provider}}.": "Ой! Виникла проблема при підключенні до {{provider}}.", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Невідомий тип файлу '{{file_type}}', але приймається та обробляється як звичайний текст", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Оновлення та копіювання посилання", "Update password": "Оновити пароль", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index b01d3f57c..d0e292329 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -241,6 +241,7 @@ "File": "Tệp", "File Mode": "Chế độ Tệp văn bản", "File not found.": "Không tìm thấy tệp.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Phát hiện giả mạo vân tay: Không thể sử dụng tên viết tắt làm hình đại diện. Mặc định là hình ảnh hồ sơ mặc định.", "Fluidly stream large external response chunks": "Truyền tải các khối phản hồi bên ngoài lớn một cách trôi chảy", "Focus chat input": "Tập trung vào nội dung chat", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Chỉ ký tự số và gạch nối được phép trong chuỗi lệnh.", "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.": "Vui lòng kiên nhẫn chờ đợi! Các tệp của bạn vẫn đang trong được phân tích và xử lý. Chúng tôi đang cố gắng hoàn thành chúng. Vui lòng kiên nhẫn và chúng tôi sẽ cho bạn biết khi chúng sẵn sàng.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Rất tiếc! URL dường như không hợp lệ. Vui lòng kiểm tra lại và thử lại.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Rất tiếc! Bạn đang sử dụng một phương thức không được hỗ trợ (chỉ dành cho frontend). Vui lòng cung cấp phương thức cho WebUI từ phía backend.", "Open": "Mở", "Open AI": "Open AI", @@ -536,6 +538,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Để truy cập vui lòng liên hệ với quản trị viên.", "To add documents here, upload them to the \"Documents\" workspace first.": "Để thêm tài liệu, trước tiên hãy upload chúng lên khu vực \"Tài liệu\".", "to chat input.": "đến đầu vào trò chuyện.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Hôm nay", "Toggle settings": "Bật/tắt cài đặt", @@ -552,7 +555,7 @@ "Type Hugging Face Resolve (Download) URL": "Nhập URL Hugging Face Resolve (Tải xuống)", "Uh-oh! There was an issue connecting to {{provider}}.": "Ồ! Đã xảy ra sự cố khi kết nối với {{provider}}.", "UI": "Giao diện", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Loại Tệp Không xác định '{{file_type}}', nhưng đang chấp nhận và xử lý như văn bản thô", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "Cập nhật", "Update and Copy Link": "Cập nhật và sao chép link", "Update password": "Cập nhật mật khẩu", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index ec333a684..1e6e3b6cc 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -241,6 +241,7 @@ "File": "文件", "File Mode": "文件模式", "File not found.": "文件未找到。", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "检测到指纹伪造:无法使用姓名缩写作为头像。默认使用默认个人形象。", "Fluidly stream large external response chunks": "流畅地传输外部大型响应块数据", "Focus chat input": "聚焦对话输入", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "命令字符串中只允许使用英文字母,数字 (0-9) 以及连字符 (-)。", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "糟糕!请稍等!您的文件还在处理中。我们正在努力让它们达到最佳效果。请耐心等待,准备好后我们会通知您。", "Oops! Looks like the URL is invalid. Please double-check and try again.": "糟糕!此链接似乎为无效链接。请检查后重试。", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "糟糕!你正在使用不被支持的方法(仅前端)。请从后端提供 WebUI 服务。", "Open": "打开", "Open AI": "Open AI", @@ -536,6 +538,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "请联系管理员以访问。管理员可以在后台管理面板中管理用户状态。", "To add documents here, upload them to the \"Documents\" workspace first.": "要在此处添加文档,请先将它们上传到工作空间中的“文档”内。", "to chat input.": "到对话输入。", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "要在这里选择工具包,请先将它们添加到工作空间中的“工具”。", "Today": "今天", "Toggle settings": "切换设置", @@ -552,7 +555,7 @@ "Type Hugging Face Resolve (Download) URL": "输入 Hugging Face 解析(下载)URL", "Uh-oh! There was an issue connecting to {{provider}}.": "糟糕!连接到 {{provider}} 时出现问题。", "UI": "界面", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "未知文件类型'{{file_type}}',将视为纯文本进行处理", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "更新", "Update and Copy Link": "更新和复制链接", "Update password": "更新密码", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 7119207f7..7adc70469 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -241,6 +241,7 @@ "File": "", "File Mode": "檔案模式", "File not found.": "找不到檔案。", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "偽裝偽裝檢測:無法使用頭像作為頭像。預設為預設頭像。", "Fluidly stream large external response chunks": "流暢地傳輸大型外部響應區塊", "Focus chat input": "聚焦聊天輸入框", @@ -363,6 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "命令字串中只能包含英文字母、數字(0~9)和連字符(-)。", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "哎呀!請稍等!你的文件還在處理中。我們正最佳化文件,請耐心等待,一旦準備好,我們會通知你。", "Oops! Looks like the URL is invalid. Please double-check and try again.": "哎呀!看起來 URL 無效。請仔細檢查後再試一次。", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "哎呀!你正在使用不支援的方法(僅有前台)。請從後台提供 WebUI。", "Open": "開啟", "Open AI": "Open AI", @@ -536,6 +538,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "到聊天輸入框來啟動此命令。", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "今天", "Toggle settings": "切換設定", @@ -552,7 +555,7 @@ "Type Hugging Face Resolve (Download) URL": "輸入 Hugging Face 解析後的(下載)URL", "Uh-oh! There was an issue connecting to {{provider}}.": "哎呀!連線到 {{provider}} 時出現問題。", "UI": "", - "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "未知的文件類型 '{{file_type}}',但接受並視為純文字", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "更新並複製連結", "Update password": "更新密碼", From 71a7750c9d67cea2763eafb5510062cd593fb165 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 05:05:16 -0700 Subject: [PATCH 126/287] refac: styling --- src/lib/components/workspace/Tools.svelte | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index 664a1af4b..d2b04ad02 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -97,15 +97,25 @@ href={`/workspace/tools/edit?id=${encodeURIComponent(tool.id)}`} class="flex items-center text-left" > -
+
+
+ TOOL +
+
{tool.name}
-
{tool.id}
-
- {tool.meta.description} + +
+
{tool.id}
+ +
+ {tool.meta.description} +
From 36de6576b89bc52cea1411601b86c046c44eaa95 Mon Sep 17 00:00:00 2001 From: sihuangwlp Date: Thu, 20 Jun 2024 21:21:37 +0800 Subject: [PATCH 127/287] fix issue with i18n --- src/lib/components/admin/Settings/Images.svelte | 2 +- src/lib/i18n/locales/zh-CN/translation.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/admin/Settings/Images.svelte b/src/lib/components/admin/Settings/Images.svelte index 7e0e5a7dd..a6401031c 100644 --- a/src/lib/components/admin/Settings/Images.svelte +++ b/src/lib/components/admin/Settings/Images.svelte @@ -293,7 +293,7 @@ href="https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/13993" target="_blank" > - {$i18n.t('(e.g. `sh webui.sh --api --api-auth username:password`)')} + {$i18n.t('(e.g. `sh webui.sh --api --api-auth username_password`)').replace('_',':')}
{:else if imageGenerationEngine === 'comfyui'} diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 3f94338c8..eab1c266e 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -2,7 +2,7 @@ "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' 或 '-1' 表示无过期时间。", "(Beta)": "(测试版)", "(e.g. `sh webui.sh --api`)": "(例如 `sh webui.sh --api`)", - "(e.g. `sh webui.sh --api --api-auth username:password`)": "(例如 `sh webui.sh --api --api-auth username:password`)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "(例如 `sh webui.sh --api --api-auth username_password`)", "(latest)": "(最新版)", "{{ models }}": "{{ models }}", "{{ owner }}: You cannot delete a base model": "{{ owner }}:您不能删除基础模型", From 1bd6626ca543ac47e693a53e3a9fc939268b6f01 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Thu, 20 Jun 2024 17:36:17 +0200 Subject: [PATCH 128/287] Ukrainian translation update to v0.3.5 --- src/lib/i18n/locales/uk-UA/translation.json | 104 ++++++++++---------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 65cba3696..d8bf328c5 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -32,8 +32,8 @@ "admin": "адмін", "Admin": "Адмін", "Admin Panel": "Адмін-панель", - "Admin Settings": "Налаштування адміністратора", - "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "", + "Admin Settings": "Адмін-панель", + "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Адміністратори мають доступ до всіх інструментів у будь-який час; користувачам потрібні інструменти, призначені для кожної моделі в робочій області.", "Advanced Parameters": "Розширені параметри", "Advanced Params": "Розширені параметри", "all": "всі", @@ -42,7 +42,7 @@ "Allow": "Дозволити", "Allow Chat Deletion": "Дозволити видалення чату", "Allow non-local voices": "Дозволити не локальні голоси", - "Allow User Location": "", + "Allow User Location": "Доступ до місцезнаходження", "alphanumeric characters and hyphens": "алфавітно-цифрові символи та дефіси", "Already have an account?": "Вже є обліковий запис?", "an assistant": "асистента", @@ -70,19 +70,19 @@ "Bad Response": "Неправильна відповідь", "Banners": "Прапори", "Base Model (From)": "Базова модель (від)", - "Batch Size (num_batch)": "", + "Batch Size (num_batch)": "Розмір партії (num_batch)", "before": "до того, як", "Being lazy": "Не поспішати", "Brave Search API Key": "Ключ API пошуку Brave", "Bypass SSL verification for Websites": "Обхід SSL-перевірки для веб-сайтів", "Call": "Виклик", "Call feature is not supported when using Web STT engine": "Функція виклику не підтримується при використанні Web STT (розпізнавання мовлення) рушія", - "Camera": "", + "Camera": "Камера", "Cancel": "Скасувати", "Capabilities": "Можливості", "Change Password": "Змінити пароль", "Chat": "Чат", - "Chat Background Image": "", + "Chat Background Image": "Фонове зображення чату", "Chat Bubble UI": "Бульбашковий UI чату", "Chat direction": "Напрям чату", "Chat History": "Історія чату", @@ -113,9 +113,9 @@ "ComfyUI Base URL is required.": "Необхідно вказати URL-адресу ComfyUI.", "Command": "Команда", "Concurrent Requests": "Одночасні запити", - "Confirm": "", + "Confirm": "Підтвердити", "Confirm Password": "Підтвердіть пароль", - "Confirm your action": "", + "Confirm your action": "Підтвердіть свою дію", "Connections": "З'єднання", "Contact Admin for WebUI Access": "Зверніться до адміна для отримання доступу до WebUI", "Content": "Зміст", @@ -154,7 +154,7 @@ "Delete All Chats": "Видалити усі чати", "Delete chat": "Видалити чат", "Delete Chat": "Видалити чат", - "Delete chat?": "", + "Delete chat?": "Видалити чат?", "delete this link": "видалити це посилання", "Delete User": "Видалити користувача", "Deleted {{deleteModelTag}}": "Видалено {{deleteModelTag}}", @@ -166,7 +166,7 @@ "Discover, download, and explore custom prompts": "Знайдіть, завантажте та досліджуйте налаштовані промти", "Discover, download, and explore model presets": "Знайдіть, завантажте та досліджуйте налаштовані налаштування моделі", "Dismissible": "Неприйнятно", - "Display Emoji in Call": "", + "Display Emoji in Call": "Відображати емодзі у викликах", "Display the username instead of You in the Chat": "Показувати ім'я користувача замість 'Ви' в чаті", "Document": "Документ", "Document Settings": "Налаштування документа", @@ -183,7 +183,7 @@ "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр., '30s','10m'. Дійсні одиниці часу: 'с', 'хв', 'г'.", "Edit": "Редагувати", "Edit Doc": "Редагувати документ", - "Edit Memory": "", + "Edit Memory": "Редагувати пам'ять", "Edit User": "Редагувати користувача", "Email": "Електронна пошта", "Embedding Batch Size": "Розмір пакету під час вбудовування", @@ -210,10 +210,10 @@ "Enter Score": "Введіть бал", "Enter Searxng Query URL": "Введіть URL-адресу запиту Searxng", "Enter Serper API Key": "Введіть ключ API Serper", - "Enter Serply API Key": "", + "Enter Serply API Key": "Введіть ключ API Serply", "Enter Serpstack API Key": "Введіть ключ API Serpstack", "Enter stop sequence": "Введіть символ зупинки", - "Enter Tavily API Key": "", + "Enter Tavily API Key": "Введіть ключ API Tavily", "Enter Top K": "Введіть Top K", "Enter URL (e.g. http://127.0.0.1:7860/)": "Введіть URL-адресу (напр., http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "Введіть URL-адресу (напр., http://localhost:11434)", @@ -228,27 +228,27 @@ "Export chat (.json)": "Експорт чату (.json)", "Export Chats": "Експортувати чати", "Export Documents Mapping": "Експортувати відображення документів", - "Export Functions": "", + "Export Functions": "Функції експорту", "Export Models": "Експорт моделей", "Export Prompts": "Експортувати промти", - "Export Tools": "", + "Export Tools": "Інструменти експорту", "External Models": "Зовнішні моделі", "Failed to create API Key.": "Не вдалося створити API ключ.", "Failed to read clipboard contents": "Не вдалося прочитати вміст буфера обміну", "Failed to update settings": "Не вдалося оновити налаштування", "February": "Лютий", "Feel free to add specific details": "Не соромтеся додавати конкретні деталі", - "File": "", + "File": "Файл", "File Mode": "Файловий режим", "File not found.": "Файл не знайдено.", - "Filters": "", + "Filters": "Фільтри", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Виявлено підробку відбитків: Неможливо використовувати ініціали як аватар. Повернення до зображення профілю за замовчуванням.", "Fluidly stream large external response chunks": "Плавно передавати великі фрагменти зовнішніх відповідей", "Focus chat input": "Фокус вводу чату", "Followed instructions perfectly": "Бездоганно дотримувався інструкцій", "Format your variables using square brackets like this:": "Форматуйте свої змінні квадратними дужками так:", "Frequency Penalty": "Штраф за частоту", - "Functions": "", + "Functions": "Функції", "General": "Загальні", "General Settings": "Загальні налаштування", "Generate Image": "Створити зображення", @@ -262,7 +262,7 @@ "Hello, {{name}}": "Привіт, {{name}}", "Help": "Допоможіть", "Hide": "Приховати", - "Hide Model": "", + "Hide Model": "Приховати модель", "How can I help you today?": "Чим я можу допомогти вам сьогодні?", "Hybrid Search": "Гібридний пошук", "Image Generation (Experimental)": "Генерування зображень (експериментально)", @@ -271,10 +271,10 @@ "Images": "Зображення", "Import Chats": "Імпортувати чати", "Import Documents Mapping": "Імпортувати відображення документів", - "Import Functions": "", + "Import Functions": "Функції імпорту", "Import Models": "Імпорт моделей", "Import Prompts": "Імпортувати промти", - "Import Tools": "", + "Import Tools": "Інструменти імпорту", "Include `--api` flag when running stable-diffusion-webui": "Включіть прапор `--api` при запуску stable-diffusion-webui", "Info": "Інфо", "Input commands": "Команди вводу", @@ -292,12 +292,12 @@ "JWT Token": "Токен JWT", "Keep Alive": "Зберегти активність", "Keyboard shortcuts": "Клавіатурні скорочення", - "Knowledge": "", + "Knowledge": "Знання", "Language": "Мова", "Last Active": "Остання активність", - "Last Modified": "", + "Last Modified": "Востаннє змінено", "Light": "Світла", - "Listening...": "", + "Listening...": "Слухаю...", "LLMs can make mistakes. Verify important information.": "LLMs можуть помилятися. Перевірте важливу інформацію.", "Local Models": "Локальні моделі", "LTR": "LTR", @@ -320,7 +320,7 @@ "Mirostat Tau": "Mirostat Tau", "MMMM DD, YYYY": "MMMM DD, YYYY", "MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm", - "MMMM DD, YYYY hh:mm:ss A": "", + "MMMM DD, YYYY hh:mm:ss A": "MMMM DD, YYYY hh:mm:ss A", "Model '{{modelName}}' has been successfully downloaded.": "Модель '{{modelName}}' успішно завантажено.", "Model '{{modelTag}}' is already in queue for downloading.": "Модель '{{modelTag}}' вже знаходиться в черзі на завантаження.", "Model {{modelId}} not found": "Модель {{modelId}} не знайдено", @@ -340,7 +340,7 @@ "Name your model": "Назвіть свою модель", "New Chat": "Новий чат", "New Password": "Новий пароль", - "No documents found": "", + "No documents found": "Документів не знайдено", "No results found": "Не знайдено жодного результату", "No search query generated": "Пошуковий запит не сформовано", "No source available": "Джерело не доступне", @@ -364,7 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "У рядку команди дозволено використовувати лише алфавітно-цифрові символи та дефіси.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ой! Зачекайте, будь ласка! Ваші файли ще готуються. Ми робимо все, щоб вони були ідеальними. Будь ласка, будьте терплячі, ми повідомимо вам, коли вони будуть готові.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Схоже, що URL-адреса невірна. Будь ласка, перевірте ще раз та спробуйте ще раз.", - "Oops! There was an error in the previous response. Please try again or contact admin.": "", + "Oops! There was an error in the previous response. Please try again or contact admin.": "Упс! У попередній відповіді сталася помилка. Будь ласка, спробуйте ще раз або зверніться до адміністратора.", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Ви використовуєте непідтримуваний метод (тільки для фронтенду). Будь ласка, обслуговуйте WebUI з бекенду.", "Open": "Відкрити", "Open AI": "Open AI", @@ -417,7 +417,7 @@ "Reranking Model": "Модель переранжування", "Reranking model disabled": "Модель переранжування вимкнена", "Reranking model set to \"{{reranking_model}}\"": "Модель переранжування встановлено на \"{{reranking_model}}\"", - "Reset": "", + "Reset": "Скидання", "Reset Upload Directory": "Скинути каталог завантажень", "Reset Vector Storage": "Скинути векторне сховище", "Response AutoCopy to Clipboard": "Автокопіювання відповіді в буфер обміну", @@ -437,18 +437,18 @@ "Search a model": "Шукати модель", "Search Chats": "Пошук в чатах", "Search Documents": "Пошук документів", - "Search Functions": "", + "Search Functions": "Функції пошуку", "Search Models": "Пошук моделей", "Search Prompts": "Пошук промтів", - "Search Query Generation Prompt": "", - "Search Query Generation Prompt Length Threshold": "", + "Search Query Generation Prompt": "Підказка для формування пошукового промту", + "Search Query Generation Prompt Length Threshold": "Поріг довжини пошукового запиту для генерації підказки", "Search Result Count": "Кількість результатів пошуку", - "Search Tools": "", + "Search Tools": "Інструменти пошуку", "Searched {{count}} sites_one": "Переглянуто {{count}} сайт", "Searched {{count}} sites_few": "Переглянуто {{count}} сайти", "Searched {{count}} sites_many": "Переглянуто {{count}} сайтів", "Searched {{count}} sites_other": "Переглянуто {{count}} сайтів", - "Searching \"{{searchQuery}}\"": "", + "Searching \"{{searchQuery}}\"": "Шукаю \"{{searchQuery}}\"", "Searxng Query URL": "URL-адреса запиту Searxng", "See readme.md for instructions": "Див. readme.md для інструкцій", "See what's new": "Подивіться, що нового", @@ -460,7 +460,7 @@ "Select a pipeline": "Виберіть pipeline", "Select a pipeline url": "Виберіть адресу pipeline", "Select an Ollama instance": "Виберіть екземпляр Ollama", - "Select Documents": "", + "Select Documents": "Виберіть документи", "Select model": "Вибрати модель", "Select only one model to call": "Виберіть лише одну модель для виклику", "Selected model(s) do not support image inputs": "Вибрані модель(і) не підтримують вхідні зображення", @@ -469,7 +469,7 @@ "Send message": "Надіслати повідомлення", "September": "Вересень", "Serper API Key": "Ключ API Serper", - "Serply API Key": "", + "Serply API Key": "Ключ API Serply", "Serpstack API Key": "Ключ API Serpstack", "Server connection verified": "З'єднання з сервером підтверджено", "Set as default": "Встановити за замовчуванням", @@ -489,7 +489,7 @@ "short-summary": "короткий зміст", "Show": "Показати", "Show Admin Details in Account Pending Overlay": "Відобразити дані адміна у вікні очікування облікового запису", - "Show Model": "", + "Show Model": "Показати модель", "Show shortcuts": "Показати клавіатурні скорочення", "Showcased creativity": "Продемонстрований креатив", "sidebar": "бокова панель", @@ -511,8 +511,8 @@ "System": "Система", "System Prompt": "Системний промт", "Tags": "Теги", - "Tap to interrupt": "", - "Tavily API Key": "", + "Tap to interrupt": "Натисніть, щоб перервати", + "Tavily API Key": "Ключ API Tavily", "Tell us more:": "Розкажи нам більше:", "Temperature": "Температура", "Template": "Шаблон", @@ -522,12 +522,12 @@ "Thanks for your feedback!": "Дякуємо за ваш відгук!", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Оцінка повинна бути в діапазоні від 0.0 (0%) до 1.0 (100%).", "Theme": "Тема", - "Thinking...": "", - "This action cannot be undone. Do you wish to continue?": "", + "Thinking...": "Думаю...", + "This action cannot be undone. Do you wish to continue?": "Цю дію не можна скасувати. Ви бажаєте продовжити?", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Це забезпечує збереження ваших цінних розмов у безпечному бекенд-сховищі. Дякуємо!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Це експериментальна функція, вона може працювати не так, як очікувалося, і може бути змінена в будь-який час.", "This setting does not sync across browsers or devices.": "Це налаштування не синхронізується між браузерами або пристроями.", - "This will delete": "", + "This will delete": "Це призведе до видалення", "Thorough explanation": "Детальне пояснення", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Порада: Оновіть кілька слотів змінних послідовно, натискаючи клавішу табуляції у вікні чату після кожної заміни.", "Title": "Заголовок", @@ -539,15 +539,15 @@ "To access the available model names for downloading,": "Щоб отримати доступ до назв доступних для завантаження моделей,", "To access the GGUF models available for downloading,": "Щоб отримати доступ до моделей GGUF, які можна завантажити,,", "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Щоб отримати доступ до веб-інтерфейсу, зверніться до адміністратора. Адміністратори можуть керувати статусами користувачів з Панелі адміністратора.", - "To add documents here, upload them to the \"Documents\" workspace first.": "", + "To add documents here, upload them to the \"Documents\" workspace first.": "Щоб додати документи сюди, спочатку завантажте їх до робочої області \"Документи\".", "to chat input.": "в чаті.", - "To select filters here, add them to the \"Functions\" workspace first.": "", - "To select toolkits here, add them to the \"Tools\" workspace first.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "Щоб вибрати фільтри тут, спочатку додайте їх до робочої області \"Функції\".", + "To select toolkits here, add them to the \"Tools\" workspace first.": "Щоб вибрати тут набори інструментів, спочатку додайте їх до робочої області \"Інструменти\".", "Today": "Сьогодні", "Toggle settings": "Переключити налаштування", "Toggle sidebar": "Переключити бокову панель", - "Tokens To Keep On Context Refresh (num_keep)": "", - "Tools": "", + "Tokens To Keep On Context Refresh (num_keep)": "Токени для збереження при оновленні контексту (num_keep)", + "Tools": "Інструменти", "Top K": "Top K", "Top P": "Top P", "Trouble accessing Ollama?": "Проблеми з доступом до Ollama?", @@ -557,13 +557,13 @@ "Type": "Тип", "Type Hugging Face Resolve (Download) URL": "Введіть URL ресурсу Hugging Face Resolve (завантаження)", "Uh-oh! There was an issue connecting to {{provider}}.": "Ой! Виникла проблема при підключенні до {{provider}}.", - "UI": "", - "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", - "Update": "", + "UI": "Користувацький інтерфейс", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Невідомий тип файлу '{{file_type}}'. Завантаження файлу все одно продовжується.", + "Update": "Оновлення", "Update and Copy Link": "Оновлення та копіювання посилання", "Update password": "Оновити пароль", - "Updated at": "", - "Upload": "", + "Updated at": "Оновлено на", + "Upload": "Завантажити", "Upload a GGUF model": "Завантажити GGUF модель", "Upload Files": "Завантажити файли", "Upload Pipeline": "Завантаження Pipeline", @@ -582,7 +582,7 @@ "variable": "змінна", "variable to have them replaced with clipboard content.": "змінна, щоб замінити їх вмістом буфера обміну.", "Version": "Версія", - "Voice": "", + "Voice": "Голос", "Warning": "Увага!", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Попередження: Якщо ви оновлюєте або змінюєте модель вбудовування, вам потрібно буде повторно імпортувати всі документи.", "Web": "Веб", From 64814098a3618d3468054eb3ba33be41efc5166e Mon Sep 17 00:00:00 2001 From: Karl Lee <61072264+KarlLee830@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:58:35 +0800 Subject: [PATCH 129/287] i18n: Update Chinese translation --- src/lib/i18n/locales/zh-CN/translation.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 1e6e3b6cc..e9fa2874c 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -241,7 +241,7 @@ "File": "文件", "File Mode": "文件模式", "File not found.": "文件未找到。", - "Filters": "", + "Filters": "过滤器", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "检测到指纹伪造:无法使用姓名缩写作为头像。默认使用默认个人形象。", "Fluidly stream large external response chunks": "流畅地传输外部大型响应块数据", "Focus chat input": "聚焦对话输入", @@ -364,7 +364,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "命令字符串中只允许使用英文字母,数字 (0-9) 以及连字符 (-)。", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "糟糕!请稍等!您的文件还在处理中。我们正在努力让它们达到最佳效果。请耐心等待,准备好后我们会通知您。", "Oops! Looks like the URL is invalid. Please double-check and try again.": "糟糕!此链接似乎为无效链接。请检查后重试。", - "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! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "糟糕!你正在使用不被支持的方法(仅前端)。请从后端提供 WebUI 服务。", "Open": "打开", "Open AI": "Open AI", @@ -538,7 +538,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "请联系管理员以访问。管理员可以在后台管理面板中管理用户状态。", "To add documents here, upload them to the \"Documents\" workspace first.": "要在此处添加文档,请先将它们上传到工作空间中的“文档”内。", "to chat input.": "到对话输入。", - "To select filters here, add them to the \"Functions\" workspace first.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "要在这里选择过滤器,请先将它们添加到工作空间中的“功能”。", "To select toolkits here, add them to the \"Tools\" workspace first.": "要在这里选择工具包,请先将它们添加到工作空间中的“工具”。", "Today": "今天", "Toggle settings": "切换设置", @@ -555,7 +555,7 @@ "Type Hugging Face Resolve (Download) URL": "输入 Hugging Face 解析(下载)URL", "Uh-oh! There was an issue connecting to {{provider}}.": "糟糕!连接到 {{provider}} 时出现问题。", "UI": "界面", - "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "未知文件类型“{{file_type}}”,将无视继续上传文件。", "Update": "更新", "Update and Copy Link": "更新和复制链接", "Update password": "更新密码", From 9f39bcb60e738eb3a1c560e533d02d49853a5330 Mon Sep 17 00:00:00 2001 From: perf3ct Date: Thu, 20 Jun 2024 09:12:33 -0700 Subject: [PATCH 130/287] Fix /tags endpoint in postgres integration test /api/health it is /health it is --- .github/workflows/integration-test.yml | 38 ++++++++++++-------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index e64f93bc1..85810c2ed 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -25,7 +25,7 @@ jobs: --file docker-compose.api.yaml \ --file docker-compose.a1111-test.yaml \ up --detach --build - + - name: Wait for Ollama to be up timeout-minutes: 5 run: | @@ -43,7 +43,7 @@ jobs: uses: cypress-io/github-action@v6 with: browser: chrome - wait-on: 'http://localhost:3000' + wait-on: "http://localhost:3000" config: baseUrl=http://localhost:3000 - uses: actions/upload-artifact@v4 @@ -82,18 +82,18 @@ jobs: --health-retries 5 ports: - 5432:5432 -# mysql: -# image: mysql -# env: -# MYSQL_ROOT_PASSWORD: mysql -# MYSQL_DATABASE: mysql -# options: >- -# --health-cmd "mysqladmin ping -h localhost" -# --health-interval 10s -# --health-timeout 5s -# --health-retries 5 -# ports: -# - 3306:3306 + # mysql: + # image: mysql + # env: + # MYSQL_ROOT_PASSWORD: mysql + # MYSQL_DATABASE: mysql + # options: >- + # --health-cmd "mysqladmin ping -h localhost" + # --health-interval 10s + # --health-timeout 5s + # --health-retries 5 + # ports: + # - 3306:3306 steps: - name: Checkout Repository uses: actions/checkout@v4 @@ -142,7 +142,6 @@ jobs: echo "Server has stopped" exit 1 fi - - name: Test backend with Postgres if: success() || steps.sqlite.conclusion == 'failure' @@ -170,9 +169,9 @@ jobs: echo "Server has stopped" exit 1 fi - + # Check that service will reconnect to postgres when connection will be closed - status_code=$(curl --write-out %{http_code} -s --output /dev/null http://localhost:8081/api/tags) + status_code=$(curl --write-out %{http_code} -s --output /dev/null http://localhost:8081/health) if [[ "$status_code" -ne 200 ]] ; then echo "Server has failed before postgres reconnect check" exit 1 @@ -183,14 +182,13 @@ jobs: conn = pg2.connect(dsn=os.environ['DATABASE_URL'].replace('+pool', '')); \ cur = conn.cursor(); \ cur.execute('SELECT pg_terminate_backend(psa.pid) FROM pg_stat_activity psa WHERE datname = current_database() AND pid <> pg_backend_pid();')" - - status_code=$(curl --write-out %{http_code} -s --output /dev/null http://localhost:8081/api/tags) + + status_code=$(curl --write-out %{http_code} -s --output /dev/null http://localhost:8081/health) if [[ "$status_code" -ne 200 ]] ; then echo "Server has not reconnected to postgres after connection was closed: returned status $status_code" exit 1 fi - # - name: Test backend with MySQL # if: success() || steps.sqlite.conclusion == 'failure' || steps.postgres.conclusion == 'failure' # env: From f342f8adc7c70aca58f5e4bee290615d014daa6f Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 12:27:34 -0700 Subject: [PATCH 131/287] refac: code highlight optimisation --- src/lib/components/chat/Messages/CodeBlock.svelte | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/Messages/CodeBlock.svelte b/src/lib/components/chat/Messages/CodeBlock.svelte index 4f576ef24..9714e86c7 100644 --- a/src/lib/components/chat/Messages/CodeBlock.svelte +++ b/src/lib/components/chat/Messages/CodeBlock.svelte @@ -203,8 +203,18 @@ __builtins__.input = input`); }; }; + let debounceTimeout; $: if (code) { - highlightedCode = hljs.highlightAuto(code, hljs.getLanguage(lang)?.aliases).value || code; + // Function to perform the code highlighting + const highlightCode = () => { + highlightedCode = hljs.highlightAuto(code, hljs.getLanguage(lang)?.aliases).value || code; + }; + + // Clear the previous timeout if it exists + clearTimeout(debounceTimeout); + + // Set a new timeout to debounce the code highlighting + debounceTimeout = setTimeout(highlightCode, 10); } From 05e251da0eb8a3c0e7eba53535f79b60a1d0b87b Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Thu, 20 Jun 2024 21:44:01 +0200 Subject: [PATCH 132/287] fix translation --- src/lib/i18n/locales/uk-UA/translation.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index d8bf328c5..3ca2daa08 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -83,7 +83,7 @@ "Change Password": "Змінити пароль", "Chat": "Чат", "Chat Background Image": "Фонове зображення чату", - "Chat Bubble UI": "Бульбашковий UI чату", + "Chat Bubble UI": "Чат у вигляді бульбашок", "Chat direction": "Напрям чату", "Chat History": "Історія чату", "Chat History is off for this browser.": "Історія чату вимкнена для цього браузера.", @@ -228,10 +228,10 @@ "Export chat (.json)": "Експорт чату (.json)", "Export Chats": "Експортувати чати", "Export Documents Mapping": "Експортувати відображення документів", - "Export Functions": "Функції експорту", + "Export Functions": "Експорт функцій ", "Export Models": "Експорт моделей", "Export Prompts": "Експортувати промти", - "Export Tools": "Інструменти експорту", + "Export Tools": "Експортувати інструменти", "External Models": "Зовнішні моделі", "Failed to create API Key.": "Не вдалося створити API ключ.", "Failed to read clipboard contents": "Не вдалося прочитати вміст буфера обміну", @@ -271,10 +271,10 @@ "Images": "Зображення", "Import Chats": "Імпортувати чати", "Import Documents Mapping": "Імпортувати відображення документів", - "Import Functions": "Функції імпорту", + "Import Functions": "Імпорт функцій ", "Import Models": "Імпорт моделей", "Import Prompts": "Імпортувати промти", - "Import Tools": "Інструменти імпорту", + "Import Tools": "Імпортувати інструменти", "Include `--api` flag when running stable-diffusion-webui": "Включіть прапор `--api` при запуску stable-diffusion-webui", "Info": "Інфо", "Input commands": "Команди вводу", @@ -437,13 +437,13 @@ "Search a model": "Шукати модель", "Search Chats": "Пошук в чатах", "Search Documents": "Пошук документів", - "Search Functions": "Функції пошуку", + "Search Functions": "Пошук функцій", "Search Models": "Пошук моделей", "Search Prompts": "Пошук промтів", "Search Query Generation Prompt": "Підказка для формування пошукового промту", "Search Query Generation Prompt Length Threshold": "Поріг довжини пошукового запиту для генерації підказки", "Search Result Count": "Кількість результатів пошуку", - "Search Tools": "Інструменти пошуку", + "Search Tools": "Пошуку інструментів ", "Searched {{count}} sites_one": "Переглянуто {{count}} сайт", "Searched {{count}} sites_few": "Переглянуто {{count}} сайти", "Searched {{count}} sites_many": "Переглянуто {{count}} сайтів", From e29e54a8d2d523d74eb3cced40a750e192aabdf7 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Thu, 20 Jun 2024 21:49:52 +0200 Subject: [PATCH 133/287] add key i18n --- src/lib/components/admin/AddUserModal.svelte | 8 ++++---- src/lib/components/chat/Settings/About.svelte | 4 +++- src/lib/i18n/locales/ar-BH/translation.json | 2 ++ src/lib/i18n/locales/bg-BG/translation.json | 2 ++ src/lib/i18n/locales/bn-BD/translation.json | 2 ++ src/lib/i18n/locales/ca-ES/translation.json | 2 ++ src/lib/i18n/locales/ceb-PH/translation.json | 2 ++ src/lib/i18n/locales/de-DE/translation.json | 2 ++ src/lib/i18n/locales/dg-DG/translation.json | 4 ++++ src/lib/i18n/locales/en-GB/translation.json | 2 ++ src/lib/i18n/locales/en-US/translation.json | 2 ++ src/lib/i18n/locales/es-ES/translation.json | 2 ++ src/lib/i18n/locales/fa-IR/translation.json | 2 ++ src/lib/i18n/locales/fi-FI/translation.json | 2 ++ src/lib/i18n/locales/fr-CA/translation.json | 2 ++ src/lib/i18n/locales/fr-FR/translation.json | 2 ++ src/lib/i18n/locales/he-IL/translation.json | 2 ++ src/lib/i18n/locales/hi-IN/translation.json | 2 ++ src/lib/i18n/locales/hr-HR/translation.json | 2 ++ src/lib/i18n/locales/it-IT/translation.json | 2 ++ src/lib/i18n/locales/ja-JP/translation.json | 2 ++ src/lib/i18n/locales/ka-GE/translation.json | 2 ++ src/lib/i18n/locales/ko-KR/translation.json | 2 ++ src/lib/i18n/locales/lt-LT/translation.json | 2 ++ src/lib/i18n/locales/nb-NO/translation.json | 2 ++ src/lib/i18n/locales/nl-NL/translation.json | 2 ++ src/lib/i18n/locales/pa-IN/translation.json | 2 ++ src/lib/i18n/locales/pl-PL/translation.json | 2 ++ src/lib/i18n/locales/pt-BR/translation.json | 2 ++ src/lib/i18n/locales/pt-PT/translation.json | 2 ++ src/lib/i18n/locales/ru-RU/translation.json | 2 ++ src/lib/i18n/locales/sr-RS/translation.json | 2 ++ src/lib/i18n/locales/sv-SE/translation.json | 2 ++ src/lib/i18n/locales/tk-TW/translation.json | 2 ++ src/lib/i18n/locales/tr-TR/translation.json | 2 ++ src/lib/i18n/locales/uk-UA/translation.json | 2 ++ src/lib/i18n/locales/vi-VN/translation.json | 2 ++ src/lib/i18n/locales/zh-CN/translation.json | 2 ++ src/lib/i18n/locales/zh-TW/translation.json | 2 ++ 39 files changed, 83 insertions(+), 5 deletions(-) diff --git a/src/lib/components/admin/AddUserModal.svelte b/src/lib/components/admin/AddUserModal.svelte index a38177a75..a8d199bf5 100644 --- a/src/lib/components/admin/AddUserModal.svelte +++ b/src/lib/components/admin/AddUserModal.svelte @@ -176,9 +176,9 @@ placeholder={$i18n.t('Enter Your Role')} required > - - - + + +
@@ -262,7 +262,7 @@ class="underline dark:text-gray-200" href="{WEBUI_BASE_URL}/static/user-import.csv" > - Click here to download user import template file. + {$i18n.t('Click here to download user import template file.')}
diff --git a/src/lib/components/chat/Settings/About.svelte b/src/lib/components/chat/Settings/About.svelte index 3803ea45d..1076e8d0b 100644 --- a/src/lib/components/chat/Settings/About.svelte +++ b/src/lib/components/chat/Settings/About.svelte @@ -132,7 +132,9 @@
{#if !$WEBUI_NAME.includes('Open WebUI')} {$WEBUI_NAME} - - {/if}{$i18n.t('Created by')} + {/if}{ + $i18n.t('Created by') + } Date: Thu, 20 Jun 2024 21:51:29 +0200 Subject: [PATCH 134/287] ukrainian translation update --- src/lib/i18n/locales/uk-UA/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 524b426a4..086467855 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -99,7 +99,7 @@ "Clear memory": "Очистити пам'ять", "Click here for help.": "Клацніть тут, щоб отримати допомогу.", "Click here to": "Натисніть тут, щоб", - "Click here to download user import template file.": "", + "Click here to download user import template file.": "Натисніть тут, щоб завантажити файл шаблону імпорту користувача.", "Click here to select": "Натисніть тут, щоб вибрати", "Click here to select a csv file.": "Натисніть тут, щоб вибрати csv-файл.", "Click here to select a py file.": "Натисніть тут, щоб вибрати py-файл.", @@ -134,7 +134,7 @@ "Create new secret key": "Створити новий секретний ключ", "Created at": "Створено у", "Created At": "Створено у", - "Created by": "", + "Created by": "Створено", "Current Model": "Поточна модель", "Current Password": "Поточний пароль", "Custom": "Налаштувати", From 89b259acb8369404f554201389c148829c088364 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Thu, 20 Jun 2024 21:53:34 +0200 Subject: [PATCH 135/287] add key i18n + update translation --- src/lib/components/admin/AddUserModal.svelte | 4 ++-- src/lib/i18n/locales/ar-BH/translation.json | 2 ++ src/lib/i18n/locales/bg-BG/translation.json | 2 ++ src/lib/i18n/locales/bn-BD/translation.json | 2 ++ src/lib/i18n/locales/ca-ES/translation.json | 2 ++ src/lib/i18n/locales/ceb-PH/translation.json | 2 ++ src/lib/i18n/locales/de-DE/translation.json | 2 ++ src/lib/i18n/locales/dg-DG/translation.json | 2 ++ src/lib/i18n/locales/en-GB/translation.json | 2 ++ src/lib/i18n/locales/en-US/translation.json | 2 ++ src/lib/i18n/locales/es-ES/translation.json | 2 ++ src/lib/i18n/locales/fa-IR/translation.json | 2 ++ src/lib/i18n/locales/fi-FI/translation.json | 2 ++ src/lib/i18n/locales/fr-CA/translation.json | 2 ++ src/lib/i18n/locales/fr-FR/translation.json | 2 ++ src/lib/i18n/locales/he-IL/translation.json | 2 ++ src/lib/i18n/locales/hi-IN/translation.json | 2 ++ src/lib/i18n/locales/hr-HR/translation.json | 2 ++ src/lib/i18n/locales/it-IT/translation.json | 2 ++ src/lib/i18n/locales/ja-JP/translation.json | 2 ++ src/lib/i18n/locales/ka-GE/translation.json | 2 ++ src/lib/i18n/locales/ko-KR/translation.json | 2 ++ src/lib/i18n/locales/lt-LT/translation.json | 2 ++ src/lib/i18n/locales/nb-NO/translation.json | 2 ++ src/lib/i18n/locales/nl-NL/translation.json | 2 ++ src/lib/i18n/locales/pa-IN/translation.json | 2 ++ src/lib/i18n/locales/pl-PL/translation.json | 2 ++ src/lib/i18n/locales/pt-BR/translation.json | 2 ++ src/lib/i18n/locales/pt-PT/translation.json | 2 ++ src/lib/i18n/locales/ru-RU/translation.json | 2 ++ src/lib/i18n/locales/sr-RS/translation.json | 2 ++ src/lib/i18n/locales/sv-SE/translation.json | 2 ++ src/lib/i18n/locales/tk-TW/translation.json | 2 ++ src/lib/i18n/locales/tr-TR/translation.json | 2 ++ src/lib/i18n/locales/uk-UA/translation.json | 2 ++ src/lib/i18n/locales/vi-VN/translation.json | 2 ++ src/lib/i18n/locales/zh-CN/translation.json | 2 ++ src/lib/i18n/locales/zh-TW/translation.json | 2 ++ 38 files changed, 76 insertions(+), 2 deletions(-) diff --git a/src/lib/components/admin/AddUserModal.svelte b/src/lib/components/admin/AddUserModal.svelte index a8d199bf5..8538ba04a 100644 --- a/src/lib/components/admin/AddUserModal.svelte +++ b/src/lib/components/admin/AddUserModal.svelte @@ -153,7 +153,7 @@ type="button" on:click={() => { tab = ''; - }}>Form{$i18n.t('Form')} {$i18n.t('CSV Import')}
diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index e5065f341..20d465e55 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -135,6 +135,7 @@ "Created at": "أنشئت في", "Created At": "أنشئت من", "Created by": "", + "CSV Import": "", "Current Model": "الموديل المختار", "Current Password": "كلمة السر الحالية", "Custom": "مخصص", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "دفق قطع الاستجابة الخارجية الكبيرة بسلاسة", "Focus chat input": "التركيز على إدخال الدردشة", "Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه", + "Form": "", "Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:", "Frequency Penalty": "عقوبة التردد", "Functions": "", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 92e7617db..8c2e731ee 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -135,6 +135,7 @@ "Created at": "Създадено на", "Created At": "Създадено на", "Created by": "", + "CSV Import": "", "Current Model": "Текущ модел", "Current Password": "Текуща Парола", "Custom": "Персонализиран", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Плавно предаване на големи части от външен отговор", "Focus chat input": "Фокусиране на чат вход", "Followed instructions perfectly": "Следвайте инструкциите перфектно", + "Form": "", "Format your variables using square brackets like this:": "Форматирайте вашите променливи, като използвате квадратни скоби, както следва:", "Frequency Penalty": "Наказание за честота", "Functions": "", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 055a8a517..17dea8e2c 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -135,6 +135,7 @@ "Created at": "নির্মানকাল", "Created At": "নির্মানকাল", "Created by": "", + "CSV Import": "", "Current Model": "বর্তমান মডেল", "Current Password": "বর্তমান পাসওয়ার্ড", "Custom": "কাস্টম", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "বড় এক্সটার্নাল রেসপন্স চাঙ্কগুলো মসৃণভাবে প্রবাহিত করুন", "Focus chat input": "চ্যাট ইনপুট ফোকাস করুন", "Followed instructions perfectly": "নির্দেশাবলী নিখুঁতভাবে অনুসরণ করা হয়েছে", + "Form": "", "Format your variables using square brackets like this:": "আপনার ভেরিয়বলগুলো এভাবে স্কয়ার ব্রাকেটের মাধ্যমে সাজান", "Frequency Penalty": "ফ্রিকোয়েন্সি পেনাল্টি", "Functions": "", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 95a9f602e..a7757749e 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -135,6 +135,7 @@ "Created at": "Creat el", "Created At": "Creat el", "Created by": "", + "CSV Import": "", "Current Model": "Model Actual", "Current Password": "Contrasenya Actual", "Custom": "Personalitzat", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de respuesta externa", "Focus chat input": "Enfoca l'entrada del xat", "Followed instructions perfectly": "Siguiu les instruccions perfeicte", + "Form": "", "Format your variables using square brackets like this:": "Formata les teves variables utilitzant claudàtors així:", "Frequency Penalty": "Pena de freqüència", "Functions": "", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index b1589a1a9..74036d6a1 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -135,6 +135,7 @@ "Created at": "Gihimo ang", "Created At": "", "Created by": "", + "CSV Import": "", "Current Model": "Kasamtangang modelo", "Current Password": "Kasamtangang Password", "Custom": "Custom", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Hapsay nga paghatud sa daghang mga tipik sa eksternal nga mga tubag", "Focus chat input": "Pag-focus sa entry sa diskusyon", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "I-format ang imong mga variable gamit ang square brackets sama niini:", "Frequency Penalty": "", "Functions": "", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index 1282c971b..ad2a3852f 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -135,6 +135,7 @@ "Created at": "Erstellt am", "Created At": "Erstellt am", "Created by": "", + "CSV Import": "", "Current Model": "Aktuelles Modell", "Current Password": "Aktuelles Passwort", "Custom": "Benutzerdefiniert", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Große externe Antwortblöcke flüssig streamen", "Focus chat input": "Chat-Eingabe fokussieren", "Followed instructions perfectly": "Anweisungen perfekt befolgt", + "Form": "", "Format your variables using square brackets like this:": "Formatiere deine Variablen mit eckigen Klammern wie folgt:", "Frequency Penalty": "Frequenz-Strafe", "Functions": "", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index b7427d9fb..f640f01ef 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -135,6 +135,7 @@ "Created at": "Created at", "Created At": "", "Created by": "", + "CSV Import": "", "Current Model": "Current Model", "Current Password": "Current Password", "Custom": "Custom", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Fluidly wow big chunks", "Focus chat input": "Focus chat bork", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "Format variables using square brackets like wow:", "Frequency Penalty": "", "Functions": "", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index fba2e4b2a..c4ea84702 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -135,6 +135,7 @@ "Created at": "", "Created At": "", "Created by": "", + "CSV Import": "", "Current Model": "", "Current Password": "", "Custom": "", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "", "Focus chat input": "", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", "Functions": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index fba2e4b2a..c4ea84702 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -135,6 +135,7 @@ "Created at": "", "Created At": "", "Created by": "", + "CSV Import": "", "Current Model": "", "Current Password": "", "Custom": "", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "", "Focus chat input": "", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", "Functions": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 3130eabcc..a51f9d07c 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -135,6 +135,7 @@ "Created at": "Creado en", "Created At": "Creado en", "Created by": "", + "CSV Import": "", "Current Model": "Modelo Actual", "Current Password": "Contraseña Actual", "Custom": "Personalizado", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de respuesta externa", "Focus chat input": "Enfoca la entrada del chat", "Followed instructions perfectly": "Siguió las instrucciones perfectamente", + "Form": "", "Format your variables using square brackets like this:": "Formatea tus variables usando corchetes de la siguiente manera:", "Frequency Penalty": "Penalización de frecuencia", "Functions": "", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index c46f596dd..086ae7d71 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -135,6 +135,7 @@ "Created at": "ایجاد شده در", "Created At": "ایجاد شده در", "Created by": "", + "CSV Import": "", "Current Model": "مدل فعلی", "Current Password": "رمز عبور فعلی", "Custom": "دلخواه", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "تکه های پاسخ خارجی بزرگ را به صورت سیال پخش کنید", "Focus chat input": "فوکوس کردن ورودی گپ", "Followed instructions perfectly": "دستورالعمل ها را کاملا دنبال کرد", + "Form": "", "Format your variables using square brackets like this:": "متغیرهای خود را با استفاده از براکت مربع به شکل زیر قالب بندی کنید:", "Frequency Penalty": "مجازات فرکانس", "Functions": "", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 39bdd4b58..4b149f92e 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -135,6 +135,7 @@ "Created at": "Luotu", "Created At": "Luotu", "Created by": "", + "CSV Import": "", "Current Model": "Nykyinen malli", "Current Password": "Nykyinen salasana", "Custom": "Mukautettu", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Virtaa suuria ulkoisia vastausosia joustavasti", "Focus chat input": "Fokusoi syöttökenttään", "Followed instructions perfectly": "Noudatti ohjeita täydellisesti", + "Form": "", "Format your variables using square brackets like this:": "Muotoile muuttujat hakasulkeilla näin:", "Frequency Penalty": "Taajuussakko", "Functions": "", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 8f7d171ff..207368936 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -135,6 +135,7 @@ "Created at": "Créé le", "Created At": "Créé le", "Created by": "", + "CSV Import": "", "Current Model": "Modèle actuel", "Current Password": "Mot de passe actuel", "Custom": "Personnalisé", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Diffusez de manière fluide de gros morceaux de réponses externes", "Focus chat input": "Se concentrer sur l'entrée de la discussion", "Followed instructions perfectly": "Suivi des instructions parfaitement", + "Form": "", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Frequency Penalty": "Pénalité de fréquence", "Functions": "", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 1149dd5a7..194c398d6 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -135,6 +135,7 @@ "Created at": "Créé le", "Created At": "Crée Le", "Created by": "", + "CSV Import": "", "Current Model": "Modèle actuel", "Current Password": "Mot de passe actuel", "Custom": "Personnalisé", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Diffusez de manière fluide de gros morceaux de réponses externes", "Focus chat input": "Concentrer sur l'entrée du chat", "Followed instructions perfectly": "A suivi les instructions parfaitement", + "Form": "", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Frequency Penalty": "Pénalité de fréquence", "Functions": "", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index d597af986..3a514cd38 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -135,6 +135,7 @@ "Created at": "נוצר ב", "Created At": "נוצר ב", "Created by": "", + "CSV Import": "", "Current Model": "המודל הנוכחי", "Current Password": "הסיסמה הנוכחית", "Custom": "מותאם אישית", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "שידור נתונים חיצוניים בקצב רציף", "Focus chat input": "מיקוד הקלט לצ'אט", "Followed instructions perfectly": "עקב אחר ההוראות במושלמות", + "Form": "", "Format your variables using square brackets like this:": "עצב את המשתנים שלך באמצעות סוגריים מרובעים כך:", "Frequency Penalty": "עונש תדירות", "Functions": "", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 2848bef33..cb6029e8f 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -135,6 +135,7 @@ "Created at": "किस समय बनाया गया", "Created At": "किस समय बनाया गया", "Created by": "", + "CSV Import": "", "Current Model": "वर्तमान मॉडल", "Current Password": "वर्तमान पासवर्ड", "Custom": "कस्टम संस्करण", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "बड़े बाह्य प्रतिक्रिया खंडों को तरल रूप से प्रवाहित करें", "Focus chat input": "चैट इनपुट पर फ़ोकस करें", "Followed instructions perfectly": "निर्देशों का पूर्णतः पालन किया", + "Form": "", "Format your variables using square brackets like this:": "वर्गाकार कोष्ठकों का उपयोग करके अपने चरों को इस प्रकार प्रारूपित करें :", "Frequency Penalty": "फ्रीक्वेंसी पेनल्टी", "Functions": "", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index dfd5eafd8..31cf83edf 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -135,6 +135,7 @@ "Created at": "Stvoreno", "Created At": "Stvoreno", "Created by": "", + "CSV Import": "", "Current Model": "Trenutni model", "Current Password": "Trenutna lozinka", "Custom": "Prilagođeno", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Glavno strujanje velikih vanjskih dijelova odgovora", "Focus chat input": "Fokusiraj unos razgovora", "Followed instructions perfectly": "Savršeno slijedio upute", + "Form": "", "Format your variables using square brackets like this:": "Formatirajte svoje varijable pomoću uglatih zagrada ovako:", "Frequency Penalty": "Kazna za učestalost", "Functions": "", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index c704c1447..70f4f0cbe 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -135,6 +135,7 @@ "Created at": "Creato il", "Created At": "Creato il", "Created by": "", + "CSV Import": "", "Current Model": "Modello corrente", "Current Password": "Password corrente", "Custom": "Personalizzato", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Trasmetti in modo fluido blocchi di risposta esterni di grandi dimensioni", "Focus chat input": "Metti a fuoco l'input della chat", "Followed instructions perfectly": "Ha seguito le istruzioni alla perfezione", + "Form": "", "Format your variables using square brackets like this:": "Formatta le tue variabili usando parentesi quadre come questa:", "Frequency Penalty": "Penalità di frequenza", "Functions": "", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 816e82c24..40bcf3010 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -135,6 +135,7 @@ "Created at": "作成日時", "Created At": "作成日時", "Created by": "", + "CSV Import": "", "Current Model": "現在のモデル", "Current Password": "現在のパスワード", "Custom": "カスタム", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "大規模な外部応答チャンクを流動的にストリーミングする", "Focus chat input": "チャット入力をフォーカス", "Followed instructions perfectly": "完全に指示に従った", + "Form": "", "Format your variables using square brackets like this:": "次のように角括弧を使用して変数をフォーマットします。", "Frequency Penalty": "周波数ペナルティ", "Functions": "", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 83173b329..f3e97b19b 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -135,6 +135,7 @@ "Created at": "შექმნილია", "Created At": "შექმნილია", "Created by": "", + "CSV Import": "", "Current Model": "მიმდინარე მოდელი", "Current Password": "მიმდინარე პაროლი", "Custom": "საკუთარი", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "თხევადი ნაკადი დიდი გარე საპასუხო ნაწილაკების", "Focus chat input": "ჩეთის შეყვანის ფოკუსი", "Followed instructions perfectly": "ყველა ინსტრუქცია უზრუნველყოფა", + "Form": "", "Format your variables using square brackets like this:": "დააფორმატეთ თქვენი ცვლადები კვადრატული ფრჩხილების გამოყენებით:", "Frequency Penalty": "სიხშირის ჯარიმა", "Functions": "", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 361da0937..34153f163 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -135,6 +135,7 @@ "Created at": "생성일", "Created At": "생성일", "Created by": "", + "CSV Import": "", "Current Model": "현재 모델", "Current Password": "현재 비밀번호", "Custom": "사용자 정의", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "대규모 외부 응답 청크를 유연하게 스트리밍", "Focus chat input": "채팅 입력창에 포커스", "Followed instructions perfectly": "명령을 완벽히 따름", + "Form": "", "Format your variables using square brackets like this:": "다음과 같이 대괄호를 사용하여 변수를 형식화하세요:", "Frequency Penalty": "프리퀀시 페널티", "Functions": "", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 62edcb18c..e4960ae45 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -135,6 +135,7 @@ "Created at": "Sukurta", "Created At": "Sukurta", "Created by": "", + "CSV Import": "", "Current Model": "Dabartinis modelis", "Current Password": "Esamas slaptažodis", "Custom": "Personalizuota", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Sklandžiai transliuoti ilgus atsakymus", "Focus chat input": "Fokusuoti žinutės įvestį", "Followed instructions perfectly": "Tobulai sekė instrukcijas", + "Form": "", "Format your variables using square brackets like this:": "Formatuokite kintamuosius su kvadratiniais skliausteliais:", "Frequency Penalty": "", "Functions": "", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 1d7d3b949..2d7274942 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -135,6 +135,7 @@ "Created at": "Opprettet", "Created At": "Opprettet", "Created by": "", + "CSV Import": "", "Current Model": "Nåværende modell", "Current Password": "Nåværende passord", "Custom": "Tilpasset", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Strøm store eksterne svarchunks flytende", "Focus chat input": "Fokuser chatinput", "Followed instructions perfectly": "Fulgte instruksjonene perfekt", + "Form": "", "Format your variables using square brackets like this:": "Formatér variablene dine med hakeparenteser som dette:", "Frequency Penalty": "Frekvensstraff", "Functions": "", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index b47015366..e674ce902 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -135,6 +135,7 @@ "Created at": "Gemaakt op", "Created At": "Gemaakt op", "Created by": "", + "CSV Import": "", "Current Model": "Huidig Model", "Current Password": "Huidig Wachtwoord", "Custom": "Aangepast", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Stream vloeiend grote externe responsbrokken", "Focus chat input": "Focus chat input", "Followed instructions perfectly": "Volgde instructies perfect", + "Form": "", "Format your variables using square brackets like this:": "Formatteer je variabelen met vierkante haken zoals dit:", "Frequency Penalty": "Frequentie Straf", "Functions": "", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index 70289584f..d992f7c89 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -135,6 +135,7 @@ "Created at": "ਤੇ ਬਣਾਇਆ ਗਿਆ", "Created At": "ਤੇ ਬਣਾਇਆ ਗਿਆ", "Created by": "", + "CSV Import": "", "Current Model": "ਮੌਜੂਦਾ ਮਾਡਲ", "Current Password": "ਮੌਜੂਦਾ ਪਾਸਵਰਡ", "Custom": "ਕਸਟਮ", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "ਵੱਡੇ ਬਾਹਰੀ ਜਵਾਬ ਚੰਕਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸਟ੍ਰੀਮ ਕਰੋ", "Focus chat input": "ਗੱਲਬਾਤ ਇਨਪੁਟ 'ਤੇ ਧਿਆਨ ਦਿਓ", "Followed instructions perfectly": "ਹਦਾਇਤਾਂ ਨੂੰ ਬਿਲਕੁਲ ਫਾਲੋ ਕੀਤਾ", + "Form": "", "Format your variables using square brackets like this:": "ਤੁਹਾਡੀਆਂ ਵੈਰੀਏਬਲਾਂ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਵਰਤੋਂ: [ ]", "Frequency Penalty": "ਬਾਰੰਬਾਰਤਾ ਜੁਰਮਾਨਾ", "Functions": "", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 4939e1d02..d1ebfe324 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -135,6 +135,7 @@ "Created at": "Utworzono o", "Created At": "Utworzono o", "Created by": "", + "CSV Import": "", "Current Model": "Bieżący model", "Current Password": "Bieżące hasło", "Custom": "Niestandardowy", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Płynnie przesyłaj strumieniowo duże fragmenty odpowiedzi zewnętrznych", "Focus chat input": "Skoncentruj na czacie", "Followed instructions perfectly": "Postępował z idealnie według instrukcji", + "Form": "", "Format your variables using square brackets like this:": "Formatuj swoje zmienne, używając nawiasów kwadratowych, np.", "Frequency Penalty": "Kara za częstotliwość", "Functions": "", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 7b05152a0..41f547553 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -135,6 +135,7 @@ "Created at": "Criado em", "Created At": "Criado em", "Created by": "", + "CSV Import": "", "Current Model": "Modelo Atual", "Current Password": "Senha Atual", "Custom": "Personalizado", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa", "Focus chat input": "Focar entrada de bate-papo", "Followed instructions perfectly": "Seguiu instruções perfeitamente", + "Form": "", "Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes como este:", "Frequency Penalty": "Penalidade de Frequência", "Functions": "", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 3659582b0..828a9d4d7 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -135,6 +135,7 @@ "Created at": "Criado em", "Created At": "Criado em", "Created by": "", + "CSV Import": "", "Current Model": "Modelo Atual", "Current Password": "Senha Atual", "Custom": "Personalizado", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa", "Focus chat input": "Focar na conversa", "Followed instructions perfectly": "Seguiu instruções perfeitamente", + "Form": "", "Format your variables using square brackets like this:": "Formate as suas variáveis usando parenteses rectos como este:", "Frequency Penalty": "Penalidade de Frequência", "Functions": "", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index fc65c597c..90a8c041e 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -135,6 +135,7 @@ "Created at": "Создано в", "Created At": "Создано в", "Created by": "", + "CSV Import": "", "Current Model": "Текущая модель", "Current Password": "Текущий пароль", "Custom": "Пользовательский", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Плавная потоковая передача больших фрагментов внешних ответов", "Focus chat input": "Фокус ввода чата", "Followed instructions perfectly": "Учитывая инструкции идеально", + "Form": "", "Format your variables using square brackets like this:": "Форматируйте ваши переменные, используя квадратные скобки, как здесь:", "Frequency Penalty": "Штраф за частоту", "Functions": "", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index 17f62b297..cab384729 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -135,6 +135,7 @@ "Created at": "Направљено у", "Created At": "Направљено у", "Created by": "", + "CSV Import": "", "Current Model": "Тренутни модел", "Current Password": "Тренутна лозинка", "Custom": "Прилагођено", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Течно стримујте велике спољне делове одговора", "Focus chat input": "Усредсредите унос ћаскања", "Followed instructions perfectly": "Упутства су савршено праћена", + "Form": "", "Format your variables using square brackets like this:": "Форматирајте ваше променљиве користећи угластe заграде овако:", "Frequency Penalty": "Фреквентна казна", "Functions": "", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 505bb93ba..a8e943c14 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -135,6 +135,7 @@ "Created at": "Skapad", "Created At": "Skapad", "Created by": "", + "CSV Import": "", "Current Model": "Aktuell modell", "Current Password": "Nuvarande lösenord", "Custom": "Anpassad", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Strömma flytande stora externa svarschunks", "Focus chat input": "Fokusera på chattfältet", "Followed instructions perfectly": "Följde instruktionerna perfekt", + "Form": "", "Format your variables using square brackets like this:": "Formatera dina variabler med hakparenteser så här:", "Frequency Penalty": "Straff för frekvens", "Functions": "", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index fba2e4b2a..c4ea84702 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -135,6 +135,7 @@ "Created at": "", "Created At": "", "Created by": "", + "CSV Import": "", "Current Model": "", "Current Password": "", "Custom": "", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "", "Focus chat input": "", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", "Functions": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index b824d99c5..8d0041fcf 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -135,6 +135,7 @@ "Created at": "Oluşturulma tarihi", "Created At": "Şu Tarihte Oluşturuldu:", "Created by": "", + "CSV Import": "", "Current Model": "Mevcut Model", "Current Password": "Mevcut Parola", "Custom": "Özel", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Büyük harici yanıt chunklarını akıcı bir şekilde yayınlayın", "Focus chat input": "Sohbet girişine odaklan", "Followed instructions perfectly": "Talimatları mükemmel şekilde takip etti", + "Form": "", "Format your variables using square brackets like this:": "Değişkenlerinizi şu şekilde kare parantezlerle biçimlendirin:", "Frequency Penalty": "Frekans Cezası", "Functions": "", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 086467855..228932f79 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -135,6 +135,7 @@ "Created at": "Створено у", "Created At": "Створено у", "Created by": "Створено", + "CSV Import": "Імпорт CSV", "Current Model": "Поточна модель", "Current Password": "Поточний пароль", "Custom": "Налаштувати", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Плавно передавати великі фрагменти зовнішніх відповідей", "Focus chat input": "Фокус вводу чату", "Followed instructions perfectly": "Бездоганно дотримувався інструкцій", + "Form": "Форма", "Format your variables using square brackets like this:": "Форматуйте свої змінні квадратними дужками так:", "Frequency Penalty": "Штраф за частоту", "Functions": "Функції", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index b61a6d202..0ac69b015 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -135,6 +135,7 @@ "Created at": "Được tạo vào lúc", "Created At": "Tạo lúc", "Created by": "", + "CSV Import": "", "Current Model": "Mô hình hiện tại", "Current Password": "Mật khẩu hiện tại", "Custom": "Tùy chỉnh", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "Truyền tải các khối phản hồi bên ngoài lớn một cách trôi chảy", "Focus chat input": "Tập trung vào nội dung chat", "Followed instructions perfectly": "Tuân theo chỉ dẫn một cách hoàn hảo", + "Form": "", "Format your variables using square brackets like this:": "Định dạng các biến của bạn bằng cách sử dụng dấu ngoặc vuông như thế này:", "Frequency Penalty": "Hình phạt tần số", "Functions": "", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index dfca1fd5d..71f3efb5f 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -135,6 +135,7 @@ "Created at": "创建于", "Created At": "创建于", "Created by": "", + "CSV Import": "", "Current Model": "当前模型", "Current Password": "当前密码", "Custom": "自定义", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "流畅地传输外部大型响应块数据", "Focus chat input": "聚焦对话输入", "Followed instructions perfectly": "完全按照指示执行", + "Form": "", "Format your variables using square brackets like this:": "使用这样的方括号格式化你的变量:", "Frequency Penalty": "频率惩罚", "Functions": "功能", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index e1e3af222..a99ba68ff 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -135,6 +135,7 @@ "Created at": "建立於", "Created At": "建立於", "Created by": "", + "CSV Import": "", "Current Model": "目前模型", "Current Password": "目前密碼", "Custom": "自訂", @@ -248,6 +249,7 @@ "Fluidly stream large external response chunks": "流暢地傳輸大型外部響應區塊", "Focus chat input": "聚焦聊天輸入框", "Followed instructions perfectly": "完全遵循指示", + "Form": "", "Format your variables using square brackets like this:": "像這樣使用方括號來格式化你的變數:", "Frequency Penalty": "頻率懲罰", "Functions": "", From 7c304d225be5e22af2add04698c08f4cf4a34948 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Thu, 20 Jun 2024 21:57:33 +0200 Subject: [PATCH 136/287] fix key {.t('Created by')} --- src/lib/components/chat/Settings/About.svelte | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lib/components/chat/Settings/About.svelte b/src/lib/components/chat/Settings/About.svelte index 1076e8d0b..b4449aefb 100644 --- a/src/lib/components/chat/Settings/About.svelte +++ b/src/lib/components/chat/Settings/About.svelte @@ -132,9 +132,8 @@
{#if !$WEBUI_NAME.includes('Open WebUI')} {$WEBUI_NAME} - - {/if}{ - $i18n.t('Created by') - } + {/if} + {$i18n.t('Created by')} Date: Thu, 20 Jun 2024 22:05:48 +0200 Subject: [PATCH 137/287] Fixed indentation in About.svelte --- src/lib/components/chat/Settings/About.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/chat/Settings/About.svelte b/src/lib/components/chat/Settings/About.svelte index b4449aefb..11177d45b 100644 --- a/src/lib/components/chat/Settings/About.svelte +++ b/src/lib/components/chat/Settings/About.svelte @@ -133,7 +133,7 @@ {#if !$WEBUI_NAME.includes('Open WebUI')} {$WEBUI_NAME} - {/if} - {$i18n.t('Created by')} + {$i18n.t('Created by')} Date: Thu, 20 Jun 2024 13:14:58 -0700 Subject: [PATCH 138/287] refac: cookie --- backend/apps/webui/routers/auths.py | 20 ++++++++++++++++---- src/lib/apis/auths/index.ts | 2 ++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/backend/apps/webui/routers/auths.py b/backend/apps/webui/routers/auths.py index feadc4bd7..586a2a8a3 100644 --- a/backend/apps/webui/routers/auths.py +++ b/backend/apps/webui/routers/auths.py @@ -61,8 +61,6 @@ async def get_session_user( key="token", value=token, httponly=True, # Ensures the cookie is not accessible via JavaScript - secure=True, # Ensures the cookie is sent over https - samesite="lax", ) return { @@ -125,7 +123,7 @@ async def update_password( @router.post("/signin", response_model=SigninResponse) -async def signin(request: Request, form_data: SigninForm): +async def signin(request: Request, response: Response, form_data: SigninForm): if WEBUI_AUTH_TRUSTED_EMAIL_HEADER: if WEBUI_AUTH_TRUSTED_EMAIL_HEADER not in request.headers: raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_TRUSTED_HEADER) @@ -169,6 +167,13 @@ async def signin(request: Request, form_data: SigninForm): expires_delta=parse_duration(request.app.state.config.JWT_EXPIRES_IN), ) + # Set the cookie token + response.set_cookie( + key="token", + value=token, + httponly=True, # Ensures the cookie is not accessible via JavaScript + ) + return { "token": token, "token_type": "Bearer", @@ -188,7 +193,7 @@ async def signin(request: Request, form_data: SigninForm): @router.post("/signup", response_model=SigninResponse) -async def signup(request: Request, form_data: SignupForm): +async def signup(request: Request, response: Response, form_data: SignupForm): if not request.app.state.config.ENABLE_SIGNUP and WEBUI_AUTH: raise HTTPException( status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.ACCESS_PROHIBITED @@ -224,6 +229,13 @@ async def signup(request: Request, form_data: SignupForm): ) # response.set_cookie(key='token', value=token, httponly=True) + # Set the cookie token + response.set_cookie( + key="token", + value=token, + httponly=True, # Ensures the cookie is not accessible via JavaScript + ) + if request.app.state.config.WEBHOOK_URL: post_webhook( request.app.state.config.WEBHOOK_URL, diff --git a/src/lib/apis/auths/index.ts b/src/lib/apis/auths/index.ts index 427009efc..1bdb74694 100644 --- a/src/lib/apis/auths/index.ts +++ b/src/lib/apis/auths/index.ts @@ -118,6 +118,7 @@ export const userSignIn = async (email: string, password: string) => { headers: { 'Content-Type': 'application/json' }, + credentials: 'include', body: JSON.stringify({ email: email, password: password @@ -154,6 +155,7 @@ export const userSignUp = async ( headers: { 'Content-Type': 'application/json' }, + credentials: 'include', body: JSON.stringify({ name: name, email: email, From 58ae91369ed57bf07e36f704a6f0844514bb45bc Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 13:49:04 -0700 Subject: [PATCH 139/287] refac --- backend/apps/webui/routers/files.py | 9 +- .../workspace/Functions/FunctionEditor.svelte | 146 ++++++++++++++++++ 2 files changed, 150 insertions(+), 5 deletions(-) diff --git a/backend/apps/webui/routers/files.py b/backend/apps/webui/routers/files.py index a7070e448..707dce9d3 100644 --- a/backend/apps/webui/routers/files.py +++ b/backend/apps/webui/routers/files.py @@ -161,7 +161,7 @@ async def get_file_by_id(id: str, user=Depends(get_verified_user)): return file else: raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, + status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND, ) @@ -180,17 +180,16 @@ async def get_file_content_by_id(id: str, user=Depends(get_verified_user)): # Check if the file already exists in the cache if file_path.is_file(): - print(f"file_path: {file_path}") return FileResponse(file_path) else: raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, + status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND, ) else: raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, + status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND, ) @@ -215,6 +214,6 @@ async def delete_file_by_id(id: str, user=Depends(get_verified_user)): ) else: raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, + status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND, ) diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte index 6e30013cc..7540781e1 100644 --- a/src/lib/components/workspace/Functions/FunctionEditor.svelte +++ b/src/lib/components/workspace/Functions/FunctionEditor.svelte @@ -82,6 +82,152 @@ class Filter: return {"messages": messages} +`; + + const _boilerplate = `from pydantic import BaseModel +from typing import Optional, Union, Generator, Iterator +from utils.misc import get_last_user_message + +import os +import requests + + +# Filter Class: This class is designed to serve as a pre-processor and post-processor +# for request and response modifications. It checks and transforms requests and responses +# to ensure they meet specific criteria before further processing or returning to the user. +class Filter: + class Valves(BaseModel): + max_turns: int = 4 + pass + + def __init__(self): + # Indicates custom file handling logic. This flag helps disengage default routines in favor of custom + # implementations, informing the WebUI to defer file-related operations to designated methods within this class. + # Alternatively, you can remove the files directly from the body in from the inlet hook + self.file_handler = True + + # Initialize 'valves' with specific configurations. Using 'Valves' instance helps encapsulate settings, + # which ensures settings are managed cohesively and not confused with operational flags like 'file_handler'. + self.valves = self.Valves(**{"max_turns": 2}) + pass + + def inlet(self, body: dict, user: Optional[dict] = None) -> dict: + # Modify the request body or validate it before processing by the chat completion API. + # This function is the pre-processor for the API where various checks on the input can be performed. + # It can also modify the request before sending it to the API. + print(f"inlet:{__name__}") + print(f"inlet:body:{body}") + print(f"inlet:user:{user}") + + if user.get("role", "admin") in ["user", "admin"]: + messages = body.get("messages", []) + if len(messages) > self.valves.max_turns: + raise Exception( + f"Conversation turn limit exceeded. Max turns: {self.valves.max_turns}" + ) + + return body + + def outlet(self, body: dict, user: Optional[dict] = None) -> dict: + # Modify or analyze the response body after processing by the API. + # This function is the post-processor for the API, which can be used to modify the response + # or perform additional checks and analytics. + print(f"outlet:{__name__}") + print(f"outlet:body:{body}") + print(f"outlet:user:{user}") + + messages = [ + { + **message, + "content": f"{message['content']} - @@Modified from Filter Outlet", + } + for message in body.get("messages", []) + ] + + return {"messages": messages} + + + +# Pipe Class: This class functions as a customizable pipeline. +# It can be adapted to work with any external or internal models, +# making it versatile for various use cases outside of just OpenAI models. +class Pipe: + class Valves(BaseModel): + OPENAI_API_BASE_URL: str = "https://api.openai.com/v1" + OPENAI_API_KEY: str = "your-key" + pass + + def __init__(self): + self.type = "manifold" + self.valves = self.Valves() + self.pipes = self.get_openai_models() + pass + + def get_openai_models(self): + if self.valves.OPENAI_API_KEY: + try: + headers = {} + headers["Authorization"] = f"Bearer {self.valves.OPENAI_API_KEY}" + headers["Content-Type"] = "application/json" + + r = requests.get( + f"{self.valves.OPENAI_API_BASE_URL}/models", headers=headers + ) + + models = r.json() + return [ + { + "id": model["id"], + "name": model["name"] if "name" in model else model["id"], + } + for model in models["data"] + if "gpt" in model["id"] + ] + + except Exception as e: + + print(f"Error: {e}") + return [ + { + "id": "error", + "name": "Could not fetch models from OpenAI, please update the API Key in the valves.", + }, + ] + else: + return [] + + def pipe(self, body: dict) -> Union[str, Generator, Iterator]: + # This is where you can add your custom pipelines like RAG. + print(f"pipe:{__name__}") + + if "user" in body: + print(body["user"]) + del body["user"] + + headers = {} + headers["Authorization"] = f"Bearer {self.valves.OPENAI_API_KEY}" + headers["Content-Type"] = "application/json" + + model_id = body["model"][body["model"].find(".") + 1 :] + payload = {**body, "model": model_id} + print(payload) + + try: + r = requests.post( + url=f"{self.valves.OPENAI_API_BASE_URL}/chat/completions", + json=payload, + headers=headers, + stream=True, + ) + + r.raise_for_status() + + if body["stream"]: + return r.iter_lines() + else: + return r.json() + except Exception as e: + return f"Error: {e}" `; const saveHandler = async () => { From 6bb2f418123fe7fa7cc49ffc454041a5994ab7b2 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 14:14:12 -0700 Subject: [PATCH 140/287] feat: tool citation --- backend/main.py | 54 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/backend/main.py b/backend/main.py index 47078b681..346902de6 100644 --- a/backend/main.py +++ b/backend/main.py @@ -247,6 +247,7 @@ async def get_function_call_response( result = json.loads(content) print(result) + citation = None # Call the function if "name" in result: if tool_id in webui_app.state.TOOLS: @@ -309,22 +310,32 @@ async def get_function_call_response( } function_result = function(**params) + + if hasattr(toolkit_module, "citation") and toolkit_module.citation: + citation = { + "source": {"name": f"TOOL:{tool.name}/{result['name']}"}, + "document": [function_result], + "metadata": [{"source": result["name"]}], + } except Exception as e: print(e) # Add the function result to the system prompt if function_result is not None: - return function_result, file_handler + return function_result, citation, file_handler except Exception as e: print(f"Error: {e}") - return None, False + return None, None, False class ChatCompletionMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): data_items = [] + show_citations = False + citations = [] + if request.method == "POST" and any( endpoint in request.url.path for endpoint in ["/ollama/api/chat", "/chat/completions"] @@ -342,6 +353,9 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ) # Flag to skip RAG completions if file_handler is present in tools/functions skip_files = False + if data.get("citations"): + show_citations = True + del data["citations"] model_id = data["model"] if model_id not in app.state.MODELS: @@ -365,8 +379,8 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): webui_app.state.FUNCTIONS[filter_id] = function_module # Check if the function has a file_handler variable - if getattr(function_module, "file_handler"): - skip_files = True + if hasattr(function_module, "file_handler"): + skip_files = function_module.file_handler try: if hasattr(function_module, "inlet"): @@ -411,19 +425,25 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): for tool_id in data["tool_ids"]: print(tool_id) try: - response, file_handler = await get_function_call_response( - messages=data["messages"], - files=data.get("files", []), - tool_id=tool_id, - template=app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE, - task_model_id=task_model_id, - user=user, + response, citation, file_handler = ( + await get_function_call_response( + messages=data["messages"], + files=data.get("files", []), + tool_id=tool_id, + template=app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE, + task_model_id=task_model_id, + user=user, + ) ) print(file_handler) if isinstance(response, str): context += ("\n" if context != "" else "") + response + if citation: + citations.append(citation) + show_citations = True + if file_handler: skip_files = True @@ -438,7 +458,7 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): if "files" in data: if not skip_files: data = {**data} - rag_context, citations = get_rag_context( + rag_context, rag_citations = get_rag_context( files=data["files"], messages=data["messages"], embedding_function=rag_app.state.EMBEDDING_FUNCTION, @@ -452,13 +472,13 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): log.debug(f"rag_context: {rag_context}, citations: {citations}") - if citations and data.get("citations"): - data_items.append({"citations": citations}) + if rag_citations: + citations.extend(rag_citations) del data["files"] - if data.get("citations"): - del data["citations"] + if show_citations and len(citations) > 0: + data_items.append({"citations": citations}) if context != "": system_prompt = rag_template( @@ -1285,7 +1305,7 @@ async def get_tools_function_calling(form_data: dict, user=Depends(get_verified_ template = app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE try: - context, file_handler = await get_function_call_response( + context, citation, file_handler = await get_function_call_response( form_data["messages"], form_data.get("files", []), form_data["tool_id"], From 5621025c122a783a4912f320f4fd24c710c275ac Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 20:26:28 -0700 Subject: [PATCH 141/287] feat: async filter support --- backend/main.py | 63 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/backend/main.py b/backend/main.py index 346902de6..bfba361ab 100644 --- a/backend/main.py +++ b/backend/main.py @@ -384,15 +384,29 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): try: if hasattr(function_module, "inlet"): - data = function_module.inlet( - data, - { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - }, - ) + inlet = function_module.inlet + + if inspect.iscoroutinefunction(inlet): + data = await inlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + else: + data = inlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + except Exception as e: print(f"Error: {e}") return JSONResponse( @@ -1007,15 +1021,28 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): try: if hasattr(function_module, "outlet"): - data = function_module.outlet( - data, - { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - }, - ) + outlet = function_module.outlet + if inspect.iscoroutinefunction(outlet): + data = await outlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + else: + data = outlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + except Exception as e: print(f"Error: {e}") return JSONResponse( From 4370f233a1106270968c210eb60bd16261c199e5 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 20:37:04 -0700 Subject: [PATCH 142/287] feat: pipe async support --- backend/main.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/backend/main.py b/backend/main.py index bfba361ab..bd24c369b 100644 --- a/backend/main.py +++ b/backend/main.py @@ -843,7 +843,7 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u "role": user.role, } - def job(): + async def job(): pipe_id = form_data["model"] if "." in pipe_id: pipe_id, sub_pipe_id = pipe_id.split(".", 1) @@ -852,8 +852,11 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u pipe = webui_app.state.FUNCTIONS[pipe_id].pipe if form_data["stream"]: - def stream_content(): - res = pipe(body=form_data) + async def stream_content(): + if inspect.iscoroutinefunction(pipe): + res = await pipe(body=form_data) + else: + res = pipe(body=form_data) if isinstance(res, str): message = stream_message_template(form_data["model"], res) @@ -898,7 +901,10 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u stream_content(), media_type="text/event-stream" ) else: - res = pipe(body=form_data) + if inspect.iscoroutinefunction(pipe): + res = await pipe(body=form_data) + else: + res = pipe(body=form_data) if isinstance(res, dict): return res @@ -930,7 +936,7 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u ], } - return await run_in_threadpool(job) + return await job() if model["owned_by"] == "ollama": return await generate_ollama_chat_completion(form_data, user=user) else: From a2ea6b1b5b4404fd51de06872edc2768a4290d7a Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 20 Jun 2024 20:40:03 -0700 Subject: [PATCH 143/287] enh: tool async support --- backend/main.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/main.py b/backend/main.py index bd24c369b..744c84b6d 100644 --- a/backend/main.py +++ b/backend/main.py @@ -309,7 +309,10 @@ async def get_function_call_response( "__id__": tool_id, } - function_result = function(**params) + if inspect.iscoroutinefunction(function): + function_result = await function(**params) + else: + function_result = function(**params) if hasattr(toolkit_module, "citation") and toolkit_module.citation: citation = { From 4d66e39402c0b7229733afcbc5614b34d6661953 Mon Sep 17 00:00:00 2001 From: Karl Lee <61072264+KarlLee830@users.noreply.github.com> Date: Fri, 21 Jun 2024 11:45:57 +0800 Subject: [PATCH 144/287] i18n: Update Chinese translation --- src/lib/i18n/locales/zh-CN/translation.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 71f3efb5f..95775333a 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -99,7 +99,7 @@ "Clear memory": "清除记忆", "Click here for help.": "点击这里获取帮助。", "Click here to": "单击", - "Click here to download user import template file.": "", + "Click here to download user import template file.": "单击此处下载用户导入所需的模板文件。", "Click here to select": "点击这里选择", "Click here to select a csv file.": "单击此处选择 csv 文件。", "Click here to select a py file.": "单击此处选择 py 文件。", @@ -134,8 +134,8 @@ "Create new secret key": "创建新安全密钥", "Created at": "创建于", "Created At": "创建于", - "Created by": "", - "CSV Import": "", + "Created by": "作者", + "CSV Import": "通过 CSV 文件导入", "Current Model": "当前模型", "Current Password": "当前密码", "Custom": "自定义", @@ -249,7 +249,7 @@ "Fluidly stream large external response chunks": "流畅地传输外部大型响应块数据", "Focus chat input": "聚焦对话输入", "Followed instructions perfectly": "完全按照指示执行", - "Form": "", + "Form": "手动创建", "Format your variables using square brackets like this:": "使用这样的方括号格式化你的变量:", "Frequency Penalty": "频率惩罚", "Functions": "功能", From f0b5008fc83f9774002e174d45da9f0756faa8c3 Mon Sep 17 00:00:00 2001 From: Karl Lee <61072264+KarlLee830@users.noreply.github.com> Date: Fri, 21 Jun 2024 15:44:06 +0800 Subject: [PATCH 145/287] i18n: Update Chinese translation --- src/lib/i18n/locales/zh-CN/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 95775333a..0e982c351 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -266,7 +266,7 @@ "Hello, {{name}}": "您好,{{name}}", "Help": "帮助", "Hide": "隐藏", - "Hide Model": "隐藏模型", + "Hide Model": "隐藏", "How can I help you today?": "有什么我能帮您的吗?", "Hybrid Search": "混合搜索", "Image Generation (Experimental)": "图像生成(实验性)", @@ -490,7 +490,7 @@ "short-summary": "简短总结", "Show": "显示", "Show Admin Details in Account Pending Overlay": "在用户待激活界面中显示管理员邮箱等详细信息", - "Show Model": "显示模型", + "Show Model": "显示", "Show shortcuts": "显示快捷方式", "Showcased creativity": "很有创意", "sidebar": "侧边栏", From 922dfae51c1d9c95845d96f24a692dae3c49bad0 Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Fri, 21 Jun 2024 13:44:10 +0100 Subject: [PATCH 146/287] fix: broken tuple expansion --- backend/apps/webui/models/users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/apps/webui/models/users.py b/backend/apps/webui/models/users.py index 1003ea864..258bb32be 100644 --- a/backend/apps/webui/models/users.py +++ b/backend/apps/webui/models/users.py @@ -131,7 +131,7 @@ class UsersTable: if not oauth_user else (User.email == email) ) - user = User.get(conditions) + user = User.get(*conditions) return UserModel(**model_to_dict(user)) except: return None From 983112d17cc4862a5363179112aa11646024ac51 Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Fri, 21 Jun 2024 14:35:54 +0100 Subject: [PATCH 147/287] feat: fetch and store oauth profile pictures as data URLs --- backend/main.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/backend/main.py b/backend/main.py index 2e1d2c83f..42484656c 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,3 +1,4 @@ +import base64 import uuid from contextlib import asynccontextmanager @@ -1903,13 +1904,33 @@ async def oauth_callback(provider: str, request: Request): if not user: # If the user does not exist, check if signups are enabled if ENABLE_OAUTH_SIGNUP.value: + picture_url = user_data.get("picture", "") + if picture_url: + # Download the profile image into a base64 string + try: + async with aiohttp.ClientSession() as session: + async with session.get(picture_url) as resp: + picture = await resp.read() + base64_encoded_picture = base64.b64encode(picture).decode( + "utf-8" + ) + guessed_mime_type = mimetypes.guess_type(picture_url)[0] + if guessed_mime_type is None: + # assume JPG, browsers are tolerant enough of image formats + guessed_mime_type = "image/jpeg" + picture_url = f"data:{guessed_mime_type};base64,{base64_encoded_picture}" + except Exception as e: + log.error(f"Profile image download error: {e}") + picture_url = "" + if not picture_url: + picture_url = "/user.png" user = Auths.insert_new_auth( email=user_data.get("email", "").lower(), password=get_password_hash( str(uuid.uuid4()) ), # Random password, not used name=user_data.get("name", "User"), - profile_image_url=user_data.get("picture", "/user.png"), + profile_image_url=picture_url, role=webui_app.state.config.DEFAULT_USER_ROLE, oauth_sub=provider_sub, ) From 49a00d61acc1043bd76c35a7a528208e735c923c Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Fri, 21 Jun 2024 14:21:34 +0100 Subject: [PATCH 148/287] feat: show oauth sub in admin panel --- src/lib/i18n/locales/ar-BH/translation.json | 1 + src/lib/i18n/locales/bg-BG/translation.json | 1 + src/lib/i18n/locales/bn-BD/translation.json | 1 + src/lib/i18n/locales/ca-ES/translation.json | 1 + src/lib/i18n/locales/ceb-PH/translation.json | 1 + src/lib/i18n/locales/de-DE/translation.json | 1 + src/lib/i18n/locales/dg-DG/translation.json | 1 + src/lib/i18n/locales/en-GB/translation.json | 1 + src/lib/i18n/locales/en-US/translation.json | 1 + src/lib/i18n/locales/es-ES/translation.json | 1 + src/lib/i18n/locales/fa-IR/translation.json | 1 + src/lib/i18n/locales/fi-FI/translation.json | 1 + src/lib/i18n/locales/fr-CA/translation.json | 1 + src/lib/i18n/locales/fr-FR/translation.json | 1 + src/lib/i18n/locales/he-IL/translation.json | 1 + src/lib/i18n/locales/hi-IN/translation.json | 1 + src/lib/i18n/locales/hr-HR/translation.json | 1 + src/lib/i18n/locales/it-IT/translation.json | 1 + src/lib/i18n/locales/ja-JP/translation.json | 1 + src/lib/i18n/locales/ka-GE/translation.json | 1 + src/lib/i18n/locales/ko-KR/translation.json | 1 + src/lib/i18n/locales/lt-LT/translation.json | 1 + src/lib/i18n/locales/nb-NO/translation.json | 1 + src/lib/i18n/locales/nl-NL/translation.json | 1 + src/lib/i18n/locales/pa-IN/translation.json | 1 + src/lib/i18n/locales/pl-PL/translation.json | 1 + src/lib/i18n/locales/pt-BR/translation.json | 1 + src/lib/i18n/locales/pt-PT/translation.json | 1 + src/lib/i18n/locales/ru-RU/translation.json | 1 + src/lib/i18n/locales/sr-RS/translation.json | 1 + src/lib/i18n/locales/sv-SE/translation.json | 1 + src/lib/i18n/locales/tk-TW/translation.json | 1 + src/lib/i18n/locales/tr-TR/translation.json | 1 + src/lib/i18n/locales/uk-UA/translation.json | 1 + src/lib/i18n/locales/vi-VN/translation.json | 1 + src/lib/i18n/locales/zh-CN/translation.json | 1 + src/lib/i18n/locales/zh-TW/translation.json | 1 + src/routes/(app)/admin/+page.svelte | 14 ++++++++++++++ 38 files changed, 51 insertions(+) diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index cdc03aae6..8c95d9d89 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -355,6 +355,7 @@ "Notifications": "إشعارات", "November": "نوفمبر", "num_thread (Ollama)": "num_thread (أولاما)", + "OAuth ID": "", "October": "اكتوبر", "Off": "أغلاق", "Okay, Let's Go!": "حسنا دعنا نذهب!", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index cd848ed07..a6bea8f00 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -355,6 +355,7 @@ "Notifications": "Десктоп Известия", "November": "Ноември", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Октомври", "Off": "Изкл.", "Okay, Let's Go!": "ОК, Нека започваме!", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 205f33796..3f1ba7cdb 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -355,6 +355,7 @@ "Notifications": "নোটিফিকেশনসমূহ", "November": "নভেম্বর", "num_thread (Ollama)": "num_thread (ওলামা)", + "OAuth ID": "", "October": "অক্টোবর", "Off": "বন্ধ", "Okay, Let's Go!": "ঠিক আছে, চলুন যাই!", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index aedb424e6..c750da2bb 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -355,6 +355,7 @@ "Notifications": "Notificacions d'Escriptori", "November": "Novembre", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Octubre", "Off": "Desactivat", "Okay, Let's Go!": "D'acord, Anem!", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 927800e88..732b5e5ba 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -355,6 +355,7 @@ "Notifications": "Mga pahibalo sa desktop", "November": "", "num_thread (Ollama)": "", + "OAuth ID": "", "October": "", "Off": "Napuo", "Okay, Let's Go!": "Okay, lakaw na!", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index a65ea6d22..343bfa3ee 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -355,6 +355,7 @@ "Notifications": "Desktop-Benachrichtigungen", "November": "November", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Oktober", "Off": "Aus", "Okay, Let's Go!": "Okay, los geht's!", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 6752bacd3..2da5317e2 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -355,6 +355,7 @@ "Notifications": "Notifications", "November": "", "num_thread (Ollama)": "", + "OAuth ID": "", "October": "", "Off": "Off", "Okay, Let's Go!": "Okay, Let's Go!", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 24de0b8cc..7a44764a0 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -355,6 +355,7 @@ "Notifications": "", "November": "", "num_thread (Ollama)": "", + "OAuth ID": "", "October": "", "Off": "", "Okay, Let's Go!": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 24de0b8cc..7a44764a0 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -355,6 +355,7 @@ "Notifications": "", "November": "", "num_thread (Ollama)": "", + "OAuth ID": "", "October": "", "Off": "", "Okay, Let's Go!": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 2d0c27915..c9355d65f 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -355,6 +355,7 @@ "Notifications": "Notificaciones", "November": "Noviembre", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Octubre", "Off": "Desactivado", "Okay, Let's Go!": "Bien, ¡Vamos!", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index d6cab9347..b04b66e56 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -355,6 +355,7 @@ "Notifications": "اعلان", "November": "نوامبر", "num_thread (Ollama)": "num_thread (اولاما)", + "OAuth ID": "", "October": "اکتبر", "Off": "خاموش", "Okay, Let's Go!": "باشه، بزن بریم!", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 2d500d44c..5ea5f6198 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -355,6 +355,7 @@ "Notifications": "Ilmoitukset", "November": "marraskuu", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "lokakuu", "Off": "Pois", "Okay, Let's Go!": "Eikun menoksi!", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index d1ae77713..84f60fdf4 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -355,6 +355,7 @@ "Notifications": "Notifications de bureau", "November": "Novembre", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Octobre", "Off": "Éteint", "Okay, Let's Go!": "Okay, Allons-y !", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index af9304e58..d329de211 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -355,6 +355,7 @@ "Notifications": "Notifications de bureau", "November": "Novembre", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Octobre", "Off": "Désactivé", "Okay, Let's Go!": "D'accord, allons-y !", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index c4eac5caf..e37349108 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -355,6 +355,7 @@ "Notifications": "התראות", "November": "נובמבר", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "אוקטובר", "Off": "כבוי", "Okay, Let's Go!": "בסדר, בואו נתחיל!", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index af093532d..87218da7d 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -355,6 +355,7 @@ "Notifications": "सूचनाएं", "November": "नवंबर", "num_thread (Ollama)": "num_thread (ओलामा)", + "OAuth ID": "", "October": "अक्टूबर", "Off": "बंद", "Okay, Let's Go!": "ठीक है, चलिए चलते हैं!", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 53493b0ad..1e9921af1 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -355,6 +355,7 @@ "Notifications": "Obavijesti", "November": "Studeni", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Listopad", "Off": "Isključeno", "Okay, Let's Go!": "U redu, idemo!", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 210a4a0e8..763bb460a 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -355,6 +355,7 @@ "Notifications": "Notifiche desktop", "November": "Novembre", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Ottobre", "Off": "Disattivato", "Okay, Let's Go!": "Ok, andiamo!", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 1f85c21a3..f15d37215 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -355,6 +355,7 @@ "Notifications": "デスクトップ通知", "November": "11月", "num_thread (Ollama)": "num_thread(オラマ)", + "OAuth ID": "", "October": "10月", "Off": "オフ", "Okay, Let's Go!": "OK、始めましょう!", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index a4a91f085..ee30a6813 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -355,6 +355,7 @@ "Notifications": "შეტყობინება", "November": "ნოემბერი", "num_thread (Ollama)": "num_thread (ოლამა)", + "OAuth ID": "", "October": "ოქტომბერი", "Off": "გამორთვა", "Okay, Let's Go!": "კარგი, წავედით!", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 57eb26573..e036b384b 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -355,6 +355,7 @@ "Notifications": "알림", "November": "11월", "num_thread (Ollama)": "num_thread (올라마)", + "OAuth ID": "", "October": "10월", "Off": "끄기", "Okay, Let's Go!": "좋아요, 시작합시다!", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index c3b3a207f..f34145287 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -355,6 +355,7 @@ "Notifications": "Pranešimai", "November": "lapkritis", "num_thread (Ollama)": "", + "OAuth ID": "", "October": "spalis", "Off": "Išjungta", "Okay, Let's Go!": "Gerai, važiuojam!", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 58fe795b8..3356cf7f3 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -355,6 +355,7 @@ "Notifications": "Varsler", "November": "November", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Oktober", "Off": "Av", "Okay, Let's Go!": "Ok, la oss gå!", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 369528265..f3e761b54 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -355,6 +355,7 @@ "Notifications": "Desktop Notificaties", "November": "November", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Oktober", "Off": "Uit", "Okay, Let's Go!": "Okay, Laten we gaan!", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index 683db9a97..5ca710a88 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -355,6 +355,7 @@ "Notifications": "ਸੂਚਨਾਵਾਂ", "November": "ਨਵੰਬਰ", "num_thread (Ollama)": "num_thread (ਓਲਾਮਾ)", + "OAuth ID": "", "October": "ਅਕਤੂਬਰ", "Off": "ਬੰਦ", "Okay, Let's Go!": "ਠੀਕ ਹੈ, ਚੱਲੋ ਚੱਲੀਏ!", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index aaf6794d4..4c39b5ed2 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -355,6 +355,7 @@ "Notifications": "Powiadomienia", "November": "Listopad", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Październik", "Off": "Wyłączony", "Okay, Let's Go!": "Okej, zaczynamy!", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 69c386667..226f2dd9d 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -355,6 +355,7 @@ "Notifications": "Notificações da Área de Trabalho", "November": "Novembro", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Outubro", "Off": "Desligado", "Okay, Let's Go!": "Ok, Vamos Lá!", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index f0fd21a5a..29456e707 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -355,6 +355,7 @@ "Notifications": "Notificações da Área de Trabalho", "November": "Novembro", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Outubro", "Off": "Desligado", "Okay, Let's Go!": "Ok, Vamos Lá!", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 1b836fb20..5e5f8787b 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -355,6 +355,7 @@ "Notifications": "Уведомления на рабочем столе", "November": "Ноябрь", "num_thread (Ollama)": "num_thread (Оллама)", + "OAuth ID": "", "October": "Октябрь", "Off": "Выключено.", "Okay, Let's Go!": "Давайте начнём!", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index b6bc2b3c5..1a3dd7e5c 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -355,6 +355,7 @@ "Notifications": "Обавештења", "November": "Новембар", "num_thread (Ollama)": "нум _тхреад (Оллама)", + "OAuth ID": "", "October": "Октобар", "Off": "Искључено", "Okay, Let's Go!": "У реду, хајде да кренемо!", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index fb65f5ac0..36ce6cc2a 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -355,6 +355,7 @@ "Notifications": "Notifikationer", "November": "november", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "oktober", "Off": "Av", "Okay, Let's Go!": "Okej, nu kör vi!", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index 24de0b8cc..7a44764a0 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -355,6 +355,7 @@ "Notifications": "", "November": "", "num_thread (Ollama)": "", + "OAuth ID": "", "October": "", "Off": "", "Okay, Let's Go!": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index 424578d11..9cd8ede91 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -355,6 +355,7 @@ "Notifications": "Bildirimler", "November": "Kasım", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Ekim", "Off": "Kapalı", "Okay, Let's Go!": "Tamam, Hadi Başlayalım!", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 41006369d..8bacecec3 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -355,6 +355,7 @@ "Notifications": "Сповіщення", "November": "Листопад", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Жовтень", "Off": "Вимк", "Okay, Let's Go!": "Гаразд, давайте почнемо!", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 5217a30b1..dba37166b 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -355,6 +355,7 @@ "Notifications": "Thông báo trên máy tính (Notification)", "November": "Tháng 11", "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "", "October": "Tháng 10", "Off": "Tắt", "Okay, Let's Go!": "Được rồi, Bắt đầu thôi!", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 7b9a6beaa..f1292a11c 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -355,6 +355,7 @@ "Notifications": "桌面通知", "November": "十一月", "num_thread (Ollama)": "num_thread(Ollama)", + "OAuth ID": "", "October": "十月", "Off": "关闭", "Okay, Let's Go!": "确认,开始使用!", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index cefa92cf6..7e9cd2a1e 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -355,6 +355,7 @@ "Notifications": "桌面通知", "November": "11月", "num_thread (Ollama)": "num_thread(奧拉馬)", + "OAuth ID": "", "October": "10 月", "Off": "關閉", "Okay, Let's Go!": "好的,啟動吧!", diff --git a/src/routes/(app)/admin/+page.svelte b/src/routes/(app)/admin/+page.svelte index 6ae7b0c92..4855a4d40 100644 --- a/src/routes/(app)/admin/+page.svelte +++ b/src/routes/(app)/admin/+page.svelte @@ -195,6 +195,18 @@ {/if} + setSortKey('oauth_sub')} + > + {$i18n.t('OAuth ID')} + {#if sortKey === 'oauth_sub'} + {sortOrder === 'asc' ? '▲' : '▼'} + {:else} + + {/if} + {user.email} + {user.oauth_sub ?? ""} + {dayjs(user.last_active_at * 1000).fromNow()} From 416e8d1ef9f0746316b9a20b0e20b33799f5216e Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Fri, 21 Jun 2024 14:34:59 +0100 Subject: [PATCH 149/287] fix: db migration sync with dev --- .../{013_add_user_oauth_sub.py => 016_add_user_oauth_sub.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename backend/apps/webui/internal/migrations/{013_add_user_oauth_sub.py => 016_add_user_oauth_sub.py} (97%) diff --git a/backend/apps/webui/internal/migrations/013_add_user_oauth_sub.py b/backend/apps/webui/internal/migrations/016_add_user_oauth_sub.py similarity index 97% rename from backend/apps/webui/internal/migrations/013_add_user_oauth_sub.py rename to backend/apps/webui/internal/migrations/016_add_user_oauth_sub.py index 9bd3f4721..2be5463a6 100644 --- a/backend/apps/webui/internal/migrations/013_add_user_oauth_sub.py +++ b/backend/apps/webui/internal/migrations/016_add_user_oauth_sub.py @@ -1,4 +1,4 @@ -"""Peewee migrations -- 013_add_user_oauth_sub.py. +"""Peewee migrations -- 016_add_user_oauth_sub.py. Some examples (model - class or model name):: From e011e7b695cfe37b8ad405cd1fc03889358a6398 Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Fri, 21 Jun 2024 14:35:11 +0100 Subject: [PATCH 150/287] fix: set auth cookie during oauth login --- backend/main.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/backend/main.py b/backend/main.py index 42484656c..dabb501b2 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1870,7 +1870,7 @@ async def oauth_login(provider: str, request: Request): @app.get("/oauth/{provider}/callback") -async def oauth_callback(provider: str, request: Request): +async def oauth_callback(provider: str, request: Request, response: Response): if provider not in OAUTH_PROVIDERS: raise HTTPException(404) client = oauth.create_client(provider) @@ -1953,6 +1953,13 @@ async def oauth_callback(provider: str, request: Request): expires_delta=parse_duration(webui_app.state.config.JWT_EXPIRES_IN), ) + # Set the cookie token + response.set_cookie( + key="token", + value=token, + httponly=True, # Ensures the cookie is not accessible via JavaScript + ) + # Redirect back to the frontend with the JWT token redirect_url = f"{request.base_url}auth#token={jwt_token}" return RedirectResponse(url=redirect_url) From 981f384154ea11e7968562644f94e2cfa86494e8 Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Fri, 21 Jun 2024 18:25:19 +0100 Subject: [PATCH 151/287] refac: modify oauth login logic for unique email addresses --- backend/apps/webui/models/users.py | 11 ++--------- backend/main.py | 24 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/backend/apps/webui/models/users.py b/backend/apps/webui/models/users.py index 258bb32be..e3e1842b8 100644 --- a/backend/apps/webui/models/users.py +++ b/backend/apps/webui/models/users.py @@ -122,16 +122,9 @@ class UsersTable: except: return None - def get_user_by_email( - self, email: str, oauth_user: bool = False - ) -> Optional[UserModel]: + def get_user_by_email(self, email: str) -> Optional[UserModel]: try: - conditions = ( - (User.email == email, User.oauth_sub.is_null()) - if not oauth_user - else (User.email == email) - ) - user = User.get(*conditions) + user = User.get(User.email == email) return UserModel(**model_to_dict(user)) except: return None diff --git a/backend/main.py b/backend/main.py index dabb501b2..1ba6ce0f3 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1869,6 +1869,12 @@ async def oauth_login(provider: str, request: Request): return await oauth.create_client(provider).authorize_redirect(request, redirect_uri) +# OAuth login logic is as follows: +# 1. Attempt to find a user with matching subject ID, tied to the provider +# 2. If OAUTH_MERGE_ACCOUNTS_BY_EMAIL is true, find a user with the email address provided via OAuth +# - This is considered insecure in general, as OAuth providers do not always verify email addresses +# 3. If there is no user, and ENABLE_OAUTH_SIGNUP is true, create a user +# - Email addresses are considered unique, so we fail registration if the email address is alreayd taken @app.get("/oauth/{provider}/callback") async def oauth_callback(provider: str, request: Request, response: Response): if provider not in OAUTH_PROVIDERS: @@ -1885,6 +1891,10 @@ async def oauth_callback(provider: str, request: Request, response: Response): if not sub: raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED) provider_sub = f"{provider}@{sub}" + email = user_data.get("email", "").lower() + # We currently mandate that email addresses are provided + if not email: + raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED) # Check if the user exists user = Users.get_user_by_oauth_sub(provider_sub) @@ -1893,10 +1903,7 @@ async def oauth_callback(provider: str, request: Request, response: Response): # If the user does not exist, check if merging is enabled if OAUTH_MERGE_ACCOUNTS_BY_EMAIL.value: # Check if the user exists by email - email = user_data.get("email", "").lower() - if not email: - raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED) - user = Users.get_user_by_email(user_data.get("email", "").lower(), True) + user = Users.get_user_by_email(email) if user: # Update the user with the new oauth sub Users.update_user_oauth_sub_by_id(user.id, provider_sub) @@ -1904,6 +1911,11 @@ async def oauth_callback(provider: str, request: Request, response: Response): if not user: # If the user does not exist, check if signups are enabled if ENABLE_OAUTH_SIGNUP.value: + # Check if an existing user with the same email already exists + existing_user = Users.get_user_by_email(user_data.get("email", "").lower()) + if existing_user: + raise HTTPException(400, detail=ERROR_MESSAGES.EMAIL_TAKEN) + picture_url = user_data.get("picture", "") if picture_url: # Download the profile image into a base64 string @@ -1920,12 +1932,12 @@ async def oauth_callback(provider: str, request: Request, response: Response): guessed_mime_type = "image/jpeg" picture_url = f"data:{guessed_mime_type};base64,{base64_encoded_picture}" except Exception as e: - log.error(f"Profile image download error: {e}") + log.error(f"Error downloading profile image '{picture_url}': {e}") picture_url = "" if not picture_url: picture_url = "/user.png" user = Auths.insert_new_auth( - email=user_data.get("email", "").lower(), + email=email, password=get_password_hash( str(uuid.uuid4()) ), # Random password, not used From 0c7df2cde224f02086e355e66ff7413aec3bcc44 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sat, 22 Jun 2024 00:17:34 +0800 Subject: [PATCH 152/287] Improve Traditional Chinese(zh-TW) locale --- src/lib/i18n/locales/zh-TW/translation.json | 480 ++++++++++---------- 1 file changed, 240 insertions(+), 240 deletions(-) diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index a99ba68ff..b5f2a022d 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -4,36 +4,36 @@ "(e.g. `sh webui.sh --api`)": "(例如 `sh webui.sh --api`)", "(latest)": "(最新版)", "{{ models }}": "{{ models }}", - "{{ owner }}: You cannot delete a base model": "{{ owner }}:你無法刪除基本模型", + "{{ owner }}: You cannot delete a base model": "{{ owner }}:您無法刪除基礎模型", "{{modelName}} is thinking...": "{{modelName}} 正在思考...", "{{user}}'s Chats": "{{user}} 的聊天", - "{{webUIName}} Backend Required": "需要 {{webUIName}} 後台", - "A task model is used when performing tasks such as generating titles for chats and web search queries": "在執行任務時使用任務模型,例如為聊天和網絡搜索查詢生成標題", + "{{webUIName}} Backend Required": "需要 {{webUIName}} 後端", + "A task model is used when performing tasks such as generating titles for chats and web search queries": "在執行任務時使用任務模型,例如為聊天和網頁搜尋查詢生成標題", "a user": "使用者", "About": "關於", "Account": "帳號", - "Account Activation Pending": "", - "Accurate information": "準確信息", - "Active Users": "", + "Account Activation Pending": "帳號啟用中", + "Accurate information": "準確資訊", + "Active Users": "活躍使用者", "Add": "新增", "Add a model id": "新增模型 ID", - "Add a short description about what this model does": "為這個模型添加一個簡短描述", - "Add a short title for this prompt": "為這個提示詞添加一個簡短的標題", + "Add a short description about what this model does": "為這個模型新增一個簡短描述", + "Add a short title for this prompt": "為這個提示詞新增一個簡短的標題", "Add a tag": "新增標籤", - "Add custom prompt": "新增自定義提示詞", + "Add custom prompt": "新增自訂提示詞", "Add Docs": "新增文件", "Add Files": "新增檔案", "Add Memory": "新增記憶", "Add message": "新增訊息", "Add Model": "新增模型", "Add Tags": "新增標籤", - "Add User": "新增用户", + "Add User": "新增使用者", "Adjusting these settings will apply changes universally to all users.": "調整這些設定將對所有使用者進行更改。", "admin": "管理員", - "Admin": "", + "Admin": "管理員", "Admin Panel": "管理員控制台", "Admin Settings": "管理設定", - "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.": "管理員隨時可以使用所有工具;使用者需要在工作區中為每個模型分配工具。", "Advanced Parameters": "進階參數", "Advanced Params": "進階參數", "all": "所有", @@ -41,43 +41,43 @@ "All Users": "所有使用者", "Allow": "允許", "Allow Chat Deletion": "允許刪除聊天紀錄", - "Allow non-local voices": "", - "Allow User Location": "", - "alphanumeric characters and hyphens": "英文字母、數字(0~9)和連字符(-)", + "Allow non-local voices": "允許非本機語音", + "Allow User Location": "允許使用者位置", + "alphanumeric characters and hyphens": "英文字母、數字(0~9)和連字元(-)", "Already have an account?": "已經有帳號了嗎?", "an assistant": "助手", "and": "和", - "and create a new shared link.": "創建一個新的共享連結。", + "and create a new shared link.": "並建立一個新的共享連結。", "API Base URL": "API 基本 URL", - "API Key": "API Key", - "API Key created.": "API Key", - "API keys": "API Keys", - "April": "4月", - "Archive": "存檔", - "Archive All Chats": "存檔所有聊天紀錄", - "Archived Chats": "聊天記錄存檔", + "API Key": "API 金鑰", + "API Key created.": "API 金鑰已建立。", + "API keys": "API 金鑰", + "April": "4 月", + "Archive": "封存", + "Archive All Chats": "封存所有聊天紀錄", + "Archived Chats": "已封存的聊天紀錄", "are allowed - Activate this command by typing": "是允許的 - 透過輸入", - "Are you sure?": "你確定嗎?", + "Are you sure?": "您確定嗎?", "Attach file": "附加檔案", "Attention to detail": "細節精確", "Audio": "音訊", - "August": "8月", + "August": "8 月", "Auto-playback response": "自動播放回答", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 基本 URL", "AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基本 URL", - "available!": "可以使用!", + "available!": "可用!", "Back": "返回", "Bad Response": "錯誤回應", "Banners": "橫幅", - "Base Model (From)": "基本模型(來自)", - "Batch Size (num_batch)": "", + "Base Model (From)": "基礎模型(來自)", + "Batch Size (num_batch)": "批次大小(num_batch)", "before": "前", "Being lazy": "懶人模式", - "Brave Search API Key": "搜尋 API Key", - "Bypass SSL verification for Websites": "跳過 SSL 驗證", - "Call": "", - "Call feature is not supported when using Web STT engine": "", - "Camera": "", + "Brave Search API Key": "Brave 搜尋 API 金鑰", + "Bypass SSL verification for Websites": "跳過網站的 SSL 驗證", + "Call": "呼叫", + "Call feature is not supported when using Web STT engine": "使用 Web STT 引擎時不支援呼叫功能", + "Camera": "相機", "Cancel": "取消", "Capabilities": "功能", "Change Password": "修改密碼", @@ -85,27 +85,27 @@ "Chat Background Image": "", "Chat Bubble UI": "聊天氣泡介面", "Chat direction": "聊天方向", - "Chat History": "聊天紀錄功能", - "Chat History is off for this browser.": "此瀏覽器已關閉聊天紀錄功能。", + "Chat History": "聊天紀錄", + "Chat History is off for this browser.": "此瀏覽器已關閉聊天紀錄。", "Chats": "聊天", "Check Again": "重新檢查", "Check for updates": "檢查更新", "Checking for updates...": "正在檢查更新...", "Choose a model before saving...": "儲存前選擇一個模型...", - "Chunk Overlap": "Chunk Overlap", - "Chunk Params": "Chunk 參數", - "Chunk Size": "Chunk 大小", + "Chunk Overlap": "區塊重疊", + "Chunk Params": "區塊參數", + "Chunk Size": "區塊大小", "Citation": "引文", - "Clear memory": "", - "Click here for help.": "點擊這裡尋找幫助。", - "Click here to": "點擊這裡", - "Click here to download user import template file.": "", - "Click here to select": "點擊這裡選擇", - "Click here to select a csv file.": "點擊這裡選擇 csv 檔案。", - "Click here to select a py file.": "", - "Click here to select documents.": "點擊這裡選擇文件。", - "click here.": "點擊這裡。", - "Click on the user role button to change a user's role.": "點擊使用者 Role 按鈕以更改使用者的 Role。", + "Clear memory": "清除記憶", + "Click here for help.": "點選這裡尋求幫助。", + "Click here to": "點選這裡", + "Click here to download user import template file.": "點選這裡下載使用者匯入的範本", + "Click here to select": "點選這裡選擇", + "Click here to select a csv file.": "點選這裡選擇 csv 檔案。", + "Click here to select a py file.": "點選這裡選擇 py 檔案。", + "Click here to select documents.": "點選這裡選擇文件。", + "click here.": "點選這裡。", + "Click on the user role button to change a user's role.": "點選使用者角色按鈕以更改使用者的角色。", "Clone": "複製", "Close": "關閉", "Collection": "收藏", @@ -118,7 +118,7 @@ "Confirm Password": "確認密碼", "Confirm your action": "", "Connections": "連線", - "Contact Admin for WebUI Access": "", + "Contact Admin for WebUI Access": "聯絡管理員以取得 WebUI 存取權", "Content": "內容", "Context Length": "上下文長度", "Continue Response": "繼續回答", @@ -130,8 +130,8 @@ "Copying to clipboard was successful!": "成功複製到剪貼簿!", "Create a model": "建立模型", "Create Account": "建立帳號", - "Create new key": "建立新密鑰", - "Create new secret key": "建立新密鑰", + "Create new key": "建立新金鑰", + "Create new secret key": "建立新金鑰", "Created at": "建立於", "Created At": "建立於", "Created by": "", @@ -139,18 +139,18 @@ "Current Model": "目前模型", "Current Password": "目前密碼", "Custom": "自訂", - "Customize models for a specific purpose": "為特定目的自定義模型", + "Customize models for a specific purpose": "為特定目的自訂模型", "Dark": "暗色", - "Dashboard": "", + "Dashboard": "儀表板", "Database": "資料庫", - "December": "12月", + "December": "12 月", "Default": "預設", "Default (Automatic1111)": "預設(Automatic1111)", "Default (SentenceTransformers)": "預設(SentenceTransformers)", "Default Model": "預設模型", "Default model updated": "預設模型已更新", "Default Prompt Suggestions": "預設提示詞建議", - "Default User Role": "預設用戶 Role", + "Default User Role": "預設使用者角色", "delete": "刪除", "Delete": "刪除", "Delete a model": "刪除一個模型", @@ -159,178 +159,178 @@ "Delete Chat": "刪除聊天紀錄", "Delete chat?": "", "delete this link": "刪除此連結", - "Delete User": "刪除用戶", + "Delete User": "刪除使用者", "Deleted {{deleteModelTag}}": "已刪除 {{deleteModelTag}}", "Deleted {{name}}": "已刪除 {{name}}", "Description": "描述", - "Didn't fully follow instructions": "無法完全遵循指示", + "Didn't fully follow instructions": "未完全遵循指示", "Discover a model": "發現新模型", "Discover a prompt": "發現新提示詞", - "Discover, download, and explore custom prompts": "發現、下載並探索他人設置的提示詞", - "Discover, download, and explore model presets": "發現、下載並探索他人設置的模型", - "Dismissible": "", - "Display Emoji in Call": "", - "Display the username instead of You in the Chat": "在聊天中顯示使用者名稱而不是「你」", + "Discover, download, and explore custom prompts": "發現、下載並探索自訂提示詞", + "Discover, download, and explore model presets": "發現、下載並探索模型預設值", + "Dismissible": "可忽略", + "Display Emoji in Call": "在呼叫中顯示表情符號", + "Display the username instead of You in the Chat": "在聊天中顯示使用者名稱而不是「您」", "Document": "文件", "Document Settings": "文件設定", - "Documentation": "", + "Documentation": "文件", "Documents": "文件", - "does not make any external connections, and your data stays securely on your locally hosted server.": "不會與外部溝通,你的數據會安全地留在你的本機伺服器上。", + "does not make any external connections, and your data stays securely on your locally hosted server.": "不會與外部連線,您的資料會安全地留在您的本機伺服器上。", "Don't Allow": "不允許", "Don't have an account?": "還沒有註冊帳號?", "Don't like the style": "不喜歡這個樣式?", "Download": "下載", "Download canceled": "下載已取消", "Download Database": "下載資料庫", - "Drop any files here to add to the conversation": "拖拽文件到此處以新增至對話", + "Drop any files here to add to the conversation": "拖拽任意檔案到此處以新增至對話", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s', '10m'。有效的時間單位為 's', 'm', 'h'。", "Edit": "編輯", "Edit Doc": "編輯文件", - "Edit Memory": "", + "Edit Memory": "編輯記憶", "Edit User": "編輯使用者", "Email": "電子郵件", - "Embedding Batch Size": "", + "Embedding Batch Size": "嵌入批次大小", "Embedding Model": "嵌入模型", "Embedding Model Engine": "嵌入模型引擎", "Embedding model set to \"{{embedding_model}}\"": "嵌入模型已設定為 \"{{embedding_model}}\"", - "Enable Chat History": "啟用聊天歷史", - "Enable Community Sharing": "啟用社區分享", + "Enable Chat History": "啟用聊天紀錄", + "Enable Community Sharing": "啟用社群分享", "Enable New Sign Ups": "允許註冊新帳號", - "Enable Web Search": "啟用網絡搜索", - "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "請確保你的 CSV 檔案包含這四個欄位,並按照此順序:名稱、電子郵件、密碼、角色。", + "Enable Web Search": "啟用網頁搜尋", + "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "請確保您的 CSV 檔案包含這四個欄位,並按照此順序:名稱、電子郵件、密碼、角色。", "Enter {{role}} message here": "在這裡輸入 {{role}} 訊息", "Enter a detail about yourself for your LLMs to recall": "輸入 LLM 記憶的詳細內容", - "Enter Brave Search API Key": "輸入 Brave Search API Key", - "Enter Chunk Overlap": "輸入 Chunk Overlap", - "Enter Chunk Size": "輸入 Chunk 大小", + "Enter Brave Search API Key": "輸入 Brave 搜尋 API 金鑰", + "Enter Chunk Overlap": "輸入區塊重疊", + "Enter Chunk Size": "輸入區塊大小", "Enter Github Raw URL": "輸入 Github Raw URL", - "Enter Google PSE API Key": "輸入 Google PSE API Key", - "Enter Google PSE Engine Id": "輸入 Google PSE Engine Id", + "Enter Google PSE API Key": "輸入 Google PSE API 金鑰", + "Enter Google PSE Engine Id": "輸入 Google PSE 引擎 ID", "Enter Image Size (e.g. 512x512)": "輸入圖片大小(例如 512x512)", "Enter language codes": "輸入語言代碼", "Enter model tag (e.g. {{modelTag}})": "輸入模型標籤(例如 {{modelTag}})", "Enter Number of Steps (e.g. 50)": "輸入步數(例如 50)", "Enter Score": "輸入分數", "Enter Searxng Query URL": "輸入 Searxng 查詢 URL", - "Enter Serper API Key": "輸入 Serper API Key", - "Enter Serply API Key": "", - "Enter Serpstack API Key": "輸入 Serpstack API Key", + "Enter Serper API Key": "輸入 Serper API 金鑰", + "Enter Serply API Key": "輸入 Serply API 金鑰", + "Enter Serpstack API Key": "輸入 Serpstack API 金鑰", "Enter stop sequence": "輸入停止序列", - "Enter Tavily API Key": "", + "Enter Tavily API Key": "輸入 Tavily API 金鑰", "Enter Top K": "輸入 Top K", "Enter URL (e.g. http://127.0.0.1:7860/)": "輸入 URL(例如 http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "輸入 URL(例如 http://localhost:11434)", - "Enter Your Email": "輸入你的電子郵件", - "Enter Your Full Name": "輸入你的全名", - "Enter Your Password": "輸入你的密碼", - "Enter Your Role": "輸入你的角色", + "Enter Your Email": "輸入您的電子郵件", + "Enter Your Full Name": "輸入您的全名", + "Enter Your Password": "輸入您的密碼", + "Enter Your Role": "輸入您的角色", "Error": "錯誤", - "Experimental": "實驗功能", - "Export": "出口", + "Experimental": "實驗性功能", + "Export": "匯出", "Export All Chats (All Users)": "匯出所有聊天紀錄(所有使用者)", - "Export chat (.json)": "", + "Export chat (.json)": "匯出聊天紀錄(.json)", "Export Chats": "匯出聊天紀錄", - "Export Documents Mapping": "匯出文件映射", - "Export Functions": "", + "Export Documents Mapping": "匯出文件對映", + "Export Functions": "匯出功能", "Export Models": "匯出模型", "Export Prompts": "匯出提示詞", - "Export Tools": "", - "External Models": "", - "Failed to create API Key.": "無法創建 API 金鑰。", + "Export Tools": "匯出工具", + "External Models": "外部模型", + "Failed to create API Key.": "無法建立 API 金鑰。", "Failed to read clipboard contents": "無法讀取剪貼簿內容", - "Failed to update settings": "", - "February": "2月", - "Feel free to add specific details": "請自由添加詳細內容。", - "File": "", + "Failed to update settings": "無法更新設定", + "February": "2 月", + "Feel free to add specific details": "請隨意新增詳細內容。", + "File": "檔案", "File Mode": "檔案模式", "File not found.": "找不到檔案。", - "Filters": "", - "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "偽裝偽裝檢測:無法使用頭像作為頭像。預設為預設頭像。", - "Fluidly stream large external response chunks": "流暢地傳輸大型外部響應區塊", + "Filters": "篩選器", + "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "偽造偵測:無法使用初始頭像。預設為預設個人影象。", + "Fluidly stream large external response chunks": "流暢地傳輸大型外部回應區塊", "Focus chat input": "聚焦聊天輸入框", "Followed instructions perfectly": "完全遵循指示", - "Form": "", - "Format your variables using square brackets like this:": "像這樣使用方括號來格式化你的變數:", + "Form": "表單", + "Format your variables using square brackets like this:": "像這樣使用方括號來格式化您的變數:", "Frequency Penalty": "頻率懲罰", - "Functions": "", + "Functions": "功能", "General": "常用", "General Settings": "常用設定", - "Generate Image": "", - "Generating search query": "生成搜索查詢", - "Generation Info": "生成信息", + "Generate Image": "生成圖片", + "Generating search query": "生成搜尋查詢", + "Generation Info": "生成資訊", "Good Response": "優秀的回應", - "Google PSE API Key": "Google PSE API Key", - "Google PSE Engine Id": "Google PSE Engine Id", + "Google PSE API Key": "Google PSE API 金鑰", + "Google PSE Engine Id": "Google PSE 引擎 ID", "h:mm a": "h:mm a", "has no conversations.": "沒有對話", - "Hello, {{name}}": "你好,{{name}}", + "Hello, {{name}}": "您好,{{name}}", "Help": "幫助", "Hide": "隱藏", - "Hide Model": "", - "How can I help you today?": "今天能為你做什麼?", - "Hybrid Search": "混合搜索", - "Image Generation (Experimental)": "圖像生成(實驗功能)", - "Image Generation Engine": "圖像生成引擎", + "Hide Model": "隱藏模型", + "How can I help you today?": "今天能為您做些什麼?", + "Hybrid Search": "混合搜尋", + "Image Generation (Experimental)": "影像生成(實驗性功能)", + "Image Generation Engine": "影像生成引擎", "Image Settings": "圖片設定", "Images": "圖片", "Import Chats": "匯入聊天紀錄", - "Import Documents Mapping": "匯入文件映射", - "Import Functions": "", + "Import Documents Mapping": "匯入文件對映", + "Import Functions": "匯入功能", "Import Models": "匯入模型", "Import Prompts": "匯入提示詞", - "Import Tools": "", - "Include `--api` flag when running stable-diffusion-webui": "在運行 stable-diffusion-webui 時加上 `--api` 標誌", + "Import Tools": "匯入工具", + "Include `--api` flag when running stable-diffusion-webui": "在執行 stable-diffusion-webui 時加上 `--api` 標誌", "Info": "資訊", "Input commands": "輸入命令", "Install from Github URL": "從 Github URL 安裝", - "Instant Auto-Send After Voice Transcription": "", + "Instant Auto-Send After Voice Transcription": "語音轉錄後立即自動傳送", "Interface": "介面", "Invalid Tag": "無效標籤", - "January": "1月", - "join our Discord for help.": "加入我們的 Discord 尋找幫助。", + "January": "1 月", + "join our Discord for help.": "加入我們的 Discord 尋求幫助。", "JSON": "JSON", "JSON Preview": "JSON 預覽", - "July": "7月", - "June": "6月", + "July": "7 月", + "June": "6 月", "JWT Expiration": "JWT 過期時間", "JWT Token": "JWT Token", "Keep Alive": "保持活躍", "Keyboard shortcuts": "鍵盤快速鍵", - "Knowledge": "", + "Knowledge": "知識", "Language": "語言", "Last Active": "最後活動", - "Last Modified": "", + "Last Modified": "最後修改", "Light": "亮色", - "Listening...": "", + "Listening...": "正在聆聽...", "LLMs can make mistakes. Verify important information.": "LLM 可能會產生錯誤。請驗證重要資訊。", - "Local Models": "", + "Local Models": "本機模型", "LTR": "LTR", - "Made by OpenWebUI Community": "由 OpenWebUI 社區製作", + "Made by OpenWebUI Community": "由 OpenWebUI 社群製作", "Make sure to enclose them with": "請確保變數有被以下符號框住:", - "Manage": "", - "Manage Models": "管理模組", + "Manage": "管理", + "Manage Models": "管理模型", "Manage Ollama Models": "管理 Ollama 模型", - "Manage Pipelines": "管理管道", - "March": "3月", + "Manage Pipelines": "管理管線", + "March": "3 月", "Max Tokens (num_predict)": "最大 Token(num_predict)", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同時下載 3 個模型。請稍後再試。", - "May": "5月", + "May": "5 月", "Memories accessible by LLMs will be shown here.": "LLM 記憶將會顯示在此處。", "Memory": "記憶", - "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "創建連結後發送的訊息將不會被共享。具有 URL 的用戶將會能夠檢視共享的聊天。", - "Minimum Score": "最小分數", + "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "建立連結後傳送的訊息將不會被共享。具有 URL 的使用者將會能夠檢視共享的聊天。", + "Minimum Score": "最低分數", "Mirostat": "Mirostat", "Mirostat Eta": "Mirostat Eta", "Mirostat Tau": "Mirostat Tau", "MMMM DD, YYYY": "MMMM DD, YYYY", "MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm", - "MMMM DD, YYYY hh:mm:ss A": "", + "MMMM DD, YYYY hh:mm:ss A": "MMMM DD, YYYY hh:mm:ss A", "Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' 模型已成功下載。", "Model '{{modelTag}}' is already in queue for downloading.": "'{{modelTag}}' 模型已經在下載佇列中。", "Model {{modelId}} not found": "找不到 {{modelId}} 模型", "Model {{modelName}} is not vision capable": "{{modelName}} 模型不適用於視覺", "Model {{name}} is now {{status}}": "{{name}} 模型現在是 {{status}}", - "Model filesystem path detected. Model shortname is required for update, cannot continue.": "模型文件系統路徑已檢測。需要更新模型短名,無法繼續。", + "Model filesystem path detected. Model shortname is required for update, cannot continue.": "已偵測到模型檔案系統路徑。需要更新模型簡稱,無法繼續。", "Model ID": "模型 ID", "Model not selected": "未選擇模型", "Model Params": "模型參數", @@ -344,32 +344,32 @@ "Name your model": "請輸入模型名稱", "New Chat": "新增聊天", "New Password": "新密碼", - "No documents found": "", + "No documents found": "找不到文件", "No results found": "沒有找到結果", - "No search query generated": "沒有生成搜索查詢", + "No search query generated": "沒有生成搜尋查詢", "No source available": "沒有可用的來源", "None": "無", - "Not factually correct": "與真實資訊不相符", - "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "註:如果設置最低分數,則搜索將只返回分數大於或等於最低分數的文檔。", - "Notifications": "桌面通知", - "November": "11月", - "num_thread (Ollama)": "num_thread(奧拉馬)", + "Not factually correct": "與真實資訊不符", + "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "註:如果設定最低分數,則搜尋將只返回分數大於或等於最低分數的文件。", + "Notifications": "通知", + "November": "11 月", + "num_thread (Ollama)": "num_thread(Ollama)", "October": "10 月", "Off": "關閉", "Okay, Let's Go!": "好的,啟動吧!", - "OLED Dark": "`", + "OLED Dark": "OLED 深色", "Ollama": "Ollama", "Ollama API": "Ollama API", - "Ollama API disabled": "Ollama API 已禁用", - "Ollama API is disabled": "", + "Ollama API disabled": "Ollama API 已停用", + "Ollama API is disabled": "Ollama API 已停用", "Ollama Version": "Ollama 版本", "On": "開啟", "Only": "僅有", - "Only alphanumeric characters and hyphens are allowed in the command string.": "命令字串中只能包含英文字母、數字(0~9)和連字符(-)。", - "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.": "哎呀!請稍等!你的文件還在處理中。我們正最佳化文件,請耐心等待,一旦準備好,我們會通知你。", + "Only alphanumeric characters and hyphens are allowed in the command string.": "命令字串中只能包含英文字母、數字(0~9)和連字元(-)。", + "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "哎呀!請稍等!您的文件還在處理中。我們正最佳化文件,請耐心等待,一旦準備好,我們會通知您。", "Oops! Looks like the URL is invalid. Please double-check and try again.": "哎呀!看起來 URL 無效。請仔細檢查後再試一次。", - "Oops! There was an error in the previous response. Please try again or contact admin.": "", - "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "哎呀!你正在使用不支援的方法(僅有前台)。請從後台提供 WebUI。", + "Oops! There was an error in the previous response. Please try again or contact admin.": "哎呀!先前的回應發生錯誤。請重試或聯絡管理員", + "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "哎呀!您正在使用不支援的方法(僅有前端)。請從後端提供 WebUI。", "Open": "開啟", "Open AI": "Open AI", "Open AI (Dall-E)": "Open AI (Dall-E)", @@ -383,22 +383,22 @@ "Other": "其他", "Password": "密碼", "PDF document (.pdf)": "PDF 文件 (.pdf)", - "PDF Extract Images (OCR)": "PDF 圖像擷取(OCR 光學文字辨識)", + "PDF Extract Images (OCR)": "PDF 影像擷取(OCR 光學文字辨識)", "pending": "待審查", - "Permission denied when accessing media devices": "", - "Permission denied when accessing microphone": "", + "Permission denied when accessing media devices": "存取媒體裝置時被拒絕權限", + "Permission denied when accessing microphone": "存取麥克風時被拒絕權限", "Permission denied when accessing microphone: {{error}}": "存取麥克風時被拒絕權限:{{error}}", "Personalization": "個人化", "Pipelines": "管線", - "Pipelines Valves": "管線阀门", + "Pipelines Valves": "管線閥門", "Plain text (.txt)": "純文字 (.txt)", "Playground": "AI 對話遊樂場", "Positive attitude": "積極態度", "Previous 30 days": "前 30 天", "Previous 7 days": "前 7 天", - "Profile Image": "個人圖像", + "Profile Image": "個人影像", "Prompt": "提示詞", - "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "提示詞(例如:告訴我關於羅馬帝國的趣味事)", + "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "提示詞(例如:告訴我關於羅馬帝國的一些趣事)", "Prompt Content": "提示詞內容", "Prompt suggestions": "提示詞建議", "Prompts": "提示詞", @@ -408,32 +408,32 @@ "RAG Template": "RAG 範例", "Read Aloud": "讀出", "Record voice": "錄音", - "Redirecting you to OpenWebUI Community": "將你重新導向到 OpenWebUI 社群", - "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", - "Refused when it shouldn't have": "拒絕時不該拒絕", + "Redirecting you to OpenWebUI Community": "將您重新導向到 OpenWebUI 社群", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "將自己稱為「使用者」(例如,「使用者正在學習西班牙語」)", + "Refused when it shouldn't have": "不該拒絕時拒絕了", "Regenerate": "重新生成", "Release Notes": "發布說明", "Remove": "移除", "Remove Model": "移除模型", - "Rename": "重命名", + "Rename": "重新命名", "Repeat Last N": "重複最後 N 次", "Request Mode": "請求模式", "Reranking Model": "重新排序模型", - "Reranking model disabled": "重新排序模型已禁用", + "Reranking model disabled": "重新排序模型已停用", "Reranking model set to \"{{reranking_model}}\"": "重新排序模型設定為 \"{{reranking_model}}\"", - "Reset": "", - "Reset Upload Directory": "", - "Reset Vector Storage": "重置向量儲存空間", + "Reset": "重設", + "Reset Upload Directory": "重設上傳目錄", + "Reset Vector Storage": "重設向量儲存空間", "Response AutoCopy to Clipboard": "自動複製回答到剪貼簿", - "Role": "Role", + "Role": "角色", "Rosé Pine": "玫瑰松", "Rosé Pine Dawn": "黎明玫瑰松", "RTL": "RTL", - "Running": "", + "Running": "運作中", "Save": "儲存", "Save & Create": "儲存並建立", "Save & Update": "儲存並更新", - "Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "現已不支援將聊天紀錄儲存到瀏覽器儲存空間中。請點擊下面的按鈕下載並刪除你的聊天記錄。別擔心,你可以通過以下方式輕鬆地重新匯入你的聊天記錄到後台", + "Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "現已不支援將聊天紀錄儲存到瀏覽器儲存空間中。請點選下面的按鈕下載並刪除您的聊天記錄。別擔心,您可以透過以下方式輕鬆地重新匯入您的聊天記錄到後端", "Scan": "掃描", "Scan complete!": "掃描完成!", "Scan for documents from {{path}}": "從 {{path}} 掃描文件", @@ -441,37 +441,37 @@ "Search a model": "搜尋模型", "Search Chats": "搜尋聊天", "Search Documents": "搜尋文件", - "Search Functions": "", + "Search Functions": "搜尋功能", "Search Models": "搜尋模型", "Search Prompts": "搜尋提示詞", - "Search Query Generation Prompt": "", - "Search Query Generation Prompt Length Threshold": "", + "Search Query Generation Prompt": "搜尋查詢生成提示詞", + "Search Query Generation Prompt Length Threshold": "搜尋查詢生成提示詞長度閾值", "Search Result Count": "搜尋結果數量", - "Search Tools": "", - "Searched {{count}} sites_other": "掃描 {{count}} 個網站_其他", - "Searching \"{{searchQuery}}\"": "", + "Search Tools": "搜尋工具", + "Searched {{count}} sites_other": "搜尋了 {{count}} 個網站", + "Searching \"{{searchQuery}}\"": "正在搜尋 \"{{searchQuery}}\"", "Searxng Query URL": "Searxng 查詢 URL", - "See readme.md for instructions": "查看 readme.md 獲取指南", - "See what's new": "查看最新內容", + "See readme.md for instructions": "檢視 readme.md 取得指南", + "See what's new": "檢視最新內容", "Seed": "種子", "Select a base model": "選擇基礎模型", - "Select a engine": "", + "Select a engine": "選擇引擎", "Select a mode": "選擇模式", "Select a model": "選擇一個模型", - "Select a pipeline": "選擇管道", - "Select a pipeline url": "選擇管道 URL", - "Select an Ollama instance": "選擇 Ollama 實例", - "Select Documents": "", + "Select a pipeline": "選擇管線", + "Select a pipeline url": "選擇管線 URL", + "Select an Ollama instance": "選擇 Ollama 執行個體", + "Select Documents": "選擇文件", "Select model": "選擇模型", - "Select only one model to call": "", - "Selected model(s) do not support image inputs": "已選擇模型不支持圖像輸入", + "Select only one model to call": "僅選擇一個模型來呼叫", + "Selected model(s) do not support image inputs": "已選擇模型不支援影像輸入", "Send": "傳送", "Send a Message": "傳送訊息", "Send message": "傳送訊息", - "September": "九月", - "Serper API Key": "Serper API Key", - "Serply API Key": "", - "Serpstack API Key": "Serpstack API Key", + "September": "9 月", + "Serper API Key": "Serper API 金鑰", + "Serply API Key": "Serply API 金鑰", + "Serpstack API Key": "Serpstack API 金鑰", "Server connection verified": "已驗證伺服器連線", "Set as default": "設為預設", "Set Default Model": "設定預設模型", @@ -483,14 +483,14 @@ "Set Voice": "設定語音", "Settings": "設定", "Settings saved successfully!": "成功儲存設定", - "Settings updated successfully": "", + "Settings updated successfully": "設定更新成功", "Share": "分享", "Share Chat": "分享聊天", "Share to OpenWebUI Community": "分享到 OpenWebUI 社群", "short-summary": "簡短摘要", "Show": "顯示", - "Show Admin Details in Account Pending Overlay": "", - "Show Model": "", + "Show Admin Details in Account Pending Overlay": "在帳號待審覆蓋層中顯示管理員詳細資訊", + "Show Model": "顯示模型", "Show shortcuts": "顯示快速鍵", "Showcased creativity": "展示創造性", "sidebar": "側邊欄", @@ -502,79 +502,79 @@ "Speech recognition error: {{error}}": "語音識別錯誤:{{error}}", "Speech-to-Text Engine": "語音轉文字引擎", "Stop Sequence": "停止序列", - "STT Model": "", + "STT Model": "STT 模型", "STT Settings": "語音轉文字設定", "Submit": "提交", - "Subtitle (e.g. about the Roman Empire)": "標題(例如:關於羅馬帝國)", + "Subtitle (e.g. about the Roman Empire)": "副標題(例如:關於羅馬帝國)", "Success": "成功", "Successfully updated.": "更新成功。", "Suggested": "建議", "System": "系統", "System Prompt": "系統提示詞", "Tags": "標籤", - "Tap to interrupt": "", - "Tavily API Key": "", + "Tap to interrupt": "點選以中斷", + "Tavily API Key": "Tavily API 金鑰", "Tell us more:": "告訴我們更多:", "Temperature": "溫度", - "Template": "模板", - "Text Completion": "文本補全(Text Completion)", + "Template": "範本", + "Text Completion": "文字補全", "Text-to-Speech Engine": "文字轉語音引擎", "Tfs Z": "Tfs Z", - "Thanks for your feedback!": "感謝你的回饋!", + "Thanks for your feedback!": "感謝您的回饋!", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "分數應該介於 0.0(0%)和 1.0(100%)之間。", "Theme": "主題", - "Thinking...": "", - "This action cannot be undone. Do you wish to continue?": "", - "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "這確保你寶貴的對話安全地儲存到你的後台資料庫。謝謝!", - "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", + "Thinking...": "正在思考...", + "This action cannot be undone. Do you wish to continue?": "此動作無法被復原。您想要繼續進行嗎?", + "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "這確保您寶貴的對話安全地儲存到您的後端資料庫。謝謝!", + "This is an experimental feature, it may not function as expected and is subject to change at any time.": "這是一個實驗性功能,可能無法如預期運作,並且隨時可能更改。", "This setting does not sync across browsers or devices.": "此設定不會在瀏覽器或裝置間同步。", "This will delete": "", "Thorough explanation": "詳細說明", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:透過在每次替換後在聊天輸入框中按 Tab 鍵連續更新多個變數。", "Title": "標題", "Title (e.g. Tell me a fun fact)": "標題(例如:告訴我一個有趣的事)", - "Title Auto-Generation": "自動生成標題", + "Title Auto-Generation": "自動產生標題", "Title cannot be an empty string.": "標題不能為空字串", - "Title Generation Prompt": "自動生成標題的提示詞", + "Title Generation Prompt": "自動產生標題的提示詞", "to": "到", - "To access the available model names for downloading,": "若想查看可供下載的模型名稱,", - "To access the GGUF models available for downloading,": "若想查看可供下載的 GGUF 模型名稱,", - "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", - "To add documents here, upload them to the \"Documents\" workspace first.": "", + "To access the available model names for downloading,": "若想檢視可供下載的模型名稱,", + "To access the GGUF models available for downloading,": "若想檢視可供下載的 GGUF 模型名稱,", + "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "若要存取 WebUI,請聯絡管理員。管理員可以從管理面板管理使用者狀態。", + "To add documents here, upload them to the \"Documents\" workspace first.": "若要在此新增文件,請先將它們上傳到「文件」工作區。", "to chat input.": "到聊天輸入框來啟動此命令。", - "To select filters here, add them to the \"Functions\" workspace first.": "", - "To select toolkits here, add them to the \"Tools\" workspace first.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "若要在此選擇篩選器,請先將它們新增到「功能」工作區。", + "To select toolkits here, add them to the \"Tools\" workspace first.": "若要在此選擇工具包,請先將它們新增到「工具」工作區。", "Today": "今天", "Toggle settings": "切換設定", "Toggle sidebar": "切換側邊欄", - "Tokens To Keep On Context Refresh (num_keep)": "", - "Tools": "", + "Tokens To Keep On Context Refresh (num_keep)": "上下文重新整理時保留的 Token 數量(num_keep)", + "Tools": "工具", "Top K": "Top K", "Top P": "Top P", "Trouble accessing Ollama?": "存取 Ollama 時遇到問題?", - "TTS Model": "", - "TTS Settings": "文字轉語音設定", - "TTS Voice": "", + "TTS Model": "文字轉語音(TTS)模型", + "TTS Settings": "文字轉語音(TTS)設定", + "TTS Voice": "文字轉語音(TTS)聲調", "Type": "類型", "Type Hugging Face Resolve (Download) URL": "輸入 Hugging Face 解析後的(下載)URL", "Uh-oh! There was an issue connecting to {{provider}}.": "哎呀!連線到 {{provider}} 時出現問題。", - "UI": "", - "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", - "Update": "", + "UI": "使用者界面", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "未知的檔案類型 '{{file_type}}'。但仍會繼續上傳。", + "Update": "更新", "Update and Copy Link": "更新並複製連結", "Update password": "更新密碼", - "Updated at": "", - "Upload": "", + "Updated at": "更新於", + "Upload": "上傳", "Upload a GGUF model": "上傳一個 GGUF 模型", - "Upload Files": "上傳文件", - "Upload Pipeline": "", + "Upload Files": "上傳檔案", + "Upload Pipeline": "上傳管線", "Upload Progress": "上傳進度", "URL Mode": "URL 模式", - "Use '#' in the prompt input to load and select your documents.": "在輸入框中輸入 '#' 以載入並選擇你的文件。", + "Use '#' in the prompt input to load and select your documents.": "在輸入框中輸入 '#' 以載入並選擇您的文件。", "Use Gravatar": "使用 Gravatar", - "Use Initials": "使用初始头像", - "use_mlock (Ollama)": "use_mlock(奧拉馬)", - "use_mmap (Ollama)": "use_mmap (Ollama)", + "Use Initials": "使用初始頭像", + "use_mlock (Ollama)": "use_mlock(Ollama)", + "use_mmap (Ollama)": "use_mmap(Ollama)", "user": "使用者", "User Permissions": "使用者權限", "Users": "使用者", @@ -585,32 +585,32 @@ "Version": "版本", "Voice": "", "Warning": "警告", - "Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果更新或更改你的嵌入模型,則需要重新導入所有文件", + "Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果更新或更改您的嵌入模型,則需要重新匯入所有文件", "Web": "網頁", - "Web API": "", - "Web Loader Settings": "Web 載入器設定", - "Web Params": "Web 參數", - "Web Search": "Web 搜尋", - "Web Search Engine": "Web 搜尋引擎", + "Web API": "網頁 API", + "Web Loader Settings": "網頁載入器設定", + "Web Params": "網頁參數", + "Web Search": "網頁搜尋", + "Web Search Engine": "網頁搜尋引擎", "Webhook URL": "Webhook URL", "WebUI Settings": "WebUI 設定", "WebUI will make requests to": "WebUI 將會存取", "What’s New in": "全新內容", "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "當歷史被關閉時,這個瀏覽器上的新聊天將不會出現在任何裝置的歷史記錄中", - "Whisper (Local)": "", - "Widescreen Mode": "", + "Whisper (Local)": "Whisper(本地)", + "Widescreen Mode": "寬螢幕模式", "Workspace": "工作區", - "Write a prompt suggestion (e.g. Who are you?)": "寫一個提示詞建議(例如:你是誰?)", + "Write a prompt suggestion (e.g. Who are you?)": "寫一個提示詞建議(例如:您是誰?)", "Write a summary in 50 words that summarizes [topic or keyword].": "寫一個 50 字的摘要來概括 [主題或關鍵詞]。", "Yesterday": "昨天", - "You": "你", - "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "", - "You cannot clone a base model": "你不能複製基礎模型", - "You have no archived conversations.": "你沒有任何已封存的對話", - "You have shared this chat": "你已分享此聊天", - "You're a helpful assistant.": "你是一位善於協助他人的助手。", + "You": "您", + "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "您可以透過下方的「管理」按鈕新增記憶,個人化您的 LLM 互動,使其更有幫助並更符合您的需求。", + "You cannot clone a base model": "您不能複製基礎模型", + "You have no archived conversations.": "您沒有任何已封存的對話", + "You have shared this chat": "您已分享此聊天", + "You're a helpful assistant.": "您是一位善於協助他人的助手。", "You're now logged in.": "已登入。", - "Your account status is currently pending activation.": "", + "Your account status is currently pending activation.": "您的帳號狀態目前待啟用。", "Youtube": "Youtube", "Youtube Loader Settings": "Youtube 載入器設定" } From 14fd3a8acabc306edfd509c363f9a243c992f704 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Fri, 21 Jun 2024 11:05:55 -0700 Subject: [PATCH 153/287] refac --- backend/main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/main.py b/backend/main.py index 744c84b6d..737641e2d 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1817,7 +1817,6 @@ async def get_manifest_json(): "start_url": "/", "display": "standalone", "background_color": "#343541", - "theme_color": "#343541", "orientation": "portrait-primary", "icons": [{"src": "/static/logo.png", "type": "image/png", "sizes": "500x500"}], } From b06d7dd56a4b1fbae064209394e1bbd09518d383 Mon Sep 17 00:00:00 2001 From: aleix Date: Fri, 21 Jun 2024 20:52:25 +0200 Subject: [PATCH 154/287] i18n: Update Catalan Translation --- src/lib/i18n/locales/ca-ES/translation.json | 786 ++++++++++---------- 1 file changed, 393 insertions(+), 393 deletions(-) diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index a7757749e..2652add5b 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -1,618 +1,618 @@ { - "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' or '-1' per no caduca mai.", + "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' perquè no caduqui mai.", "(Beta)": "(Beta)", "(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)", "(latest)": "(últim)", "{{ models }}": "{{ models }}", - "{{ owner }}: You cannot delete a base model": "{{ propietari }}: No es pot suprimir un model base", + "{{ owner }}: You cannot delete a base model": "{{ owner }}: No es pot eliminar un model base", "{{modelName}} is thinking...": "{{modelName}} està pensant...", - "{{user}}'s Chats": "{{user}}'s Chats", - "{{webUIName}} Backend Required": "Es requereix Backend de {{webUIName}}", - "A task model is used when performing tasks such as generating titles for chats and web search queries": "Un model de tasca s'utilitza quan es realitzen tasques com ara generar títols per a xats i consultes de cerca web", + "{{user}}'s Chats": "Els xats de {{user}}", + "{{webUIName}} Backend Required": "El Backend de {{webUIName}} és necessari", + "A task model is used when performing tasks such as generating titles for chats and web search queries": "Un model de tasca s'utilitza quan es realitzen tasques com ara generar títols per a xats i consultes de cerca per a la web", "a user": "un usuari", "About": "Sobre", "Account": "Compte", - "Account Activation Pending": "", + "Account Activation Pending": "Activació del compte pendent", "Accurate information": "Informació precisa", - "Active Users": "", + "Active Users": "Usuaris actius", "Add": "Afegir", - "Add a model id": "Afegir un identificador de model", - "Add a short description about what this model does": "Afegiu una breu descripció sobre què fa aquest model", - "Add a short title for this prompt": "Afegeix un títol curt per aquest prompt", + "Add a model id": "Afegeix un identificador de model", + "Add a short description about what this model does": "Afegeix una breu descripció sobre què fa aquest model", + "Add a short title for this prompt": "Afegeix un títol curt per a aquesta indicació", "Add a tag": "Afegeix una etiqueta", - "Add custom prompt": "Afegir un prompt personalitzat", - "Add Docs": "Afegeix Documents", - "Add Files": "Afegeix Arxius", - "Add Memory": "Afegir Memòria", - "Add message": "Afegeix missatge", - "Add Model": "Afegir Model", - "Add Tags": "afegeix etiquetes", - "Add User": "Afegir Usuari", - "Adjusting these settings will apply changes universally to all users.": "Ajustar aquests paràmetres aplicarà canvis de manera universal a tots els usuaris.", + "Add custom prompt": "Afegir una indicació personalitzada", + "Add Docs": "Afegir documents", + "Add Files": "Afegir arxius", + "Add Memory": "Afegir memòria", + "Add message": "Afegir un missatge", + "Add Model": "Afegir un model", + "Add Tags": "Afegir etiquetes", + "Add User": "Afegir un usuari", + "Adjusting these settings will apply changes universally to all users.": "Si ajustes aquesta configuració, els canvis s'aplicaran de manera universal a tots els usuaris.", "admin": "administrador", - "Admin": "", - "Admin Panel": "Panell d'Administració", - "Admin Settings": "Configuració d'Administració", - "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "", - "Advanced Parameters": "Paràmetres Avançats", + "Admin": "Administrador", + "Admin Panel": "Panell d'administració", + "Admin Settings": "Configuració d'administració", + "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Els administradors tenen accés a totes les eines en tot moment; els usuaris necessiten eines assignades per model a l'espai de treball.", + "Advanced Parameters": "Paràmetres avançats", "Advanced Params": "Paràmetres avançats", "all": "tots", - "All Documents": "Tots els Documents", - "All Users": "Tots els Usuaris", - "Allow": "Permet", - "Allow Chat Deletion": "Permet la Supressió del Xat", - "Allow non-local voices": "", - "Allow User Location": "", + "All Documents": "Tots els documents", + "All Users": "Tots els usuaris", + "Allow": "Permetre", + "Allow Chat Deletion": "Permetre la supressió del xat", + "Allow non-local voices": "Permetre veus no locals", + "Allow User Location": "Permetre la ubicació de l'usuari", "alphanumeric characters and hyphens": "caràcters alfanumèrics i guions", "Already have an account?": "Ja tens un compte?", "an assistant": "un assistent", "and": "i", "and create a new shared link.": "i crear un nou enllaç compartit.", "API Base URL": "URL Base de l'API", - "API Key": "Clau de l'API", - "API Key created.": "Clau de l'API creada.", + "API Key": "clau API", + "API Key created.": "clau API creada.", "API keys": "Claus de l'API", "April": "Abril", "Archive": "Arxiu", "Archive All Chats": "Arxiva tots els xats", - "Archived Chats": "Arxiu d'historial de xat", + "Archived Chats": "Xats arxivats", "are allowed - Activate this command by typing": "estan permesos - Activa aquesta comanda escrivint", "Are you sure?": "Estàs segur?", "Attach file": "Adjuntar arxiu", - "Attention to detail": "Detall atent", + "Attention to detail": "Atenció al detall", "Audio": "Àudio", "August": "Agost", - "Auto-playback response": "Resposta de reproducció automàtica", - "AUTOMATIC1111 Base URL": "URL Base AUTOMATIC1111", - "AUTOMATIC1111 Base URL is required.": "Es requereix l'URL Base AUTOMATIC1111.", + "Auto-playback response": "Reproduir la resposta automàticament", + "AUTOMATIC1111 Base URL": "URL Base d'AUTOMATIC1111", + "AUTOMATIC1111 Base URL is required.": "Es requereix l'URL Base d'AUTOMATIC1111.", "available!": "disponible!", "Back": "Enrere", - "Bad Response": "Resposta Erroni", + "Bad Response": "Resposta errònia", "Banners": "Banners", "Base Model (From)": "Model base (des de)", - "Batch Size (num_batch)": "", + "Batch Size (num_batch)": "Mida del lot (num_batch)", "before": "abans", - "Being lazy": "Ser l'estupidez", - "Brave Search API Key": "Clau API Brave Search", - "Bypass SSL verification for Websites": "Desactivar la verificació SSL per a l'accés a l'Internet", - "Call": "", - "Call feature is not supported when using Web STT engine": "", - "Camera": "", - "Cancel": "Cancel·la", + "Being lazy": "Essent mandrós", + "Brave Search API Key": "Clau API de Brave Search", + "Bypass SSL verification for Websites": "Desactivar la verificació SSL per a l'accés a Internet", + "Call": "Trucada", + "Call feature is not supported when using Web STT engine": "La funció de trucada no s'admet quan s'utilitza el motor Web STT", + "Camera": "Càmera", + "Cancel": "Cancel·lar", "Capabilities": "Capacitats", - "Change Password": "Canvia la Contrasenya", + "Change Password": "Canviar la contrasenya", "Chat": "Xat", - "Chat Background Image": "", + "Chat Background Image": "Imatge de fons del xat", "Chat Bubble UI": "Chat Bubble UI", - "Chat direction": "Direcció del Xat", - "Chat History": "Històric del Xat", - "Chat History is off for this browser.": "L'historial de xat està desactivat per a aquest navegador.", + "Chat direction": "Direcció del xat", + "Chat History": "Històric del xat", + "Chat History is off for this browser.": "L'historic del xat està desactivat per a aquest navegador.", "Chats": "Xats", - "Check Again": "Comprova-ho de Nou", - "Check for updates": "Comprova si hi ha actualitzacions", + "Check Again": "Comprovar-ho de nou", + "Check for updates": "Comprovar si hi ha actualitzacions", "Checking for updates...": "Comprovant actualitzacions...", - "Choose a model before saving...": "Tria un model abans de guardar...", - "Chunk Overlap": "Solapament de Blocs", - "Chunk Params": "Paràmetres de Blocs", - "Chunk Size": "Mida del Bloc", - "Citation": "Citació", - "Clear memory": "", - "Click here for help.": "Fes clic aquí per ajuda.", - "Click here to": "Fes clic aquí per", - "Click here to download user import template file.": "", - "Click here to select": "Fes clic aquí per seleccionar", - "Click here to select a csv file.": "Fes clic aquí per seleccionar un fitxer csv.", - "Click here to select a py file.": "", - "Click here to select documents.": "Fes clic aquí per seleccionar documents.", - "click here.": "fes clic aquí.", - "Click on the user role button to change a user's role.": "Fes clic al botó de rol d'usuari per canviar el rol d'un usuari.", - "Clone": "Clon", - "Close": "Tanca", + "Choose a model before saving...": "Triar un model abans de desar...", + "Chunk Overlap": "Solapament de blocs", + "Chunk Params": "Paràmetres dels blocs", + "Chunk Size": "Mida del bloc", + "Citation": "Cita", + "Clear memory": "Esborrar la memòria", + "Click here for help.": "Clica aquí per obtenir ajuda.", + "Click here to": "Clic aquí per", + "Click here to download user import template file.": "Fes clic aquí per descarregar l'arxiu de plantilla d'importació d'usuaris", + "Click here to select": "Clica aquí per seleccionar", + "Click here to select a csv file.": "Clica aquí per seleccionar un fitxer csv.", + "Click here to select a py file.": "Clica aquí per seleccionar un fitxer py.", + "Click here to select documents.": "Clica aquí per seleccionar documents.", + "click here.": "clica aquí.", + "Click on the user role button to change a user's role.": "Clica sobre el botó de rol d'usuari per canviar el rol d'un usuari.", + "Clone": "Clonar", + "Close": "Tancar", "Collection": "Col·lecció", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "URL base de ComfyUI", - "ComfyUI Base URL is required.": "URL base de ComfyUI és obligatòria.", + "ComfyUI Base URL is required.": "L'URL base de ComfyUI és obligatòria.", "Command": "Comanda", - "Concurrent Requests": "Sol·licituds simultànies", - "Confirm": "", - "Confirm Password": "Confirma la Contrasenya", - "Confirm your action": "", + "Concurrent Requests": "Peticions simultànies", + "Confirm": "Confirmar", + "Confirm Password": "Confirmar la contrasenya", + "Confirm your action": "Confirma la teva acció", "Connections": "Connexions", - "Contact Admin for WebUI Access": "", + "Contact Admin for WebUI Access": "Posat en contacte amb l'administrador per accedir a WebUI", "Content": "Contingut", - "Context Length": "Longitud del Context", - "Continue Response": "Continua la Resposta", + "Context Length": "Mida del context", + "Continue Response": "Continuar la resposta", "Copied shared chat URL to clipboard!": "S'ha copiat l'URL compartida al porta-retalls!", "Copy": "Copiar", - "Copy last code block": "Copia l'últim bloc de codi", - "Copy last response": "Copia l'última resposta", + "Copy last code block": "Copiar l'últim bloc de codi", + "Copy last response": "Copiar l'última resposta", "Copy Link": "Copiar l'enllaç", - "Copying to clipboard was successful!": "La còpia al porta-retalls ha estat exitosa!", + "Copying to clipboard was successful!": "La còpia al porta-retalls s'ha realitzat amb èxit!", "Create a model": "Crear un model", - "Create Account": "Crea un Compte", - "Create new key": "Crea una nova clau", - "Create new secret key": "Crea una nova clau secreta", + "Create Account": "Crear un compte", + "Create new key": "Crear una nova clau", + "Create new secret key": "Crear una nova clau secreta", "Created at": "Creat el", "Created At": "Creat el", - "Created by": "", - "CSV Import": "", - "Current Model": "Model Actual", - "Current Password": "Contrasenya Actual", + "Created by": "Creat per", + "CSV Import": "Importar CSV", + "Current Model": "Model actual", + "Current Password": "Contrasenya actual", "Custom": "Personalitzat", "Customize models for a specific purpose": "Personalitzar models per a un propòsit específic", "Dark": "Fosc", - "Dashboard": "", - "Database": "Base de Dades", + "Dashboard": "Tauler", + "Database": "Base de dades", "December": "Desembre", "Default": "Per defecte", "Default (Automatic1111)": "Per defecte (Automatic1111)", "Default (SentenceTransformers)": "Per defecte (SentenceTransformers)", "Default Model": "Model per defecte", "Default model updated": "Model per defecte actualitzat", - "Default Prompt Suggestions": "Suggeriments de Prompt Per Defecte", - "Default User Role": "Rol d'Usuari Per Defecte", - "delete": "esborra", - "Delete": "Esborra", - "Delete a model": "Esborra un model", - "Delete All Chats": "Suprimir tots els xats", - "Delete chat": "Esborra xat", - "Delete Chat": "Esborra Xat", - "Delete chat?": "", - "delete this link": "Esborra aquest enllaç", - "Delete User": "Esborra Usuari", - "Deleted {{deleteModelTag}}": "Esborrat {{deleteModelTag}}", - "Deleted {{name}}": "Suprimit {{nom}}", + "Default Prompt Suggestions": "Suggeriments d'indicació per defecte", + "Default User Role": "Rol d'usuari per defecte", + "delete": "eliminar", + "Delete": "Eliminar", + "Delete a model": "Eliminar un model", + "Delete All Chats": "Eliminar tots els xats", + "Delete chat": "Eliminar xat", + "Delete Chat": "Eliminar xat", + "Delete chat?": "Eliminar el xat?", + "delete this link": "Eliminar aquest enllaç", + "Delete User": "Eliminar usuari", + "Deleted {{deleteModelTag}}": "S'ha eliminat {{deleteModelTag}}", + "Deleted {{name}}": "S'ha eliminat {{name}}", "Description": "Descripció", - "Didn't fully follow instructions": "No s'ha completat els instruccions", - "Discover a model": "Descobreix un model", - "Discover a prompt": "Descobreix un prompt", - "Discover, download, and explore custom prompts": "Descobreix, descarrega i explora prompts personalitzats", - "Discover, download, and explore model presets": "Descobreix, descarrega i explora presets de models", - "Dismissible": "", - "Display Emoji in Call": "", - "Display the username instead of You in the Chat": "Mostra el nom d'usuari en lloc de 'Tu' al Xat", + "Didn't fully follow instructions": "No s'han seguit les instruccions completament", + "Discover a model": "Descobrir un model", + "Discover a prompt": "Descobrir una indicació", + "Discover, download, and explore custom prompts": "Descobrir, descarregar i explorar indicacions personalitzades", + "Discover, download, and explore model presets": "Descobrir, descarregar i explorar models preconfigurats", + "Dismissible": "Descartable", + "Display Emoji in Call": "Mostrar emojis a la trucada", + "Display the username instead of You in the Chat": "Mostrar el nom d'usuari en lloc de 'Tu' al xat", "Document": "Document", - "Document Settings": "Configuració de Documents", - "Documentation": "", + "Document Settings": "Configuració de documents", + "Documentation": "Documentació", "Documents": "Documents", "does not make any external connections, and your data stays securely on your locally hosted server.": "no realitza connexions externes, i les teves dades romanen segures al teu servidor allotjat localment.", - "Don't Allow": "No Permetre", + "Don't Allow": "No permetre", "Don't have an account?": "No tens un compte?", "Don't like the style": "No t'agrada l'estil?", "Download": "Descarregar", "Download canceled": "Descàrrega cancel·lada", - "Download Database": "Descarrega Base de Dades", + "Download Database": "Descarregar la base de dades", "Drop any files here to add to the conversation": "Deixa qualsevol arxiu aquí per afegir-lo a la conversa", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s','10m'. Les unitats de temps vàlides són 's', 'm', 'h'.", "Edit": "Editar", - "Edit Doc": "Edita Document", - "Edit Memory": "", - "Edit User": "Edita Usuari", + "Edit Doc": "Editar el document", + "Edit Memory": "Editar la memòria", + "Edit User": "Editar l'usuari", "Email": "Correu electrònic", - "Embedding Batch Size": "", - "Embedding Model": "Model d'embutiment", - "Embedding Model Engine": "Motor de model d'embutiment", - "Embedding model set to \"{{embedding_model}}\"": "Model d'embutiment configurat a \"{{embedding_model}}\"", - "Enable Chat History": "Activa Historial de Xat", - "Enable Community Sharing": "Activar l'ús compartit de la comunitat", - "Enable New Sign Ups": "Permet Noves Inscripcions", - "Enable Web Search": "Activa la cerca web", - "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que el fitxer CSV inclou 4 columnes en aquest ordre: Nom, Correu Electrònic, Contrasenya, Rol.", + "Embedding Batch Size": "Mida del lot d'incrustació", + "Embedding Model": "Model d'incrustació", + "Embedding Model Engine": "Motor de model d'incrustació", + "Embedding model set to \"{{embedding_model}}\"": "Model d'incrustació configurat a \"{{embedding_model}}\"", + "Enable Chat History": "Activar l'historial de xats", + "Enable Community Sharing": "Activar l'ús compartit amb la comunitat", + "Enable New Sign Ups": "Permetre nous registres", + "Enable Web Search": "Activar la cerca web", + "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que els teus fitxers CSV inclouen 4 columnes en aquest ordre: Nom, Correu electrònic, Contrasenya, Rol.", "Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}", - "Enter a detail about yourself for your LLMs to recall": "Introdueix un detall sobre tu per que els LLMs puguin recordar-te", - "Enter Brave Search API Key": "Introduïu la clau de l'API Brave Search", - "Enter Chunk Overlap": "Introdueix el Solapament de Blocs", - "Enter Chunk Size": "Introdueix la Mida del Bloc", - "Enter Github Raw URL": "Introduïu l'URL en brut de Github", - "Enter Google PSE API Key": "Introduïu la clau de l'API de Google PSE", - "Enter Google PSE Engine Id": "Introduïu l'identificador del motor PSE de Google", - "Enter Image Size (e.g. 512x512)": "Introdueix la Mida de la Imatge (p. ex. 512x512)", + "Enter a detail about yourself for your LLMs to recall": "Introdueix un detall sobre tu què els teus models de llenguatge puguin recordar", + "Enter Brave Search API Key": "Introdueix la clau API de Brave Search", + "Enter Chunk Overlap": "Introdueix la mida de solapament de blocs", + "Enter Chunk Size": "Introdueix la mida del bloc", + "Enter Github Raw URL": "Introdueix l'URL en brut de Github", + "Enter Google PSE API Key": "Introdueix la clau API de Google PSE", + "Enter Google PSE Engine Id": "Introdueix l'identificador del motor PSE de Google", + "Enter Image Size (e.g. 512x512)": "Introdueix la mida de la imatge (p. ex. 512x512)", "Enter language codes": "Introdueix els codis de llenguatge", "Enter model tag (e.g. {{modelTag}})": "Introdueix l'etiqueta del model (p. ex. {{modelTag}})", - "Enter Number of Steps (e.g. 50)": "Introdueix el Nombre de Passos (p. ex. 50)", - "Enter Score": "Introdueix el Puntuació", - "Enter Searxng Query URL": "Introduïu l'URL de consulta de Searxng", - "Enter Serper API Key": "Introduïu la clau de l'API Serper", - "Enter Serply API Key": "", - "Enter Serpstack API Key": "Introduïu la clau de l'API Serpstack", + "Enter Number of Steps (e.g. 50)": "Introdueix el nombre de passos (p. ex. 50)", + "Enter Score": "Introdueix la puntuació", + "Enter Searxng Query URL": "Introdueix l'URL de consulta de Searxng", + "Enter Serper API Key": "Introdueix la clau API Serper", + "Enter Serply API Key": "Introdueix la clau API Serply", + "Enter Serpstack API Key": "Introdueix la clau API Serpstack", "Enter stop sequence": "Introdueix la seqüència de parada", - "Enter Tavily API Key": "", + "Enter Tavily API Key": "Introdueix la clau API de Tavily", "Enter Top K": "Introdueix Top K", "Enter URL (e.g. http://127.0.0.1:7860/)": "Introdueix l'URL (p. ex. http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "Introdueix l'URL (p. ex. http://localhost:11434)", - "Enter Your Email": "Introdueix el Teu Correu Electrònic", - "Enter Your Full Name": "Introdueix el Teu Nom Complet", - "Enter Your Password": "Introdueix la Teva Contrasenya", - "Enter Your Role": "Introdueix el Teu Ròl", + "Enter Your Email": "Introdueix el teu correu electrònic", + "Enter Your Full Name": "Introdueix el teu nom complet", + "Enter Your Password": "Introdueix la teva contrasenya", + "Enter Your Role": "Introdueix el teu rol", "Error": "Error", "Experimental": "Experimental", "Export": "Exportar", - "Export All Chats (All Users)": "Exporta Tots els Xats (Tots els Usuaris)", - "Export chat (.json)": "", - "Export Chats": "Exporta Xats", - "Export Documents Mapping": "Exporta el Mapatge de Documents", - "Export Functions": "", - "Export Models": "Models d'exportació", - "Export Prompts": "Exporta Prompts", - "Export Tools": "", - "External Models": "", - "Failed to create API Key.": "No s'ha pogut crear la clau d'API.", + "Export All Chats (All Users)": "Exportar tots els xats (Tots els usuaris)", + "Export chat (.json)": "Exportar el xat (.json)", + "Export Chats": "Exportar els xats", + "Export Documents Mapping": "Exportar el mapatge de documents", + "Export Functions": "Exportar funcions", + "Export Models": "Exportar els models", + "Export Prompts": "Exportar les indicacions", + "Export Tools": "Exportar les eines", + "External Models": "Models externs", + "Failed to create API Key.": "No s'ha pogut crear la clau API.", "Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls", - "Failed to update settings": "", + "Failed to update settings": "No s'ha pogut actualitzar la configuració", "February": "Febrer", - "Feel free to add specific details": "Siusplau, afegeix detalls específics", - "File": "", - "File Mode": "Mode Arxiu", - "File not found.": "Arxiu no trobat.", - "Filters": "", - "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "S'ha detectat la suplantació d'identitat d'empremtes digitals: no es poden utilitzar les inicials com a avatar. Per defecte a la imatge de perfil predeterminada.", - "Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de respuesta externa", - "Focus chat input": "Enfoca l'entrada del xat", - "Followed instructions perfectly": "Siguiu les instruccions perfeicte", - "Form": "", + "Feel free to add specific details": "Sent-te lliure d'afegir detalls específics", + "File": "Arxiu", + "File Mode": "Mode d'arxiu", + "File not found.": "No s'ha trobat l'arxiu.", + "Filters": "Filtres", + "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "S'ha detectat la suplantació d'identitat de l'empremta digital: no es poden utilitzar les inicials com a avatar. S'estableix la imatge de perfil predeterminada.", + "Fluidly stream large external response chunks": "Transmetre amb fluïdesa grans trossos de resposta externa", + "Focus chat input": "Estableix el focus a l'entrada del xat", + "Followed instructions perfectly": "S'han seguit les instruccions perfectament", + "Form": "Formulari", "Format your variables using square brackets like this:": "Formata les teves variables utilitzant claudàtors així:", - "Frequency Penalty": "Pena de freqüència", - "Functions": "", + "Frequency Penalty": "Penalització per freqüència", + "Functions": "Funcions", "General": "General", - "General Settings": "Configuració General", - "Generate Image": "", - "Generating search query": "Generació de consultes de cerca", - "Generation Info": "Informació de Generació", - "Good Response": "Resposta bona", - "Google PSE API Key": "Clau de l'API PSE de Google", + "General Settings": "Configuració general", + "Generate Image": "Generar imatge", + "Generating search query": "Generant consulta", + "Generation Info": "Informació sobre la generació", + "Good Response": "Bona resposta", + "Google PSE API Key": "Clau API PSE de Google", "Google PSE Engine Id": "Identificador del motor PSE de Google", "h:mm a": "h:mm a", "has no conversations.": "no té converses.", "Hello, {{name}}": "Hola, {{name}}", "Help": "Ajuda", "Hide": "Amaga", - "Hide Model": "", + "Hide Model": "Amagar el model", "How can I help you today?": "Com et puc ajudar avui?", - "Hybrid Search": "Cerca Hibrida", - "Image Generation (Experimental)": "Generació d'Imatges (Experimental)", - "Image Generation Engine": "Motor de Generació d'Imatges", - "Image Settings": "Configuració d'Imatges", + "Hybrid Search": "Cerca híbrida", + "Image Generation (Experimental)": "Generació d'imatges (Experimental)", + "Image Generation Engine": "Motor de generació d'imatges", + "Image Settings": "Configuració d'imatges", "Images": "Imatges", - "Import Chats": "Importa Xats", - "Import Documents Mapping": "Importa el Mapa de Documents", - "Import Functions": "", - "Import Models": "Models d'importació", - "Import Prompts": "Importa Prompts", - "Import Tools": "", - "Include `--api` flag when running stable-diffusion-webui": "Inclou la bandera `--api` quan executis stable-diffusion-webui", + "Import Chats": "Importar xats", + "Import Documents Mapping": "Importar el mapatge de documents", + "Import Functions": "Importar funcions", + "Import Models": "Importar models", + "Import Prompts": "Importar indicacions", + "Import Tools": "Importar eines", + "Include `--api` flag when running stable-diffusion-webui": "Inclou `--api` quan executis stable-diffusion-webui", "Info": "Informació", - "Input commands": "Entra ordres", - "Install from Github URL": "Instal·leu des de l'URL de Github", - "Instant Auto-Send After Voice Transcription": "", + "Input commands": "Entra comandes", + "Install from Github URL": "Instal·lar des de l'URL de Github", + "Instant Auto-Send After Voice Transcription": "Enviament automàtic després de la transcripció de veu", "Interface": "Interfície", - "Invalid Tag": "Etiqueta Inválida", + "Invalid Tag": "Etiqueta no vàlida", "January": "Gener", - "join our Discord for help.": "uneix-te al nostre Discord per ajuda.", + "join our Discord for help.": "uneix-te al nostre Discord per obtenir ajuda.", "JSON": "JSON", - "JSON Preview": "Vista prèvia de JSON", + "JSON Preview": "Vista prèvia del document JSON", "July": "Juliol", "June": "Juny", - "JWT Expiration": "Expiració de JWT", + "JWT Expiration": "Caducitat del JWT", "JWT Token": "Token JWT", - "Keep Alive": "Mantén Actiu", - "Keyboard shortcuts": "Dreceres de Teclat", - "Knowledge": "", + "Keep Alive": "Manté actiu", + "Keyboard shortcuts": "Dreceres de teclat", + "Knowledge": "Coneixement", "Language": "Idioma", - "Last Active": "Últim Actiu", - "Last Modified": "", + "Last Active": "Activitat recent", + "Last Modified": "Modificació", "Light": "Clar", - "Listening...": "", - "LLMs can make mistakes. Verify important information.": "Els LLMs poden cometre errors. Verifica la informació important.", - "Local Models": "", + "Listening...": "Escoltant...", + "LLMs can make mistakes. Verify important information.": "Els models de llenguatge poden cometre errors. Verifica la informació important.", + "Local Models": "Models locals", "LTR": "LTR", "Made by OpenWebUI Community": "Creat per la Comunitat OpenWebUI", "Make sure to enclose them with": "Assegura't d'envoltar-los amb", - "Manage": "", - "Manage Models": "Gestiona Models", - "Manage Ollama Models": "Gestiona Models Ollama", - "Manage Pipelines": "Gestionar canonades", + "Manage": "Gestionar", + "Manage Models": "Gestionar els models", + "Manage Ollama Models": "Gestionar els models Ollama", + "Manage Pipelines": "Gestionar les Pipelines", "March": "Març", - "Max Tokens (num_predict)": "Max Fitxes (num_predict)", + "Max Tokens (num_predict)": "Nombre màxim de Tokens (num_predict)", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es poden descarregar un màxim de 3 models simultàniament. Si us plau, prova-ho més tard.", "May": "Maig", - "Memories accessible by LLMs will be shown here.": "Els memòries accessible per a LLMs es mostraran aquí.", + "Memories accessible by LLMs will be shown here.": "Les memòries accessibles pels models de llenguatge es mostraran aquí.", "Memory": "Memòria", - "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Els missatges que envieu després de crear el vostre enllaç no es compartiran. Els usuaris amb l'URL podran veure el xat compartit.", + "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Els missatges enviats després de crear el teu enllaç no es compartiran. Els usuaris amb l'URL podran veure el xat compartit.", "Minimum Score": "Puntuació mínima", "Mirostat": "Mirostat", "Mirostat Eta": "Eta de Mirostat", "Mirostat Tau": "Tau de Mirostat", "MMMM DD, YYYY": "DD de MMMM, YYYY", "MMMM DD, YYYY HH:mm": "DD de MMMM, YYYY HH:mm", - "MMMM DD, YYYY hh:mm:ss A": "", + "MMMM DD, YYYY hh:mm:ss A": "DD de MMMM, YYYY HH:mm:ss, A", "Model '{{modelName}}' has been successfully downloaded.": "El model '{{modelName}}' s'ha descarregat amb èxit.", "Model '{{modelTag}}' is already in queue for downloading.": "El model '{{modelTag}}' ja està en cua per ser descarregat.", - "Model {{modelId}} not found": "Model {{modelId}} no trobat", + "Model {{modelId}} not found": "No s'ha trobat el model {{modelId}}", "Model {{modelName}} is not vision capable": "El model {{modelName}} no és capaç de visió", - "Model {{name}} is now {{status}}": "El model {{nom}} ara és {{estat}}", - "Model filesystem path detected. Model shortname is required for update, cannot continue.": "S'ha detectat el camí del sistema de fitxers del model. És necessari un nom curt del model per a actualitzar, no es pot continuar.", + "Model {{name}} is now {{status}}": "El model {{name}} ara és {{status}}", + "Model filesystem path detected. Model shortname is required for update, cannot continue.": "S'ha detectat el camí del sistema de fitxers del model. És necessari un nom curt del model per actualitzar, no es pot continuar.", "Model ID": "Identificador del model", "Model not selected": "Model no seleccionat", "Model Params": "Paràmetres del model", - "Model Whitelisting": "Llista Blanca de Models", - "Model(s) Whitelisted": "Model(s) a la Llista Blanca", - "Modelfile Content": "Contingut del Fitxer de Model", + "Model Whitelisting": "Llista blanca de models", + "Model(s) Whitelisted": "Model(s) a la llista blanca", + "Modelfile Content": "Contingut del Modelfile", "Models": "Models", "More": "Més", "Name": "Nom", - "Name Tag": "Etiqueta de Nom", - "Name your model": "Posa un nom al model", - "New Chat": "Xat Nou", - "New Password": "Nova Contrasenya", - "No documents found": "", + "Name Tag": "Etiqueta de nom", + "Name your model": "Posa un nom al teu model", + "New Chat": "Nou xat", + "New Password": "Nova contrasenya", + "No documents found": "No s'han trobat documents", "No results found": "No s'han trobat resultats", - "No search query generated": "No es genera cap consulta de cerca", + "No search query generated": "No s'ha generat cap consulta", "No source available": "Sense font disponible", "None": "Cap", - "Not factually correct": "No està clarament correcte", - "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si establiscs una puntuació mínima, la cerca només retornarà documents amb una puntuació major o igual a la puntuació mínima.", - "Notifications": "Notificacions d'Escriptori", + "Not factually correct": "No és clarament correcte", + "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si s'estableix una puntuació mínima, la cerca només retornarà documents amb una puntuació major o igual a la puntuació mínima.", + "Notifications": "Notificacions", "November": "Novembre", "num_thread (Ollama)": "num_thread (Ollama)", "October": "Octubre", "Off": "Desactivat", - "Okay, Let's Go!": "D'acord, Anem!", + "Okay, Let's Go!": "D'acord, som-hi!", "OLED Dark": "OLED Fosc", "Ollama": "Ollama", "Ollama API": "API d'Ollama", - "Ollama API disabled": "L'API d'Ollama desactivada", - "Ollama API is disabled": "", + "Ollama API disabled": "API d'Ollama desactivada", + "Ollama API is disabled": "L'API d'Ollama està desactivada", "Ollama Version": "Versió d'Ollama", "On": "Activat", "Only": "Només", - "Only alphanumeric characters and hyphens are allowed in the command string.": "Només es permeten caràcters alfanumèrics i guions en la cadena de comandes.", - "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.": "Ui! Aguanta! Els teus fitxers encara estan en el forn de processament. Els estem cuinant a la perfecció. Si us plau, tingues paciència i t'avisarem quan estiguin llestos.", - "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ui! Sembla que l'URL és invàlida. Si us plau, revisa-ho i prova de nou.", - "Oops! There was an error in the previous response. Please try again or contact admin.": "", + "Only alphanumeric characters and hyphens are allowed in the command string.": "Només es permeten caràcters alfanumèrics i guions en la comanda.", + "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.": "Ep! Un moment! Els teus fitxers encara s'estan processant. Els estem cuinant a la perfecció. Si us plau, tingues paciència i t'avisarem quan estiguin preparats.", + "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ui! Sembla que l'URL no és vàlida. Si us plau, revisa-la i torna-ho a provar.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "Ui! Hi ha hagut un error en la resposta anterior. Torna a provar-ho o contacta amb un administrador", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ui! Estàs utilitzant un mètode no suportat (només frontend). Si us plau, serveix la WebUI des del backend.", "Open": "Obre", "Open AI": "Open AI", "Open AI (Dall-E)": "Open AI (Dall-E)", - "Open new chat": "Obre un nou xat", + "Open new chat": "Obre un xat nou", "OpenAI": "OpenAI", "OpenAI API": "API d'OpenAI", "OpenAI API Config": "Configuració de l'API d'OpenAI", - "OpenAI API Key is required.": "Es requereix la Clau API d'OpenAI.", + "OpenAI API Key is required.": "Es requereix la clau API d'OpenAI.", "OpenAI URL/Key required.": "URL/Clau d'OpenAI requerides.", "or": "o", "Other": "Altres", "Password": "Contrasenya", "PDF document (.pdf)": "Document PDF (.pdf)", - "PDF Extract Images (OCR)": "Extreu Imatges de PDF (OCR)", + "PDF Extract Images (OCR)": "Extreu imatges del PDF (OCR)", "pending": "pendent", - "Permission denied when accessing media devices": "", - "Permission denied when accessing microphone": "", + "Permission denied when accessing media devices": "Permís denegat en accedir a dispositius multimèdia", + "Permission denied when accessing microphone": "Permís denegat en accedir al micròfon", "Permission denied when accessing microphone: {{error}}": "Permís denegat en accedir al micròfon: {{error}}", "Personalization": "Personalització", - "Pipelines": "Canonades", - "Pipelines Valves": "Vàlvules de canonades", + "Pipelines": "Pipelines", + "Pipelines Valves": "Vàlvules de les Pipelines", "Plain text (.txt)": "Text pla (.txt)", - "Playground": "Zona de Jocs", - "Positive attitude": "Attitudin positiva", + "Playground": "Zona de jocs", + "Positive attitude": "Actitud positiva", "Previous 30 days": "30 dies anteriors", "Previous 7 days": "7 dies anteriors", "Profile Image": "Imatge de perfil", - "Prompt": "Prompt", - "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (p.ex. diu-me un fàcte divertit sobre l'Imperi Roman)", - "Prompt Content": "Contingut del Prompt", - "Prompt suggestions": "Suggeriments de Prompt", - "Prompts": "Prompts", - "Pull \"{{searchValue}}\" from Ollama.com": "Treu \"{{searchValue}}\" de Ollama.com", - "Pull a model from Ollama.com": "Treu un model d'Ollama.com", - "Query Params": "Paràmetres de Consulta", + "Prompt": "Indicació", + "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Indicació (p.ex. Digues-me quelcom divertit sobre l'Imperi Romà)", + "Prompt Content": "Contingut de la indicació", + "Prompt suggestions": "Suggeriments d'indicacions", + "Prompts": "Indicacions", + "Pull \"{{searchValue}}\" from Ollama.com": "Obtenir \"{{searchValue}}\" de Ollama.com", + "Pull a model from Ollama.com": "Obtenir un model d'Ollama.com", + "Query Params": "Paràmetres de consulta", "RAG Template": "Plantilla RAG", - "Read Aloud": "Llegiu al voltant", - "Record voice": "Enregistra veu", - "Redirecting you to OpenWebUI Community": "Redirigint-te a la Comunitat OpenWebUI", - "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", - "Refused when it shouldn't have": "Refusat quan no hauria d'haver-ho", + "Read Aloud": "Llegir en veu alta", + "Record voice": "Enregistrar la veu", + "Redirecting you to OpenWebUI Community": "Redirigint-te a la comunitat OpenWebUI", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Fes referència a tu mateix com a \"Usuari\" (p. ex., \"L'usuari està aprenent espanyol\")", + "Refused when it shouldn't have": "Refusat quan no hauria d'haver estat", "Regenerate": "Regenerar", - "Release Notes": "Notes de la Versió", - "Remove": "Elimina", - "Remove Model": "Elimina Model", - "Rename": "Canvia el nom", - "Repeat Last N": "Repeteix Últim N", - "Request Mode": "Mode de Sol·licitud", - "Reranking Model": "Model de Reranking desactivat", - "Reranking model disabled": "Model de Reranking desactivat", - "Reranking model set to \"{{reranking_model}}\"": "Model de Reranking establert a \"{{reranking_model}}\"", - "Reset": "", - "Reset Upload Directory": "", - "Reset Vector Storage": "Reinicia l'Emmagatzematge de Vectors", - "Response AutoCopy to Clipboard": "Resposta AutoCopiar al Portapapers", + "Release Notes": "Notes de la versió", + "Remove": "Eliminar", + "Remove Model": "Eliminar el model", + "Rename": "Canviar el nom", + "Repeat Last N": "Repeteix els darrers N", + "Request Mode": "Mode de sol·licitud", + "Reranking Model": "Model de reavaluació", + "Reranking model disabled": "Model de reavaluació desactivat", + "Reranking model set to \"{{reranking_model}}\"": "Model de reavaluació establert a \"{{reranking_model}}\"", + "Reset": "Restableix", + "Reset Upload Directory": "Restableix el directori de pujades", + "Reset Vector Storage": "Restableix l'emmagatzematge de vectors", + "Response AutoCopy to Clipboard": "Copiar la resposta automàticament al porta-retalls", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Albada Rosé Pine", "RTL": "RTL", - "Running": "", - "Save": "Guarda", - "Save & Create": "Guarda i Crea", - "Save & Update": "Guarda i Actualitza", - "Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Guardar registres de xat directament a l'emmagatzematge del teu navegador ja no és suportat. Si us plau, pren un moment per descarregar i eliminar els teus registres de xat fent clic al botó de sota. No et preocupis, pots reimportar fàcilment els teus registres de xat al backend a través de", - "Scan": "Escaneja", - "Scan complete!": "Escaneig completat!", - "Scan for documents from {{path}}": "Escaneja documents des de {{path}}", - "Search": "Cerca", - "Search a model": "Cerca un model", + "Running": "S'està executant", + "Save": "Desar", + "Save & Create": "Desar i crear", + "Save & Update": "Desar i actualitzar", + "Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Desar els registres de xat directament a l'emmagatzematge del teu navegador ja no està suportat. Si us plau, descarregr i elimina els registres de xat fent clic al botó de sota. No et preocupis, pots tornar a importar fàcilment els teus registres de xat al backend a través de", + "Scan": "Escanejar", + "Scan complete!": "Escaneigr completat!", + "Scan for documents from {{path}}": "Escanejar documents des de {{path}}", + "Search": "Cercar", + "Search a model": "Cercar un model", "Search Chats": "Cercar xats", - "Search Documents": "Cerca Documents", - "Search Functions": "", - "Search Models": "Models de cerca", - "Search Prompts": "Cerca Prompts", - "Search Query Generation Prompt": "", - "Search Query Generation Prompt Length Threshold": "", + "Search Documents": "Cercar documents", + "Search Functions": "Cercar funcions", + "Search Models": "Cercar models", + "Search Prompts": "Cercar indicacions", + "Search Query Generation Prompt": "Indicació de cerca de generació de consultes", + "Search Query Generation Prompt Length Threshold": "Mida màxima de la indicació de cerca de generació de consultes", "Search Result Count": "Recompte de resultats de cerca", - "Search Tools": "", - "Searched {{count}} sites_one": "Cercat {{count}} sites_one", - "Searched {{count}} sites_many": "Cercat {{recompte}} sites_many", - "Searched {{count}} sites_other": "Cercat {{recompte}} sites_other", - "Searching \"{{searchQuery}}\"": "", - "Searxng Query URL": "Searxng URL de consulta", - "See readme.md for instructions": "Consulta el readme.md per a instruccions", - "See what's new": "Veure novetats", + "Search Tools": "Cercar eines", + "Searched {{count}} sites_one": "S'ha cercat {{count}} una pàgina", + "Searched {{count}} sites_many": "S'han cercat {{count}} pàgines", + "Searched {{count}} sites_other": "S'han cercat {{count}} pàgines", + "Searching \"{{searchQuery}}\"": "Cercant \"{{searchQuery}}\"", + "Searxng Query URL": "URL de consulta de Searxng", + "See readme.md for instructions": "Consulta l'arxiu readme.md per obtenir instruccions", + "See what's new": "Veure què hi ha de nou", "Seed": "Llavor", "Select a base model": "Seleccionar un model base", - "Select a engine": "", - "Select a mode": "Selecciona un mode", - "Select a model": "Selecciona un model", - "Select a pipeline": "Seleccioneu una canonada", - "Select a pipeline url": "Seleccionar un URL de canonada", - "Select an Ollama instance": "Selecciona una instància d'Ollama", - "Select Documents": "", - "Select model": "Selecciona un model", - "Select only one model to call": "", - "Selected model(s) do not support image inputs": "Els models seleccionats no admeten l'entrada d'imatges", - "Send": "Envia", - "Send a Message": "Envia un Missatge", - "Send message": "Envia missatge", + "Select a engine": "Seleccionar un motor", + "Select a mode": "Seleccionar un mode", + "Select a model": "Seleccionar un model", + "Select a pipeline": "Seleccionar una Pipeline", + "Select a pipeline url": "Seleccionar l'URL d'una Pipeline", + "Select an Ollama instance": "Seleccionar una instància d'Ollama", + "Select Documents": "Seleccionar documents", + "Select model": "Seleccionar un model", + "Select only one model to call": "Seleccionar només un model per trucar", + "Selected model(s) do not support image inputs": "El(s) model(s) seleccionats no admeten l'entrada d'imatges", + "Send": "Enviar", + "Send a Message": "Enviar un missatge", + "Send message": "Enviar missatge", "September": "Setembre", - "Serper API Key": "Clau API Serper", - "Serply API Key": "", - "Serpstack API Key": "Serpstack API Key", + "Serper API Key": "Clau API de Serper", + "Serply API Key": "Clau API de Serply", + "Serpstack API Key": "Clau API de Serpstack", "Server connection verified": "Connexió al servidor verificada", - "Set as default": "Estableix com a predeterminat", - "Set Default Model": "Estableix Model Predeterminat", - "Set embedding model (e.g. {{model}})": "Estableix el model d'emboscada (p.ex. {{model}})", - "Set Image Size": "Estableix Mida de la Imatge", - "Set reranking model (e.g. {{model}})": "Estableix el model de reranking (p.ex. {{model}})", - "Set Steps": "Estableix Passos", - "Set Task Model": "Defineix el model de tasca", - "Set Voice": "Estableix Veu", + "Set as default": "Establir com a predeterminat", + "Set Default Model": "Establir el model predeterminat", + "Set embedding model (e.g. {{model}})": "Establir el model d'incrustació (p.ex. {{model}})", + "Set Image Size": "Establir la mida de la image", + "Set reranking model (e.g. {{model}})": "Establir el model de reavaluació (p.ex. {{model}})", + "Set Steps": "Establir el nombre de passos", + "Set Task Model": "Establir el model de tasca", + "Set Voice": "Establir la veu", "Settings": "Configuracions", - "Settings saved successfully!": "Configuracions guardades amb èxit!", - "Settings updated successfully": "", + "Settings saved successfully!": "Les configuracions s'han desat amb èxit!", + "Settings updated successfully": "Les configuracions s'han actualitzat amb èxit", "Share": "Compartir", - "Share Chat": "Compartir el Chat", - "Share to OpenWebUI Community": "Comparteix amb la Comunitat OpenWebUI", - "short-summary": "resum curt", - "Show": "Mostra", - "Show Admin Details in Account Pending Overlay": "", - "Show Model": "", - "Show shortcuts": "Mostra dreceres", - "Showcased creativity": "Mostra la creativitat", + "Share Chat": "Compartir el xat", + "Share to OpenWebUI Community": "Compartir amb la comunitat OpenWebUI", + "short-summary": "resum breu", + "Show": "Mostrar", + "Show Admin Details in Account Pending Overlay": "Mostrar els detalls de l'administrador a la superposició del compte pendent", + "Show Model": "Mostrar el model", + "Show shortcuts": "Mostrar dreceres", + "Showcased creativity": "Creativitat mostrada", "sidebar": "barra lateral", - "Sign in": "Inicia sessió", - "Sign Out": "Tanca sessió", - "Sign up": "Registra't", + "Sign in": "Iniciar sessió", + "Sign Out": "Tancar sessió", + "Sign up": "Registrar-se", "Signing in": "Iniciant sessió", "Source": "Font", "Speech recognition error: {{error}}": "Error de reconeixement de veu: {{error}}", - "Speech-to-Text Engine": "Motor de Veu a Text", - "Stop Sequence": "Atura Seqüència", - "STT Model": "", - "STT Settings": "Configuracions STT", - "Submit": "Envia", + "Speech-to-Text Engine": "Motor de veu a text", + "Stop Sequence": "Atura la seqüència", + "STT Model": "Model SST", + "STT Settings": "Configuracions de STT", + "Submit": "Enviar", "Subtitle (e.g. about the Roman Empire)": "Subtítol (per exemple, sobre l'Imperi Romà)", "Success": "Èxit", "Successfully updated.": "Actualitzat amb èxit.", "Suggested": "Suggerit", "System": "Sistema", - "System Prompt": "Prompt del Sistema", + "System Prompt": "Indicació del Sistema", "Tags": "Etiquetes", - "Tap to interrupt": "", - "Tavily API Key": "", - "Tell us more:": "Dóna'ns més informació:", + "Tap to interrupt": "Prem per interrompre", + "Tavily API Key": "Clau API de Tavily", + "Tell us more:": "Dona'ns més informació:", "Temperature": "Temperatura", "Template": "Plantilla", - "Text Completion": "Completació de Text", - "Text-to-Speech Engine": "Motor de Text a Veu", + "Text Completion": "Completament de text", + "Text-to-Speech Engine": "Motor de text a veu", "Tfs Z": "Tfs Z", "Thanks for your feedback!": "Gràcies pel teu comentari!", - "The score should be a value between 0.0 (0%) and 1.0 (100%).": "El puntuatge ha de ser un valor entre 0.0 (0%) i 1.0 (100%).", + "The score should be a value between 0.0 (0%) and 1.0 (100%).": "El valor de puntuació hauria de ser entre 0.0 (0%) i 1.0 (100%).", "Theme": "Tema", - "Thinking...": "", - "This action cannot be undone. Do you wish to continue?": "", - "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Això assegura que les teves converses valuoses queden segurament guardades a la teva base de dades backend. Gràcies!", - "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", + "Thinking...": "Pensant...", + "This action cannot be undone. Do you wish to continue?": "Aquesta acció no es pot desfer. Vols continuar?", + "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Això assegura que les teves converses valuoses queden desades de manera segura a la teva base de dades. Gràcies!", + "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Aquesta és una funció experimental, és possible que no funcioni com s'espera i està subjecta a canvis en qualsevol moment.", "This setting does not sync across browsers or devices.": "Aquesta configuració no es sincronitza entre navegadors ni dispositius.", - "This will delete": "", - "Thorough explanation": "Explacació exhaustiva", - "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Consell: Actualitza diversos espais de variables consecutivament prement la tecla de tabulació en l'entrada del xat després de cada reemplaçament.", + "This will delete": "Això eliminarà", + "Thorough explanation": "Explicació en detall", + "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Consell: Actualitza les diverses variables consecutivament prement la tecla de tabulació en l'entrada del xat després de cada reemplaçament.", "Title": "Títol", - "Title (e.g. Tell me a fun fact)": "Títol (p. ex. diu-me un fet divertit)", - "Title Auto-Generation": "Auto-Generació de Títol", + "Title (e.g. Tell me a fun fact)": "Títol (p. ex. Digues-me quelcom divertit)", + "Title Auto-Generation": "Generació automàtica de títol", "Title cannot be an empty string.": "El títol no pot ser una cadena buida.", - "Title Generation Prompt": "Prompt de Generació de Títol", + "Title Generation Prompt": "Indicació de generació de títol", "to": "a", "To access the available model names for downloading,": "Per accedir als noms dels models disponibles per descarregar,", "To access the GGUF models available for downloading,": "Per accedir als models GGUF disponibles per descarregar,", - "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", - "To add documents here, upload them to the \"Documents\" workspace first.": "", + "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Per accedir a la WebUI, poseu-vos en contacte amb l'administrador. Els administradors poden gestionar els estats dels usuaris des del tauler d'administració.", + "To add documents here, upload them to the \"Documents\" workspace first.": "Per afegir documents aquí, puja-ls primer a l'espai de treball \"Documents\".", "to chat input.": "a l'entrada del xat.", - "To select filters here, add them to the \"Functions\" workspace first.": "", - "To select toolkits here, add them to the \"Tools\" workspace first.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "Per seleccionar filtres aquí, afegeix-los primer a l'espai de treball \"Funcions\".", + "To select toolkits here, add them to the \"Tools\" workspace first.": "Per seleccionar kits d'eines aquí, afegeix-los primer a l'espai de treball \"Eines\".", "Today": "Avui", - "Toggle settings": "Commuta configuracions", - "Toggle sidebar": "Commuta barra lateral", - "Tokens To Keep On Context Refresh (num_keep)": "", - "Tools": "", + "Toggle settings": "Alterna configuracions", + "Toggle sidebar": "Alterna la barra lateral", + "Tokens To Keep On Context Refresh (num_keep)": "Tokens a mantenir en l'actualització del context (num_keep)", + "Tools": "Eines", "Top K": "Top K", "Top P": "Top P", - "Trouble accessing Ollama?": "Problemes accedint a Ollama?", - "TTS Model": "", + "Trouble accessing Ollama?": "Problemes en accedir a Ollama?", + "TTS Model": "Model TTS", "TTS Settings": "Configuracions TTS", - "TTS Voice": "", + "TTS Voice": "Veu TTS", "Type": "Tipus", - "Type Hugging Face Resolve (Download) URL": "Escriu URL de Resolució (Descàrrega) de Hugging Face", - "Uh-oh! There was an issue connecting to {{provider}}.": "Uf! Hi va haver un problema connectant-se a {{provider}}.", - "UI": "", - "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", - "Update": "", - "Update and Copy Link": "Actualitza i Copia enllaç", - "Update password": "Actualitza contrasenya", - "Updated at": "", - "Upload": "", - "Upload a GGUF model": "Puja un model GGUF", + "Type Hugging Face Resolve (Download) URL": "Escriu l'URL de Resolució (Descàrrega) de Hugging Face", + "Uh-oh! There was an issue connecting to {{provider}}.": "Oh! Hi ha hagut un problema connectant a {{provider}}.", + "UI": "UI", + "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipus d'arxiu desconegut '{{file_type}}', però s'accepta i es tracta com a text pla", + "Update": "Actualitzar", + "Update and Copy Link": "Actualitzar i copiar l'enllaç", + "Update password": "Actualitzar la contrasenya", + "Updated at": "Actualitzat", + "Upload": "Pujar", + "Upload a GGUF model": "Pujar un model GGUF", "Upload Files": "Pujar fitxers", - "Upload Pipeline": "", - "Upload Progress": "Progrés de Càrrega", + "Upload Pipeline": "Pujar una Pipeline", + "Upload Progress": "Progrés de càrrega", "URL Mode": "Mode URL", - "Use '#' in the prompt input to load and select your documents.": "Utilitza '#' a l'entrada del prompt per carregar i seleccionar els teus documents.", - "Use Gravatar": "Utilitza Gravatar", - "Use Initials": "Utilitza Inicials", + "Use '#' in the prompt input to load and select your documents.": "Utilitza '#' a l'entrada de la indicació per carregar i seleccionar els teus documents.", + "Use Gravatar": "Utilitzar Gravatar", + "Use Initials": "Utilitzar inicials", "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "usuari", - "User Permissions": "Permisos d'Usuari", + "User Permissions": "Permisos d'usuari", "Users": "Usuaris", - "Utilize": "Utilitza", + "Utilize": "Utilitzar", "Valid time units:": "Unitats de temps vàlides:", "variable": "variable", "variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.", "Version": "Versió", - "Voice": "", - "Warning": "Advertiment", - "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avís: Si actualitzeu o canvieu el model d'incrustació, haureu de tornar a importar tots els documents.", + "Voice": "Veu", + "Warning": "Avís", + "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avís: Si s'actualitza o es canvia el model d'incrustació, s'hauran de tornar a importar tots els documents.", "Web": "Web", - "Web API": "", + "Web API": "Web API", "Web Loader Settings": "Configuració del carregador web", "Web Params": "Paràmetres web", - "Web Search": "Cercador web", - "Web Search Engine": "Cercador web", + "Web Search": "Cerca la web", + "Web Search Engine": "Motor de cerca de la web", "Webhook URL": "URL del webhook", - "WebUI Settings": "Configuració de WebUI", + "WebUI Settings": "Configuracions de WebUI", "WebUI will make requests to": "WebUI farà peticions a", - "What’s New in": "Què hi ha de Nou en", + "What’s New in": "Què hi ha de nou a", "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Quan l'historial està desactivat, els nous xats en aquest navegador no apareixeran en el teu historial en cap dels teus dispositius.", - "Whisper (Local)": "", - "Widescreen Mode": "", - "Workspace": "Treball", - "Write a prompt suggestion (e.g. Who are you?)": "Escriu una suggerència de prompt (p. ex. Qui ets tu?)", + "Whisper (Local)": "Whisper (local)", + "Widescreen Mode": "Mode de pantalla ampla", + "Workspace": "Espai de treball", + "Write a prompt suggestion (e.g. Who are you?)": "Escriu una suggerència d'indicació (p. ex. Qui ets?)", "Write a summary in 50 words that summarizes [topic or keyword].": "Escriu un resum en 50 paraules que resumeixi [tema o paraula clau].", - "Yesterday": "Ayer", + "Yesterday": "Ahir", "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.": "", + "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Pots personalitzar les teves interaccions amb els models de llenguatge afegint memòries mitjançant el botó 'Gestiona' que hi ha a continuació, fent-les més útils i adaptades a tu.", "You cannot clone a base model": "No es pot clonar un model base", "You have no archived conversations.": "No tens converses arxivades.", "You have shared this chat": "Has compartit aquest xat", "You're a helpful assistant.": "Ets un assistent útil.", "You're now logged in.": "Ara estàs connectat.", - "Your account status is currently pending activation.": "", + "Your account status is currently pending activation.": "El compte està actualment pendent d'activació", "Youtube": "Youtube", "Youtube Loader Settings": "Configuració del carregador de Youtube" } From ae567796ee304a114f5ec97966b947b19d9b5ac4 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 01:39:53 -0700 Subject: [PATCH 155/287] refac --- backend/apps/webui/main.py | 4 +- backend/main.py | 83 +++++++++++++++++++++----------------- 2 files changed, 50 insertions(+), 37 deletions(-) diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index ce58047ed..a9f7fb286 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -130,7 +130,9 @@ async def get_pipe_models(): manifold_pipe_name = p["name"] if hasattr(function_module, "name"): - manifold_pipe_name = f"{pipe.name}{manifold_pipe_name}" + manifold_pipe_name = ( + f"{function_module.name}{manifold_pipe_name}" + ) pipe_models.append( { diff --git a/backend/main.py b/backend/main.py index 737641e2d..9eb7d2071 100644 --- a/backend/main.py +++ b/backend/main.py @@ -389,26 +389,31 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): if hasattr(function_module, "inlet"): inlet = function_module.inlet + # Get the signature of the function + sig = inspect.signature(inlet) + param = {"body": data} + + if "__user__" in sig.parameters: + param = { + **param, + "__user__": { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + } + + if "__id__" in sig.parameters: + param = { + **param, + "__id__": filter_id, + } + if inspect.iscoroutinefunction(inlet): - data = await inlet( - data, - { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - }, - ) + data = await inlet(**param) else: - data = inlet( - data, - { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - }, - ) + data = inlet(**param) except Exception as e: print(f"Error: {e}") @@ -1031,26 +1036,32 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): try: if hasattr(function_module, "outlet"): outlet = function_module.outlet + + # Get the signature of the function + sig = inspect.signature(outlet) + param = {"body": data} + + if "__user__" in sig.parameters: + param = { + **param, + "__user__": { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + } + + if "__id__" in sig.parameters: + param = { + **param, + "__id__": filter_id, + } + if inspect.iscoroutinefunction(outlet): - data = await outlet( - data, - { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - }, - ) + data = await outlet(**param) else: - data = outlet( - data, - { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - }, - ) + data = outlet(**param) except Exception as e: print(f"Error: {e}") From a8a451344cd5970c939a1744aff571db57b74e6d Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 01:42:28 -0700 Subject: [PATCH 156/287] refac --- backend/main.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/backend/main.py b/backend/main.py index 9eb7d2071..0b7f23bde 100644 --- a/backend/main.py +++ b/backend/main.py @@ -858,13 +858,28 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u print(pipe_id) pipe = webui_app.state.FUNCTIONS[pipe_id].pipe - if form_data["stream"]: + # Get the signature of the function + sig = inspect.signature(pipe) + param = {"body": form_data} + + if "__user__" in sig.parameters: + param = { + **param, + "__user__": { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + } + + if form_data["stream"]: async def stream_content(): if inspect.iscoroutinefunction(pipe): - res = await pipe(body=form_data) + res = await pipe(**param) else: - res = pipe(body=form_data) + res = pipe(**param) if isinstance(res, str): message = stream_message_template(form_data["model"], res) @@ -910,9 +925,9 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u ) else: if inspect.iscoroutinefunction(pipe): - res = await pipe(body=form_data) + res = await pipe(**param) else: - res = pipe(body=form_data) + res = pipe(**param) if isinstance(res, dict): return res From 0ac8e97447539a1e4b6a8174f88f321a1b701d8b Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 01:43:40 -0700 Subject: [PATCH 157/287] refac: styling --- src/lib/components/workspace/Functions.svelte | 2 +- src/lib/components/workspace/Tools.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index 35e308220..5ecfd19f9 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -113,7 +113,7 @@
-
{func.id}
+
{func.id}
{func.meta.description} diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index d2b04ad02..f39d2d391 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -111,7 +111,7 @@
-
{tool.id}
+
{tool.id}
{tool.meta.description} From e4af3852f7101c38411ce7e10c5ff838b9f309d9 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 02:29:22 -0700 Subject: [PATCH 158/287] refac: allow class in tools --- backend/utils/tools.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/utils/tools.py b/backend/utils/tools.py index 5fef2a2b6..5846ed4bd 100644 --- a/backend/utils/tools.py +++ b/backend/utils/tools.py @@ -20,7 +20,9 @@ def get_tools_specs(tools) -> List[dict]: function_list = [ {"name": func, "function": getattr(tools, func)} for func in dir(tools) - if callable(getattr(tools, func)) and not func.startswith("__") + if callable(getattr(tools, func)) + and not func.startswith("__") + and not inspect.isclass(getattr(tools, func)) ] specs = [] From 8345bb55d4f0266b504bcd1c014f448b82d94527 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 02:29:33 -0700 Subject: [PATCH 159/287] refac: styling --- .../chat/Settings/Personalization.svelte | 4 +- .../components/chat/Settings/Valves.svelte | 85 +++++++++++++++++++ src/lib/components/chat/SettingsModal.svelte | 64 ++++++++++---- 3 files changed, 135 insertions(+), 18 deletions(-) create mode 100644 src/lib/components/chat/Settings/Valves.svelte diff --git a/src/lib/components/chat/Settings/Personalization.svelte b/src/lib/components/chat/Settings/Personalization.svelte index 6450344d7..5d86c1fbd 100644 --- a/src/lib/components/chat/Settings/Personalization.svelte +++ b/src/lib/components/chat/Settings/Personalization.svelte @@ -31,7 +31,7 @@ dispatch('save'); }} > -
+
-
+
{ diff --git a/src/lib/components/chat/Settings/Valves.svelte b/src/lib/components/chat/Settings/Valves.svelte new file mode 100644 index 000000000..159688ee9 --- /dev/null +++ b/src/lib/components/chat/Settings/Valves.svelte @@ -0,0 +1,85 @@ + + +
{ + dispatch('save'); + }} +> +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+
+
+
+ +
+ +
+ diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index 716091007..75d656f6b 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/src/lib/components/chat/SettingsModal.svelte @@ -16,6 +16,7 @@ import Personalization from './Settings/Personalization.svelte'; import { updateUserSettings } from '$lib/apis/users'; import { goto } from '$app/navigation'; + import Valves from './Settings/Valves.svelte'; const i18n = getContext('i18n'); @@ -65,8 +66,8 @@ + + +
+
+ +
+ {$i18n.t('Manage Valves')} +
+
- +
+ +
+
-
+
+
+
diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 8973b9eb7..875ebf4eb 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -29,13 +29,15 @@ showChangelog, config, showCallOverlay, - tools + tools, + functions } from '$lib/stores'; import SettingsModal from '$lib/components/chat/SettingsModal.svelte'; import Sidebar from '$lib/components/layout/Sidebar.svelte'; import ChangelogModal from '$lib/components/ChangelogModal.svelte'; import AccountPending from '$lib/components/layout/Overlay/AccountPending.svelte'; + import { getFunctions } from '$lib/apis/functions'; const i18n = getContext('i18n'); @@ -93,6 +95,9 @@ (async () => { tools.set(await getTools(localStorage.token)); })(), + (async () => { + functions.set(await getFunctions(localStorage.token)); + })(), (async () => { banners.set(await getBanners(localStorage.token)); })(), From d362fd027e5873271dbb4f50acde1202ee7465d2 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 12:08:32 -0700 Subject: [PATCH 162/287] feat: user valves integration --- backend/apps/webui/models/functions.py | 28 ++-- backend/apps/webui/models/tools.py | 28 ++-- backend/apps/webui/routers/functions.py | 7 +- src/lib/apis/functions/index.ts | 99 ++++++++++++ src/lib/apis/tools/index.ts | 99 ++++++++++++ .../components/chat/Settings/Valves.svelte | 151 ++++++++++++++++-- 6 files changed, 375 insertions(+), 37 deletions(-) diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py index c1e0dc5dd..cd6320f95 100644 --- a/backend/apps/webui/models/functions.py +++ b/backend/apps/webui/models/functions.py @@ -8,6 +8,8 @@ from apps.webui.internal.db import DB, JSONField from apps.webui.models.users import Users import json +import copy + from config import SRC_LOG_LEVELS @@ -121,14 +123,15 @@ class FunctionsTable: ) -> Optional[dict]: try: user = Users.get_user_by_id(user_id) + user_settings = user.settings.model_dump() # Check if user has "functions" and "valves" settings - if "functions" not in user.settings: - user.settings["functions"] = {} - if "valves" not in user.settings["functions"]: - user.settings["functions"]["valves"] = {} + if "functions" not in user_settings: + user_settings["functions"] = {} + if "valves" not in user_settings["functions"]: + user_settings["functions"]["valves"] = {} - return user.settings["functions"]["valves"].get(id, {}) + return user_settings["functions"]["valves"].get(id, {}) except Exception as e: print(f"An error occurred: {e}") return None @@ -138,20 +141,21 @@ class FunctionsTable: ) -> Optional[dict]: try: user = Users.get_user_by_id(user_id) + user_settings = user.settings.model_dump() # Check if user has "functions" and "valves" settings - if "functions" not in user.settings: - user.settings["functions"] = {} - if "valves" not in user.settings["functions"]: - user.settings["functions"]["valves"] = {} + if "functions" not in user_settings: + user_settings["functions"] = {} + if "valves" not in user_settings["functions"]: + user_settings["functions"]["valves"] = {} - user.settings["functions"]["valves"][id] = valves + user_settings["functions"]["valves"][id] = valves # Update the user settings in the database - query = Users.update_user_by_id(user_id, {"settings": user.settings}) + query = Users.update_user_by_id(user_id, {"settings": user_settings}) query.execute() - return user.settings["functions"]["valves"][id] + return user_settings["functions"]["valves"][id] except Exception as e: print(f"An error occurred: {e}") return None diff --git a/backend/apps/webui/models/tools.py b/backend/apps/webui/models/tools.py index 1592c228f..ab322ac14 100644 --- a/backend/apps/webui/models/tools.py +++ b/backend/apps/webui/models/tools.py @@ -8,6 +8,8 @@ from apps.webui.internal.db import DB, JSONField from apps.webui.models.users import Users import json +import copy + from config import SRC_LOG_LEVELS @@ -112,14 +114,15 @@ class ToolsTable: ) -> Optional[dict]: try: user = Users.get_user_by_id(user_id) + user_settings = user.settings.model_dump() # Check if user has "tools" and "valves" settings - if "tools" not in user.settings: - user.settings["tools"] = {} - if "valves" not in user.settings["tools"]: - user.settings["tools"]["valves"] = {} + if "tools" not in user_settings: + user_settings["tools"] = {} + if "valves" not in user_settings["tools"]: + user_settings["tools"]["valves"] = {} - return user.settings["tools"]["valves"].get(id, {}) + return user_settings["tools"]["valves"].get(id, {}) except Exception as e: print(f"An error occurred: {e}") return None @@ -129,20 +132,21 @@ class ToolsTable: ) -> Optional[dict]: try: user = Users.get_user_by_id(user_id) + user_settings = user.settings.model_dump() # Check if user has "tools" and "valves" settings - if "tools" not in user.settings: - user.settings["tools"] = {} - if "valves" not in user.settings["tools"]: - user.settings["tools"]["valves"] = {} + if "tools" not in user_settings: + user_settings["tools"] = {} + if "valves" not in user_settings["tools"]: + user_settings["tools"]["valves"] = {} - user.settings["tools"]["valves"][id] = valves + user_settings["tools"]["valves"][id] = valves # Update the user settings in the database - query = Users.update_user_by_id(user_id, {"settings": user.settings}) + query = Users.update_user_by_id(user_id, {"settings": user_settings}) query.execute() - return user.settings["tools"]["valves"][id] + return user_settings["tools"]["valves"][id] except Exception as e: print(f"An error occurred: {e}") return None diff --git a/backend/apps/webui/routers/functions.py b/backend/apps/webui/routers/functions.py index 53b9ab130..acf1894fd 100644 --- a/backend/apps/webui/routers/functions.py +++ b/backend/apps/webui/routers/functions.py @@ -145,7 +145,7 @@ async def get_function_user_valves_by_id(id: str, user=Depends(get_verified_user async def get_function_user_valves_spec_by_id( request: Request, id: str, user=Depends(get_verified_user) ): - function = Functions.get_tool_by_id(id) + function = Functions.get_function_by_id(id) if function: if id in request.app.state.FUNCTIONS: function_module = request.app.state.FUNCTIONS[id] @@ -168,8 +168,7 @@ async def get_function_user_valves_spec_by_id( async def update_function_user_valves_by_id( request: Request, id: str, form_data: dict, user=Depends(get_verified_user) ): - - function = Functions.get_tool_by_id(id) + function = Functions.get_function_by_id(id) if function: if id in request.app.state.FUNCTIONS: @@ -211,7 +210,7 @@ async def update_function_user_valves_by_id( @router.post("/id/{id}/update", response_model=Optional[FunctionModel]) -async def update_toolkit_by_id( +async def update_function_by_id( request: Request, id: str, form_data: FunctionForm, user=Depends(get_admin_user) ): function_path = os.path.join(FUNCTIONS_DIR, f"{id}.py") diff --git a/src/lib/apis/functions/index.ts b/src/lib/apis/functions/index.ts index e035ef1c1..530702a3e 100644 --- a/src/lib/apis/functions/index.ts +++ b/src/lib/apis/functions/index.ts @@ -191,3 +191,102 @@ export const deleteFunctionById = async (token: string, id: string) => { return res; }; + +export const getUserValvesById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/functions/id/${id}/valves/user`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const getUserValvesSpecById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/functions/id/${id}/valves/user/spec`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const updateUserValvesById = async (token: string, id: string, valves: object) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/functions/id/${id}/valves/user/update`, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + }, + body: JSON.stringify({ + ...valves + }) + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; diff --git a/src/lib/apis/tools/index.ts b/src/lib/apis/tools/index.ts index 9c620e7b5..25d543feb 100644 --- a/src/lib/apis/tools/index.ts +++ b/src/lib/apis/tools/index.ts @@ -191,3 +191,102 @@ export const deleteToolById = async (token: string, id: string) => { return res; }; + +export const getUserValvesById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/tools/id/${id}/valves/user`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const getUserValvesSpecById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/tools/id/${id}/valves/user/spec`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const updateUserValvesById = async (token: string, id: string, valves: object) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/tools/id/${id}/valves/user/update`, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + }, + body: JSON.stringify({ + ...valves + }) + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; diff --git a/src/lib/components/chat/Settings/Valves.svelte b/src/lib/components/chat/Settings/Valves.svelte index cfa03d907..f41d0e672 100644 --- a/src/lib/components/chat/Settings/Valves.svelte +++ b/src/lib/components/chat/Settings/Valves.svelte @@ -1,12 +1,24 @@
{ + submitHandler(); dispatch('save'); }} > @@ -82,11 +164,62 @@
-
+ {#if selectedId} +
-
-
-
+
+ {#if !loading} + {#if valvesSpec} + {#each Object.keys(valvesSpec.properties) as property, idx} +
+
+
+ {valvesSpec.properties[property].title} + + {#if (valvesSpec?.required ?? []).includes(property)} + *required + {/if} +
+ + +
+ + {#if (valves[property] ?? null) !== null} +
+
+ +
+
+ {/if} +
+ {/each} + {:else} +
No valves
+ {/if} + {:else} + + {/if} +
+ {/if}
From 6ccb5e8f67e0ae26ebc82960dc0b2ef148d2078c Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 12:14:12 -0700 Subject: [PATCH 163/287] feat: user valves support --- backend/main.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/backend/main.py b/backend/main.py index 0b7f23bde..6135d59a3 100644 --- a/backend/main.py +++ b/backend/main.py @@ -278,6 +278,9 @@ async def get_function_call_response( "email": user.email, "name": user.name, "role": user.role, + "valves": Tools.get_user_valves_by_id_and_user_id( + tool_id, user.id + ), }, } @@ -401,6 +404,9 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): "email": user.email, "name": user.name, "role": user.role, + "valves": Functions.get_user_valves_by_id_and_user_id( + filter_id, user.id + ), }, } @@ -871,10 +877,14 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u "email": user.email, "name": user.name, "role": user.role, + "valves": Functions.get_user_valves_by_id_and_user_id( + pipe_id, user.id + ), }, } if form_data["stream"]: + async def stream_content(): if inspect.iscoroutinefunction(pipe): res = await pipe(**param) @@ -1010,7 +1020,12 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): f"{url}/{filter['id']}/filter/outlet", headers=headers, json={ - "user": {"id": user.id, "name": user.name, "role": user.role}, + "user": { + "id": user.id, + "name": user.name, + "email": user.email, + "role": user.role, + }, "body": data, }, ) @@ -1064,6 +1079,9 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): "email": user.email, "name": user.name, "role": user.role, + "valves": Functions.get_user_valves_by_id_and_user_id( + filter_id, user.id + ), }, } From 646832ba8c98febcaa328b270c6fbd9c2b22067c Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 12:23:37 -0700 Subject: [PATCH 164/287] refac --- backend/main.py | 65 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/backend/main.py b/backend/main.py index 6135d59a3..732ef96aa 100644 --- a/backend/main.py +++ b/backend/main.py @@ -278,8 +278,16 @@ async def get_function_call_response( "email": user.email, "name": user.name, "role": user.role, - "valves": Tools.get_user_valves_by_id_and_user_id( - tool_id, user.id + **( + { + "valves": toolkit_module.UserValves( + Tools.get_user_valves_by_id_and_user_id( + tool_id, user.id + ) + ) + } + if hasattr(toolkit_module, "UserValves") + else {} ), }, } @@ -404,8 +412,18 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): "email": user.email, "name": user.name, "role": user.role, - "valves": Functions.get_user_valves_by_id_and_user_id( - filter_id, user.id + **( + { + "valves": function_module.UserValves( + Functions.get_user_valves_by_id_and_user_id( + filter_id, user.id + ) + ) + } + if hasattr( + function_module, "UserValves" + ) + else {} ), }, } @@ -850,12 +868,6 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u pipe = model.get("pipe") if pipe: - form_data["user"] = { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - } async def job(): pipe_id = form_data["model"] @@ -863,7 +875,14 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u pipe_id, sub_pipe_id = pipe_id.split(".", 1) print(pipe_id) - pipe = webui_app.state.FUNCTIONS[pipe_id].pipe + # Check if function is already loaded + if pipe_id not in app.state.FUNCTIONS: + function_module, function_type = load_function_module_by_id(pipe_id) + app.state.FUNCTIONS[pipe_id] = function_module + else: + function_module = app.state.FUNCTIONS[pipe_id] + + pipe = function_module.pipe # Get the signature of the function sig = inspect.signature(pipe) @@ -877,8 +896,16 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u "email": user.email, "name": user.name, "role": user.role, - "valves": Functions.get_user_valves_by_id_and_user_id( - pipe_id, user.id + **( + { + "valves": pipe.UserValves( + Functions.get_user_valves_by_id_and_user_id( + pipe_id, user.id + ) + ) + } + if hasattr(function_module, "UserValves") + else {} ), }, } @@ -1079,8 +1106,16 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): "email": user.email, "name": user.name, "role": user.role, - "valves": Functions.get_user_valves_by_id_and_user_id( - filter_id, user.id + **( + { + "valves": function_module.UserValves( + Functions.get_user_valves_by_id_and_user_id( + filter_id, user.id + ) + ) + } + if hasattr(function_module, "UserValves") + else {} ), }, } From f524238910b5b01cdf22ebb881b9cd9358b78ff2 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 12:24:46 -0700 Subject: [PATCH 165/287] fix --- backend/main.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/main.py b/backend/main.py index 732ef96aa..704f22bfc 100644 --- a/backend/main.py +++ b/backend/main.py @@ -876,11 +876,11 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u print(pipe_id) # Check if function is already loaded - if pipe_id not in app.state.FUNCTIONS: + if pipe_id not in webui_app.state.FUNCTIONS: function_module, function_type = load_function_module_by_id(pipe_id) - app.state.FUNCTIONS[pipe_id] = function_module + webui_app.state.FUNCTIONS[pipe_id] = function_module else: - function_module = app.state.FUNCTIONS[pipe_id] + function_module = webui_app.state.FUNCTIONS[pipe_id] pipe = function_module.pipe From 6ce91de7e0a7226ec51c433289383ff337e136c9 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 12:25:02 -0700 Subject: [PATCH 166/287] fix --- backend/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/main.py b/backend/main.py index 704f22bfc..b223931c9 100644 --- a/backend/main.py +++ b/backend/main.py @@ -898,7 +898,7 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u "role": user.role, **( { - "valves": pipe.UserValves( + "valves": function_module.UserValves( Functions.get_user_valves_by_id_and_user_id( pipe_id, user.id ) From 9205b90af6cb6d4c5f42ca59525c39585fb5973c Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 12:26:03 -0700 Subject: [PATCH 167/287] fix --- backend/main.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/main.py b/backend/main.py index b223931c9..993f775d7 100644 --- a/backend/main.py +++ b/backend/main.py @@ -281,7 +281,7 @@ async def get_function_call_response( **( { "valves": toolkit_module.UserValves( - Tools.get_user_valves_by_id_and_user_id( + **Tools.get_user_valves_by_id_and_user_id( tool_id, user.id ) ) @@ -415,7 +415,7 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): **( { "valves": function_module.UserValves( - Functions.get_user_valves_by_id_and_user_id( + **Functions.get_user_valves_by_id_and_user_id( filter_id, user.id ) ) @@ -899,7 +899,7 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u **( { "valves": function_module.UserValves( - Functions.get_user_valves_by_id_and_user_id( + **Functions.get_user_valves_by_id_and_user_id( pipe_id, user.id ) ) @@ -1109,7 +1109,7 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): **( { "valves": function_module.UserValves( - Functions.get_user_valves_by_id_and_user_id( + **Functions.get_user_valves_by_id_and_user_id( filter_id, user.id ) ) From cf6447eb2a68c7c8da3605d395fabb5ac186569f Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 12:43:30 -0700 Subject: [PATCH 168/287] feat: function exception handler --- backend/main.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/backend/main.py b/backend/main.py index 993f775d7..81a882bb5 100644 --- a/backend/main.py +++ b/backend/main.py @@ -913,10 +913,15 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u if form_data["stream"]: async def stream_content(): - if inspect.iscoroutinefunction(pipe): - res = await pipe(**param) - else: - res = pipe(**param) + try: + if inspect.iscoroutinefunction(pipe): + res = await pipe(**param) + else: + res = pipe(**param) + except Exception as e: + print(f"Error: {e}") + yield f"data: {json.dumps({'error': {'detail':str(e)}})}\n\n" + return if isinstance(res, str): message = stream_message_template(form_data["model"], res) @@ -961,6 +966,16 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u stream_content(), media_type="text/event-stream" ) else: + + try: + if inspect.iscoroutinefunction(pipe): + res = await pipe(**param) + else: + res = pipe(**param) + except Exception as e: + print(f"Error: {e}") + return {"error": {"detail":str(e)}} + if inspect.iscoroutinefunction(pipe): res = await pipe(**param) else: From c1971fd8d7143313bfce3c82a7eb5208ae47bde3 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 13:01:26 -0700 Subject: [PATCH 169/287] refac: show default instead of none --- src/lib/components/chat/Settings/Valves.svelte | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/Settings/Valves.svelte b/src/lib/components/chat/Settings/Valves.svelte index f41d0e672..115dd3bd1 100644 --- a/src/lib/components/chat/Settings/Valves.svelte +++ b/src/lib/components/chat/Settings/Valves.svelte @@ -189,7 +189,13 @@ }} > {#if (valves[property] ?? null) === null} - {$i18n.t('None')} + + {#if (valvesSpec?.required ?? []).includes(property)} + {$i18n.t('None')} + {:else} + {$i18n.t('Default')} + {/if} + {:else} {$i18n.t('Custom')} {/if} From 98c18b3032863406008cd2a98149a286d27b89f5 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 13:13:46 -0700 Subject: [PATCH 170/287] fix: web search --- src/lib/components/chat/Chat.svelte | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index d83eb3cb2..8f8448847 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -600,10 +600,14 @@ files = model.info.meta.knowledge; } const lastUserMessage = messages.filter((message) => message.role === 'user').at(-1); + files = [ ...files, ...(lastUserMessage?.files?.filter((item) => ['doc', 'file', 'collection', 'web_search_results'].includes(item.type) + ) ?? []), + ...(responseMessage?.files?.filter((item) => + ['doc', 'file', 'collection', 'web_search_results'].includes(item.type) ) ?? []) ].filter( // Remove duplicates @@ -844,6 +848,9 @@ ...files, ...(lastUserMessage?.files?.filter((item) => ['doc', 'file', 'collection', 'web_search_results'].includes(item.type) + ) ?? []), + ...(responseMessage?.files?.filter((item) => + ['doc', 'file', 'collection', 'web_search_results'].includes(item.type) ) ?? []) ].filter( // Remove duplicates @@ -1213,6 +1220,7 @@ const getWebSearchResults = async (model: string, parentId: string, responseId: string) => { const responseMessage = history.messages[responseId]; + const userMessage = history.messages[parentId]; responseMessage.statusHistory = [ { @@ -1223,7 +1231,7 @@ ]; messages = messages; - const prompt = history.messages[parentId].content; + const prompt = userMessage.content; let searchQuery = await generateSearchQuery(localStorage.token, model, messages, prompt).catch( (error) => { console.log(error); From d0f34baaa3c9ca899013834cf71cc97ae57c8e75 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 13:21:36 -0700 Subject: [PATCH 171/287] feat: voice interruption toggle --- .../chat/MessageInput/CallOverlay.svelte | 2 +- .../components/chat/Settings/Interface.svelte | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/MessageInput/CallOverlay.svelte b/src/lib/components/chat/MessageInput/CallOverlay.svelte index a9e96783b..bca31f610 100644 --- a/src/lib/components/chat/MessageInput/CallOverlay.svelte +++ b/src/lib/components/chat/MessageInput/CallOverlay.svelte @@ -271,7 +271,7 @@ return; } - if (assistantSpeaking) { + if (assistantSpeaking && !($settings?.voiceInterruption ?? false)) { // Mute the audio if the assistant is speaking analyser.maxDecibels = 0; analyser.minDecibels = -1; diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index a5db91a7b..f8a7019fb 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -32,6 +32,7 @@ let chatDirection: 'LTR' | 'RTL' = 'LTR'; let showEmojiInCall = false; + let voiceInterruption = false; const toggleSplitLargeChunks = async () => { splitLargeChunks = !splitLargeChunks; @@ -58,6 +59,11 @@ saveSettings({ showEmojiInCall: showEmojiInCall }); }; + const toggleVoiceInterruption = async () => { + voiceInterruption = !voiceInterruption; + saveSettings({ voiceInterruption: voiceInterruption }); + }; + const toggleUserLocation = async () => { userLocation = !userLocation; @@ -128,6 +134,7 @@ showUsername = $settings.showUsername ?? false; showEmojiInCall = $settings.showEmojiInCall ?? false; + voiceInterruption = $settings.voiceInterruption ?? false; chatBubble = $settings.chatBubble ?? true; widescreenMode = $settings.widescreenMode ?? false; @@ -399,6 +406,26 @@
{$i18n.t('Voice')}
+
+
+
{$i18n.t('Voice Interruption in Call')}
+ + +
+
+
{$i18n.t('Display Emoji in Call')}
From 3af8c5b03d7bfa04a16079fe9a65e7f046e2dafb Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sat, 22 Jun 2024 13:22:26 -0700 Subject: [PATCH 172/287] refac: wording --- src/lib/components/chat/Settings/Interface.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index f8a7019fb..49632f00e 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -408,7 +408,7 @@
-
{$i18n.t('Voice Interruption in Call')}
+
{$i18n.t('Allow Voice Interruption in Call')}
- - - - - - - - - +
- +
{/each}
diff --git a/src/lib/components/workspace/Tools/ToolMenu.svelte b/src/lib/components/workspace/Tools/ToolMenu.svelte new file mode 100644 index 000000000..9a4177b1e --- /dev/null +++ b/src/lib/components/workspace/Tools/ToolMenu.svelte @@ -0,0 +1,92 @@ + + + { + if (e.detail === false) { + onClose(); + } + }} +> + + + + +
+ + { + shareHandler(); + }} + > + +
{$i18n.t('Share')}
+
+ + { + cloneHandler(); + }} + > + + +
{$i18n.t('Clone')}
+
+ + { + exportHandler(); + }} + > + + +
{$i18n.t('Export')}
+
+ +
+ + { + deleteHandler(); + }} + > + +
{$i18n.t('Delete')}
+
+
+
+
From 57455f084b761d5766ccd7e2e87197cec1754ae4 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 15:51:19 -0700 Subject: [PATCH 185/287] refac: functions ui --- src/lib/components/workspace/Functions.svelte | 189 +++++++----------- .../workspace/Functions/FunctionMenu.svelte | 92 +++++++++ 2 files changed, 169 insertions(+), 112 deletions(-) create mode 100644 src/lib/components/workspace/Functions/FunctionMenu.svelte diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index 5ecfd19f9..25d16ea16 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -20,6 +20,8 @@ import Tooltip from '../common/Tooltip.svelte'; import ConfirmDialog from '../common/ConfirmDialog.svelte'; import { getModels } from '$lib/apis'; + import FunctionMenu from './Functions/FunctionMenu.svelte'; + import EllipsisHorizontal from '../icons/EllipsisHorizontal.svelte'; const i18n = getContext('i18n'); @@ -28,6 +30,54 @@ let showConfirm = false; let query = ''; + + const shareHandler = async (tool) => { + console.log(tool); + }; + + const cloneHandler = async (func) => { + const _function = await getFunctionById(localStorage.token, func.id).catch((error) => { + toast.error(error); + return null; + }); + + if (_function) { + sessionStorage.function = JSON.stringify({ + ..._function, + id: `${_function.id}_clone`, + name: `${_function.name} (Clone)` + }); + goto('/workspace/functions/create'); + } + }; + + const exportHandler = async (func) => { + const _function = await getFunctionById(localStorage.token, func.id).catch((error) => { + toast.error(error); + return null; + }); + + if (_function) { + let blob = new Blob([JSON.stringify([_function])], { + type: 'application/json' + }); + saveAs(blob, `function-${_function.id}-export-${Date.now()}.json`); + } + }; + + const deleteHandler = async (func) => { + const res = await deleteFunctionById(localStorage.token, func.id).catch((error) => { + toast.error(error); + return null; + }); + + if (res) { + toast.success('Function deleted successfully'); + + functions.set(await getFunctions(localStorage.token)); + models.set(await getModels(localStorage.token)); + } + }; @@ -87,18 +137,14 @@ {#each $functions.filter((f) => query === '' || f.name .toLowerCase() .includes(query.toLowerCase()) || f.id.toLowerCase().includes(query.toLowerCase())) as func} -
- - - - - - - - - +
- +
{/each}
diff --git a/src/lib/components/workspace/Functions/FunctionMenu.svelte b/src/lib/components/workspace/Functions/FunctionMenu.svelte new file mode 100644 index 000000000..9a4177b1e --- /dev/null +++ b/src/lib/components/workspace/Functions/FunctionMenu.svelte @@ -0,0 +1,92 @@ + + + { + if (e.detail === false) { + onClose(); + } + }} +> + + + + +
+ + { + shareHandler(); + }} + > + +
{$i18n.t('Share')}
+
+ + { + cloneHandler(); + }} + > + + +
{$i18n.t('Clone')}
+
+ + { + exportHandler(); + }} + > + + +
{$i18n.t('Export')}
+
+ +
+ + { + deleteHandler(); + }} + > + +
{$i18n.t('Delete')}
+
+
+
+
From ecf1d89a8b03d99882b1a652cdb15ce8017b5649 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 15:57:16 -0700 Subject: [PATCH 186/287] refac: prompts ui --- src/lib/components/workspace/Prompts.svelte | 102 ++++++------------ .../workspace/Prompts/PromptMenu.svelte | 92 ++++++++++++++++ 2 files changed, 127 insertions(+), 67 deletions(-) create mode 100644 src/lib/components/workspace/Prompts/PromptMenu.svelte diff --git a/src/lib/components/workspace/Prompts.svelte b/src/lib/components/workspace/Prompts.svelte index 65c8442e8..05884208b 100644 --- a/src/lib/components/workspace/Prompts.svelte +++ b/src/lib/components/workspace/Prompts.svelte @@ -8,13 +8,16 @@ import { createNewPrompt, deletePromptByCommand, getPrompts } from '$lib/apis/prompts'; import { error } from '@sveltejs/kit'; import { goto } from '$app/navigation'; + import PromptMenu from './Prompts/PromptMenu.svelte'; + import EllipsisHorizontal from '../icons/EllipsisHorizontal.svelte'; const i18n = getContext('i18n'); let importFiles = ''; let query = ''; let promptsImportInputElement: HTMLInputElement; - const sharePrompt = async (prompt) => { + + const shareHandler = async (prompt) => { toast.success($i18n.t('Redirecting you to OpenWebUI Community')); const url = 'https://openwebui.com'; @@ -32,7 +35,20 @@ ); }; - const deletePrompt = async (command) => { + const cloneHandler = async (prompt) => { + sessionStorage.prompt = JSON.stringify(prompt); + goto('/workspace/prompts/create'); + }; + + const exportHandler = async (prompt) => { + let blob = new Blob([JSON.stringify([prompt])], { + type: 'application/json' + }); + saveAs(blob, `prompt-export-${Date.now()}.json`); + }; + + const deleteHandler = async (prompt) => { + const command = prompt.command; await deletePromptByCommand(localStorage.token, command); await prompts.set(await getPrompts(localStorage.token)); }; @@ -128,76 +144,28 @@
- - - - - + + +
{/each} diff --git a/src/lib/components/workspace/Prompts/PromptMenu.svelte b/src/lib/components/workspace/Prompts/PromptMenu.svelte new file mode 100644 index 000000000..9a4177b1e --- /dev/null +++ b/src/lib/components/workspace/Prompts/PromptMenu.svelte @@ -0,0 +1,92 @@ + + + { + if (e.detail === false) { + onClose(); + } + }} +> + + + + +
+ + { + shareHandler(); + }} + > + +
{$i18n.t('Share')}
+
+ + { + cloneHandler(); + }} + > + + +
{$i18n.t('Clone')}
+
+ + { + exportHandler(); + }} + > + + +
{$i18n.t('Export')}
+
+ +
+ + { + deleteHandler(); + }} + > + +
{$i18n.t('Delete')}
+
+
+
+
From 7a218d77b7cc2e4a1724775e4ffe91e39a613d69 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 16:03:21 -0700 Subject: [PATCH 187/287] refac: workspace --- src/lib/components/workspace/Documents.svelte | 8 +++- src/lib/components/workspace/Functions.svelte | 39 +++++++++++++++++-- src/lib/components/workspace/Models.svelte | 22 ++++++----- src/lib/components/workspace/Prompts.svelte | 22 ++++++----- src/lib/components/workspace/Tools.svelte | 39 +++++++++++++++++-- 5 files changed, 104 insertions(+), 26 deletions(-) diff --git a/src/lib/components/workspace/Documents.svelte b/src/lib/components/workspace/Documents.svelte index 5e918b6f0..9bb416468 100644 --- a/src/lib/components/workspace/Documents.svelte +++ b/src/lib/components/workspace/Documents.svelte @@ -538,7 +538,9 @@ documentsImportInputElement.click(); }} > -
{$i18n.t('Import Documents Mapping')}
+
+ {$i18n.t('Import Documents Mapping')} +
-
{$i18n.t('Export Documents Mapping')}
+
+ {$i18n.t('Export Documents Mapping')} +
-
+
{func.name}
@@ -246,7 +246,7 @@ functionsImportInputElement.click(); }} > -
{$i18n.t('Import Functions')}
+
{$i18n.t('Import Functions')}
-
{$i18n.t('Export Functions')}
+
{$i18n.t('Export Functions')}
+ + { diff --git a/src/lib/components/workspace/Models.svelte b/src/lib/components/workspace/Models.svelte index e0a5c4fba..ce2f6ba3a 100644 --- a/src/lib/components/workspace/Models.svelte +++ b/src/lib/components/workspace/Models.svelte @@ -256,7 +256,7 @@
-
+
@@ -271,8 +271,8 @@
-
{$i18n.t('Create a model')}
-
{$i18n.t('Customize models for a specific purpose')}
+
{$i18n.t('Create a model')}
+
{$i18n.t('Customize models for a specific purpose')}
@@ -412,7 +412,7 @@ modelsImportInputElement.click(); }} > -
{$i18n.t('Import Models')}
+
{$i18n.t('Import Models')}
-
{$i18n.t('Export Models')}
+
{$i18n.t('Export Models')}
-
{$i18n.t('Made by OpenWebUI Community')}
+
+ {$i18n.t('Made by OpenWebUI Community')} +
-
+ diff --git a/src/lib/components/workspace/Prompts.svelte b/src/lib/components/workspace/Prompts.svelte index 05884208b..b01d2935d 100644 --- a/src/lib/components/workspace/Prompts.svelte +++ b/src/lib/components/workspace/Prompts.svelte @@ -115,7 +115,7 @@
-
{prompt.command}
+
{prompt.command}
{prompt.title}
@@ -213,7 +213,7 @@ promptsImportInputElement.click(); }} > -
{$i18n.t('Import Prompts')}
+
{$i18n.t('Import Prompts')}
-
{$i18n.t('Export Prompts')}
+
{$i18n.t('Export Prompts')}
-
{$i18n.t('Made by OpenWebUI Community')}
+
+ {$i18n.t('Made by OpenWebUI Community')} +
-
+ diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index a11c9f722..9c70a4e52 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -149,7 +149,7 @@ TOOL
-
+
{tool.name}
@@ -242,7 +242,7 @@ toolsImportInputElement.click(); }} > -
{$i18n.t('Import Tools')}
+
{$i18n.t('Import Tools')}
-
{$i18n.t('Export Tools')}
+
{$i18n.t('Export Tools')}
+ + { From 9c57402269b0ed7adf44fc02b332471e9da7822b Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 16:04:33 -0700 Subject: [PATCH 188/287] chore: format --- src/lib/i18n/locales/ar-BH/translation.json | 4 ++++ src/lib/i18n/locales/bg-BG/translation.json | 4 ++++ src/lib/i18n/locales/bn-BD/translation.json | 4 ++++ src/lib/i18n/locales/ca-ES/translation.json | 4 ++++ src/lib/i18n/locales/ceb-PH/translation.json | 4 ++++ src/lib/i18n/locales/de-DE/translation.json | 4 ++++ src/lib/i18n/locales/dg-DG/translation.json | 4 ++++ src/lib/i18n/locales/en-GB/translation.json | 4 ++++ src/lib/i18n/locales/en-US/translation.json | 4 ++++ src/lib/i18n/locales/es-ES/translation.json | 4 ++++ src/lib/i18n/locales/fa-IR/translation.json | 4 ++++ src/lib/i18n/locales/fi-FI/translation.json | 4 ++++ src/lib/i18n/locales/fr-CA/translation.json | 4 ++++ src/lib/i18n/locales/fr-FR/translation.json | 4 ++++ src/lib/i18n/locales/he-IL/translation.json | 4 ++++ src/lib/i18n/locales/hi-IN/translation.json | 4 ++++ src/lib/i18n/locales/hr-HR/translation.json | 4 ++++ src/lib/i18n/locales/it-IT/translation.json | 4 ++++ src/lib/i18n/locales/ja-JP/translation.json | 4 ++++ src/lib/i18n/locales/ka-GE/translation.json | 4 ++++ src/lib/i18n/locales/ko-KR/translation.json | 4 ++++ src/lib/i18n/locales/lt-LT/translation.json | 4 ++++ src/lib/i18n/locales/nb-NO/translation.json | 4 ++++ src/lib/i18n/locales/nl-NL/translation.json | 4 ++++ src/lib/i18n/locales/pa-IN/translation.json | 4 ++++ src/lib/i18n/locales/pl-PL/translation.json | 4 ++++ src/lib/i18n/locales/pt-BR/translation.json | 4 ++++ src/lib/i18n/locales/pt-PT/translation.json | 4 ++++ src/lib/i18n/locales/ru-RU/translation.json | 4 ++++ src/lib/i18n/locales/sr-RS/translation.json | 4 ++++ src/lib/i18n/locales/sv-SE/translation.json | 4 ++++ src/lib/i18n/locales/tk-TW/translation.json | 4 ++++ src/lib/i18n/locales/tr-TR/translation.json | 4 ++++ src/lib/i18n/locales/uk-UA/translation.json | 4 ++++ src/lib/i18n/locales/vi-VN/translation.json | 4 ++++ src/lib/i18n/locales/zh-CN/translation.json | 4 ++++ src/lib/i18n/locales/zh-TW/translation.json | 4 ++++ 37 files changed, 148 insertions(+) diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index a80bc6737..165dc825b 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "حذف {{name}}", "Description": "وصف", "Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل", + "Discover a function": "", "Discover a model": "اكتشف نموذجا", "Discover a prompt": "اكتشاف موجه", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "اكتشاف وتنزيل واستكشاف الإعدادات المسبقة للنموذج", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 5de83dd7d..ad6225eba 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Изтрито {{име}}", "Description": "Описание", "Didn't fully follow instructions": "Не следва инструкциите", + "Discover a function": "", "Discover a model": "Открийте модел", "Discover a prompt": "Откриване на промпт", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Откриване, сваляне и преглед на персонализирани промптове", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Откриване, сваляне и преглед на пресетове на модели", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 32ee1889a..49f0e06ef 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "{{name}} মোছা হয়েছে", "Description": "বিবরণ", "Didn't fully follow instructions": "ইনস্ট্রাকশন সম্পূর্ণ অনুসরণ করা হয়নি", + "Discover a function": "", "Discover a model": "একটি মডেল আবিষ্কার করুন", "Discover a prompt": "একটি প্রম্পট খুঁজে বের করুন", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "কাস্টম প্রম্পটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "মডেল প্রিসেটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 4b9098906..98ae50aa5 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "S'ha eliminat {{name}}", "Description": "Descripció", "Didn't fully follow instructions": "No s'han seguit les instruccions completament", + "Discover a function": "", "Discover a model": "Descobrir un model", "Discover a prompt": "Descobrir una indicació", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Descobrir, descarregar i explorar indicacions personalitzades", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Descobrir, descarregar i explorar models preconfigurats", "Dismissible": "Descartable", "Display Emoji in Call": "Mostrar emojis a la trucada", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index e59eb767a..68e21d8be 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "", "Description": "Deskripsyon", "Didn't fully follow instructions": "", + "Discover a function": "", "Discover a model": "", "Discover a prompt": "Pagkaplag usa ka prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Pagdiskubre, pag-download ug pagsuhid sa mga naandan nga pag-aghat", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Pagdiskobre, pag-download, ug pagsuhid sa mga preset sa template", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index 1414c874c..710aad09f 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Gelöscht {{name}}", "Description": "Beschreibung", "Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt", + "Discover a function": "", "Discover a model": "Entdecken Sie ein Modell", "Discover a prompt": "Einen Prompt entdecken", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Benutzerdefinierte Prompts entdecken, herunterladen und erkunden", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Modellvorgaben entdecken, herunterladen und erkunden", "Dismissible": "ausblendbar", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index b83200ad3..a26e8dda4 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "", "Description": "Description", "Didn't fully follow instructions": "", + "Discover a function": "", "Discover a model": "", "Discover a prompt": "Discover a prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Discover, download, and explore custom prompts", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Discover, download, and explore model presets", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 707630dbc..af9d122bb 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "", "Description": "", "Didn't fully follow instructions": "", + "Discover a function": "", "Discover a model": "", "Discover a prompt": "", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 707630dbc..af9d122bb 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "", "Description": "", "Didn't fully follow instructions": "", + "Discover a function": "", "Discover a model": "", "Discover a prompt": "", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 0acfe4d2f..3394bd90c 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Eliminado {{nombre}}", "Description": "Descripción", "Didn't fully follow instructions": "No siguió las instrucciones", + "Discover a function": "", "Discover a model": "Descubrir un modelo", "Discover a prompt": "Descubre un Prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Descubre, descarga, y explora Prompts personalizados", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Descubre, descarga y explora ajustes preestablecidos de modelos", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 8bf674463..a8b59dca1 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "حذف شده {{name}}", "Description": "توضیحات", "Didn't fully follow instructions": "نمی تواند دستورالعمل را کامل پیگیری کند", + "Discover a function": "", "Discover a model": "کشف یک مدل", "Discover a prompt": "یک اعلان را کشف کنید", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "پرامپت\u200cهای سفارشی را کشف، دانلود و کاوش کنید", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "پیش تنظیمات مدل را کشف، دانلود و کاوش کنید", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 1cf07ac08..00bbd8c00 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Poistettu {{nimi}}", "Description": "Kuvaus", "Didn't fully follow instructions": "Ei noudattanut ohjeita täysin", + "Discover a function": "", "Discover a model": "Tutustu malliin", "Discover a prompt": "Löydä kehote", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Löydä ja lataa mukautettuja kehotteita", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Löydä ja lataa mallien esiasetuksia", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 6949880dc..0d0ba8d32 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Supprimé {{nom}}", "Description": "Description", "Didn't fully follow instructions": "Ne suit pas les instructions", + "Discover a function": "", "Discover a model": "Découvrez un modèle", "Discover a prompt": "Découvrir un prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Découvrir, télécharger et explorer des prompts personnalisés", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Découvrir, télécharger et explorer des préconfigurations de modèles", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index ee402c2e0..103247e52 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "{{name}} supprimé", "Description": "Description", "Didn't fully follow instructions": "N'a pas suivi entièrement les instructions", + "Discover a function": "", "Discover a model": "Découvrir un modèle", "Discover a prompt": "Découvrir un prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Découvrir, télécharger et explorer des prompts personnalisés", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Découvrir, télécharger et explorer des préconfigurations de modèles", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index eea250519..9054fe03e 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "נמחק {{name}}", "Description": "תיאור", "Didn't fully follow instructions": "לא עקב אחרי ההוראות באופן מלא", + "Discover a function": "", "Discover a model": "גלה מודל", "Discover a prompt": "גלה פקודה", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "גלה, הורד, וחקור פקודות מותאמות אישית", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "גלה, הורד, וחקור הגדרות מודל מוגדרות מראש", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 2e37b7640..3ee1cfe1a 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "{{name}} हटा दिया गया", "Description": "विवरण", "Didn't fully follow instructions": "निर्देशों का पूरी तरह से पालन नहीं किया", + "Discover a function": "", "Discover a model": "एक मॉडल की खोज करें", "Discover a prompt": "प्रॉम्प्ट खोजें", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "कस्टम प्रॉम्प्ट को खोजें, डाउनलोड करें और एक्सप्लोर करें", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "मॉडल प्रीसेट खोजें, डाउनलोड करें और एक्सप्लोर करें", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 82733531a..ecdc9057b 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Izbrisano {{name}}", "Description": "Opis", "Didn't fully follow instructions": "Nije u potpunosti slijedio upute", + "Discover a function": "", "Discover a model": "Otkrijte model", "Discover a prompt": "Otkrijte prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Otkrijte, preuzmite i istražite prilagođene prompte", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Otkrijte, preuzmite i istražite unaprijed postavljene modele", "Dismissible": "Odbaciti", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 273689146..0298134db 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Eliminato {{name}}", "Description": "Descrizione", "Didn't fully follow instructions": "Non ha seguito completamente le istruzioni", + "Discover a function": "", "Discover a model": "Scopri un modello", "Discover a prompt": "Scopri un prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Scopri, scarica ed esplora prompt personalizzati", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Scopri, scarica ed esplora i preset del modello", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 6c56e26ed..d91343dad 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "{{name}}を削除しました", "Description": "説明", "Didn't fully follow instructions": "説明に沿って操作していませんでした", + "Discover a function": "", "Discover a model": "モデルを検出する", "Discover a prompt": "プロンプトを見つける", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "カスタムプロンプトを見つけて、ダウンロードして、探索", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "モデルプリセットを見つけて、ダウンロードして、探索", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 700a0151a..78a3841aa 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Deleted {{name}}", "Description": "აღწერა", "Didn't fully follow instructions": "ვერ ყველა ინფორმაციისთვის ვერ ხელახლა ჩაწერე", + "Discover a function": "", "Discover a model": "გაიგეთ მოდელი", "Discover a prompt": "აღმოაჩინეთ მოთხოვნა", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "აღმოაჩინეთ, ჩამოტვირთეთ და შეისწავლეთ მორგებული მოთხოვნები", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "აღმოაჩინეთ, ჩამოტვირთეთ და შეისწავლეთ მოდელის წინასწარ პარამეტრები", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index df8e57aa1..6c8498206 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "{{name}}을(를) 삭제했습니다.", "Description": "설명", "Didn't fully follow instructions": "완전히 지침을 따르지 않음", + "Discover a function": "", "Discover a model": "모델 검색", "Discover a prompt": "프롬프트 검색", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "사용자 정의 프롬프트 검색, 다운로드 및 탐색", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "모델 사전 설정 검색, 다운로드 및 탐색", "Dismissible": "제외가능", "Display Emoji in Call": "콜(call)에서 이모지 표시", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 7417a4f77..c65693bfe 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "", "Description": "Aprašymas", "Didn't fully follow instructions": "Pilnai nesekė instrukcijų", + "Discover a function": "", "Discover a model": "", "Discover a prompt": "Atrasti užklausas", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Atrasti ir parsisiųsti užklausas", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Atrasti ir parsisiųsti modelių konfigūracija", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 6c03decf2..f3c91c88d 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Slettet {{name}}", "Description": "Beskrivelse", "Didn't fully follow instructions": "Fulgte ikke instruksjonene fullt ut", + "Discover a function": "", "Discover a model": "Oppdag en modell", "Discover a prompt": "Oppdag en prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Oppdag, last ned og utforsk egendefinerte prompts", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Oppdag, last ned og utforsk modellforhåndsinnstillinger", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index b8d16e428..d51f7b590 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "{{name}} verwijderd", "Description": "Beschrijving", "Didn't fully follow instructions": "Ik heb niet alle instructies volgt", + "Discover a function": "", "Discover a model": "Ontdek een model", "Discover a prompt": "Ontdek een prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Ontdek, download en verken aangepaste prompts", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Ontdek, download en verken model presets", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index e20a61581..03c34cbb5 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ {{name}}", "Description": "ਵਰਣਨਾ", "Didn't fully follow instructions": "ਹਦਾਇਤਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਫਾਲੋ ਨਹੀਂ ਕੀਤਾ", + "Discover a function": "", "Discover a model": "ਇੱਕ ਮਾਡਲ ਲੱਭੋ", "Discover a prompt": "ਇੱਕ ਪ੍ਰੰਪਟ ਖੋਜੋ", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "ਕਸਟਮ ਪ੍ਰੰਪਟਾਂ ਨੂੰ ਖੋਜੋ, ਡਾਊਨਲੋਡ ਕਰੋ ਅਤੇ ਪੜਚੋਲ ਕਰੋ", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "ਮਾਡਲ ਪ੍ਰੀਸੈਟਾਂ ਨੂੰ ਖੋਜੋ, ਡਾਊਨਲੋਡ ਕਰੋ ਅਤੇ ਪੜਚੋਲ ਕਰੋ", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index efae23640..c57a1abe6 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Usunięto {{name}}", "Description": "Opis", "Didn't fully follow instructions": "Nie postępował zgodnie z instrukcjami", + "Discover a function": "", "Discover a model": "Odkryj model", "Discover a prompt": "Odkryj prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Odkryj, pobierz i eksploruj niestandardowe prompty", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Odkryj, pobierz i eksploruj ustawienia modeli", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 13bc77bfa..669209a5a 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Excluído {{nome}}", "Description": "Descrição", "Didn't fully follow instructions": "Não seguiu instruções com precisão", + "Discover a function": "", "Discover a model": "Descubra um modelo", "Discover a prompt": "Descobrir um prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Descubra, baixe e explore prompts personalizados", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Descubra, baixe e explore predefinições de modelo", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 45ca4d9d6..d98c00276 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Apagado {{name}}", "Description": "Descrição", "Didn't fully follow instructions": "Não seguiu instruções com precisão", + "Discover a function": "", "Discover a model": "Descubra um modelo", "Discover a prompt": "Descobrir um prompt", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Descubra, descarregue e explore prompts personalizados", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Descubra, descarregue e explore predefinições de modelo", "Dismissible": "Dispensável", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 9e8e3a44c..e8e3431b8 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Удалено {{name}}", "Description": "Описание", "Didn't fully follow instructions": "Не полностью следул инструкциям", + "Discover a function": "", "Discover a model": "Откройте для себя модель", "Discover a prompt": "Найти промт", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Находите, загружайте и исследуйте настраиваемые промты", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Находите, загружайте и исследуйте предустановки модели", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index d0e395c23..f4483c723 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Избрисано {{наме}}", "Description": "Опис", "Didn't fully follow instructions": "Упутства нису праћена у потпуности", + "Discover a function": "", "Discover a model": "Откријте модел", "Discover a prompt": "Откриј упит", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Откријте, преузмите и истражите прилагођене упите", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Откријте, преузмите и истражите образце модела", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index e20551de5..d55eedaef 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Borttagen {{name}}", "Description": "Beskrivning", "Didn't fully follow instructions": "Följde inte instruktionerna", + "Discover a function": "", "Discover a model": "Upptäck en modell", "Discover a prompt": "Upptäck en instruktion", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Upptäck, ladda ner och utforska anpassade instruktioner", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Upptäck, ladda ner och utforska modellförinställningar", "Dismissible": "Kan stängas", "Display Emoji in Call": "Visa Emoji under samtal", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index 707630dbc..af9d122bb 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "", "Description": "", "Didn't fully follow instructions": "", + "Discover a function": "", "Discover a model": "", "Discover a prompt": "", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index 41f39592e..de284a4c8 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "{{name}} silindi", "Description": "Açıklama", "Didn't fully follow instructions": "Talimatları tam olarak takip etmedi", + "Discover a function": "", "Discover a model": "Bir model keşfedin", "Discover a prompt": "Bir prompt keşfedin", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Özel promptları keşfedin, indirin ve inceleyin", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Model ön ayarlarını keşfedin, indirin ve inceleyin", "Dismissible": "", "Display Emoji in Call": "", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index ba33b445e..814f657b5 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Видалено {{name}}", "Description": "Опис", "Didn't fully follow instructions": "Не повністю дотримувалися інструкцій", + "Discover a function": "", "Discover a model": "Знайдіть модель", "Discover a prompt": "Знайти промт", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Знайдіть, завантажте та досліджуйте налаштовані промти", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Знайдіть, завантажте та досліджуйте налаштовані налаштування моделі", "Dismissible": "Неприйнятно", "Display Emoji in Call": "Відображати емодзі у викликах", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 18558a9df..60db86300 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "Đã xóa {{name}}", "Description": "Mô tả", "Didn't fully follow instructions": "Không tuân theo chỉ dẫn một cách đầy đủ", + "Discover a function": "", "Discover a model": "Khám phá model", "Discover a prompt": "Khám phá thêm prompt mới", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "Tìm kiếm, tải về và khám phá thêm các prompt tùy chỉnh", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "Tìm kiếm, tải về và khám phá thêm các thiết lập mô hình sẵn", "Dismissible": "Có thể loại bỏ", "Display Emoji in Call": "Hiển thị Emoji trong cuộc gọi", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 6f2b5ce78..28e68e2e6 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "已删除 {{name}}", "Description": "描述", "Didn't fully follow instructions": "没有完全遵照指示", + "Discover a function": "", "Discover a model": "发现更多模型", "Discover a prompt": "发现更多提示词", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "发现、下载并探索更多自定义提示词", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "发现、下载并探索更多模型预设", "Dismissible": "是否可关闭", "Display Emoji in Call": "在通话中显示 Emoji 表情符号", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 7cc074dba..9c7d53458 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -165,9 +165,13 @@ "Deleted {{name}}": "已刪除 {{name}}", "Description": "描述", "Didn't fully follow instructions": "未完全遵循指示", + "Discover a function": "", "Discover a model": "發現新模型", "Discover a prompt": "發現新提示詞", + "Discover a tool": "", + "Discover, download, and explore custom functions": "", "Discover, download, and explore custom prompts": "發現、下載並探索自訂提示詞", + "Discover, download, and explore custom tools": "", "Discover, download, and explore model presets": "發現、下載並探索模型預設值", "Dismissible": "可忽略", "Display Emoji in Call": "在呼叫中顯示表情符號", From e52ed258f08954bbfb826efc175f3855ef1c963e Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 17:18:36 -0700 Subject: [PATCH 189/287] refac: styling --- src/lib/components/admin/SettingsModal.svelte | 43 --- .../Playground.svelte | 0 src/lib/components/workspace/Functions.svelte | 2 +- src/lib/components/workspace/Prompts.svelte | 2 +- src/lib/components/workspace/Tools.svelte | 2 +- .../components/workspace/ValvesModal.svelte | 337 ++++++++++++++++++ src/routes/(app)/playground/+page.svelte | 2 +- 7 files changed, 341 insertions(+), 47 deletions(-) delete mode 100644 src/lib/components/admin/SettingsModal.svelte rename src/lib/components/{workspace => playground}/Playground.svelte (100%) create mode 100644 src/lib/components/workspace/ValvesModal.svelte diff --git a/src/lib/components/admin/SettingsModal.svelte b/src/lib/components/admin/SettingsModal.svelte deleted file mode 100644 index 0ed32e551..000000000 --- a/src/lib/components/admin/SettingsModal.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - - -
-
-
{$i18n.t('Admin Settings')}
- -
-
-
diff --git a/src/lib/components/workspace/Playground.svelte b/src/lib/components/playground/Playground.svelte similarity index 100% rename from src/lib/components/workspace/Playground.svelte rename to src/lib/components/playground/Playground.svelte diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index a7de54f91..ffa5c8b4b 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -168,7 +168,7 @@
-
+ -
+ -
+
+ import { toast } from 'svelte-sonner'; + import { createEventDispatcher } from 'svelte'; + import { onMount, getContext } from 'svelte'; + import { addUser } from '$lib/apis/auths'; + + import Modal from '../common/Modal.svelte'; + import { WEBUI_BASE_URL } from '$lib/constants'; + + const i18n = getContext('i18n'); + const dispatch = createEventDispatcher(); + + export let show = false; + + let loading = false; + let tab = ''; + let inputFiles; + + let _user = { + name: '', + email: '', + password: '', + role: 'user' + }; + + $: if (show) { + _user = { + name: '', + email: '', + password: '', + role: 'user' + }; + } + + const submitHandler = async () => { + const stopLoading = () => { + dispatch('save'); + loading = false; + }; + + if (tab === '') { + loading = true; + + const res = await addUser( + localStorage.token, + _user.name, + _user.email, + _user.password, + _user.role + ).catch((error) => { + toast.error(error); + }); + + if (res) { + stopLoading(); + show = false; + } + } else { + if (inputFiles) { + loading = true; + + const file = inputFiles[0]; + const reader = new FileReader(); + + reader.onload = async (e) => { + const csv = e.target.result; + const rows = csv.split('\n'); + + let userCount = 0; + + for (const [idx, row] of rows.entries()) { + const columns = row.split(',').map((col) => col.trim()); + console.log(idx, columns); + + if (idx > 0) { + if ( + columns.length === 4 && + ['admin', 'user', 'pending'].includes(columns[3].toLowerCase()) + ) { + const res = await addUser( + localStorage.token, + columns[0], + columns[1], + columns[2], + columns[3].toLowerCase() + ).catch((error) => { + toast.error(`Row ${idx + 1}: ${error}`); + return null; + }); + + if (res) { + userCount = userCount + 1; + } + } else { + toast.error(`Row ${idx + 1}: invalid format.`); + } + } + } + + toast.success(`Successfully imported ${userCount} users.`); + inputFiles = null; + const uploadInputElement = document.getElementById('upload-user-csv-input'); + + if (uploadInputElement) { + uploadInputElement.value = null; + } + + stopLoading(); + }; + + reader.readAsText(file); + } else { + toast.error($i18n.t('File not found.')); + } + } + }; + + + +
+
+
{$i18n.t('Add User')}
+ +
+ +
+
+ + + diff --git a/src/routes/(app)/playground/+page.svelte b/src/routes/(app)/playground/+page.svelte index 40c1ce4d7..32e6e25be 100644 --- a/src/routes/(app)/playground/+page.svelte +++ b/src/routes/(app)/playground/+page.svelte @@ -1,7 +1,7 @@
Date: Sun, 23 Jun 2024 17:22:11 -0700 Subject: [PATCH 190/287] chore: requirements --- backend/requirements.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index be0e32c7d..90f6548e7 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -17,7 +17,9 @@ peewee-migrate==1.12.2 psycopg2-binary==2.9.9 PyMySQL==1.1.1 bcrypt==4.1.3 - +SQLAlchemy +pymongo +redis boto3==1.34.110 argon2-cffi==23.1.0 From 5d7de927e52c26bd92bf946a6bdaf5d2caa012b8 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 17:34:25 -0700 Subject: [PATCH 191/287] enh: valve field desc support --- src/lib/components/chat/Settings/Valves.svelte | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/Settings/Valves.svelte b/src/lib/components/chat/Settings/Valves.svelte index 115dd3bd1..1001ddb28 100644 --- a/src/lib/components/chat/Settings/Valves.svelte +++ b/src/lib/components/chat/Settings/Valves.svelte @@ -203,7 +203,7 @@
{#if (valves[property] ?? null) !== null} -
+
{/if} + + {#if (valvesSpec.properties[property]?.description ?? null) !== null} +
+ {valvesSpec.properties[property].description} +
+ {/if}
{/each} {:else} From fc2001da8302e49c2f3438ded6e8a5b548eeb471 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 17:41:59 -0700 Subject: [PATCH 192/287] refac: styling --- src/lib/components/workspace/Functions.svelte | 24 +++++++++++++----- .../workspace/Functions/FunctionMenu.svelte | 25 +++++++++++++++++++ src/lib/components/workspace/Tools.svelte | 19 +++++++++----- .../workspace/Tools/ToolMenu.svelte | 25 +++++++++++++++++++ .../components/workspace/ValvesModal.svelte | 2 +- 5 files changed, 82 insertions(+), 13 deletions(-) diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index ffa5c8b4b..07c89eff8 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -22,6 +22,7 @@ import { getModels } from '$lib/apis'; import FunctionMenu from './Functions/FunctionMenu.svelte'; import EllipsisHorizontal from '../icons/EllipsisHorizontal.svelte'; + import Switch from '../common/Switch.svelte'; const i18n = getContext('i18n'); @@ -169,11 +170,10 @@
- - + { + goto(`/workspace/functions/edit?id=${encodeURIComponent(func.id)}`); + }} shareHandler={() => { shareHandler(func); }} @@ -214,6 +222,10 @@ + +
+ +
{/each} diff --git a/src/lib/components/workspace/Functions/FunctionMenu.svelte b/src/lib/components/workspace/Functions/FunctionMenu.svelte index 9a4177b1e..93a26b118 100644 --- a/src/lib/components/workspace/Functions/FunctionMenu.svelte +++ b/src/lib/components/workspace/Functions/FunctionMenu.svelte @@ -15,6 +15,7 @@ const i18n = getContext('i18n'); + export let editHandler: Function; export let shareHandler: Function; export let cloneHandler: Function; export let exportHandler: Function; @@ -44,6 +45,30 @@ align="start" transition={flyAndScale} > + { + editHandler(); + }} + > + + + + +
{$i18n.t('Edit')}
+
+ { diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index c0ac5b605..184f5942a 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -165,11 +165,10 @@
- - + { + goto(`/workspace/tools/edit?id=${encodeURIComponent(tool.id)}`); + }} shareHandler={() => { shareHandler(tool); }} diff --git a/src/lib/components/workspace/Tools/ToolMenu.svelte b/src/lib/components/workspace/Tools/ToolMenu.svelte index 9a4177b1e..93a26b118 100644 --- a/src/lib/components/workspace/Tools/ToolMenu.svelte +++ b/src/lib/components/workspace/Tools/ToolMenu.svelte @@ -15,6 +15,7 @@ const i18n = getContext('i18n'); + export let editHandler: Function; export let shareHandler: Function; export let cloneHandler: Function; export let exportHandler: Function; @@ -44,6 +45,30 @@ align="start" transition={flyAndScale} > + { + editHandler(); + }} + > + + + + +
{$i18n.t('Edit')}
+
+ { diff --git a/src/lib/components/workspace/ValvesModal.svelte b/src/lib/components/workspace/ValvesModal.svelte index 8538ba04a..58434a559 100644 --- a/src/lib/components/workspace/ValvesModal.svelte +++ b/src/lib/components/workspace/ValvesModal.svelte @@ -119,7 +119,7 @@
-
{$i18n.t('Add User')}
+
{$i18n.t('Valves')}
-
+
From 120b1857b21ea25f7a2dddc5e6e288f3ce0a6ebe Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 18:05:33 -0700 Subject: [PATCH 194/287] enh: valves --- .../016_add_valves_and_is_active.py | 50 +++++++++++++++++++ backend/apps/webui/models/functions.py | 8 +++ backend/apps/webui/models/tools.py | 26 ++++++++++ src/routes/(app)/workspace/+layout.svelte | 2 +- 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 backend/apps/webui/internal/migrations/016_add_valves_and_is_active.py diff --git a/backend/apps/webui/internal/migrations/016_add_valves_and_is_active.py b/backend/apps/webui/internal/migrations/016_add_valves_and_is_active.py new file mode 100644 index 000000000..e3af521b7 --- /dev/null +++ b/backend/apps/webui/internal/migrations/016_add_valves_and_is_active.py @@ -0,0 +1,50 @@ +"""Peewee migrations -- 009_add_models.py. + +Some examples (model - class or model name):: + + > Model = migrator.orm['table_name'] # Return model in current state by name + > Model = migrator.ModelClass # Return model in current state by name + + > migrator.sql(sql) # Run custom SQL + > migrator.run(func, *args, **kwargs) # Run python function with the given args + > migrator.create_model(Model) # Create a model (could be used as decorator) + > migrator.remove_model(model, cascade=True) # Remove a model + > migrator.add_fields(model, **fields) # Add fields to a model + > migrator.change_fields(model, **fields) # Change fields + > migrator.remove_fields(model, *field_names, cascade=True) + > migrator.rename_field(model, old_field_name, new_field_name) + > migrator.rename_table(model, new_table_name) + > migrator.add_index(model, *col_names, unique=False) + > migrator.add_not_null(model, *field_names) + > migrator.add_default(model, field_name, default) + > migrator.add_constraint(model, name, sql) + > migrator.drop_index(model, *col_names) + > migrator.drop_not_null(model, *field_names) + > migrator.drop_constraints(model, *constraints) + +""" + +from contextlib import suppress + +import peewee as pw +from peewee_migrate import Migrator + + +with suppress(ImportError): + import playhouse.postgres_ext as pw_pext + + +def migrate(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your migrations here.""" + + migrator.add_fields("tool", valves=pw.TextField(null=True)) + migrator.add_fields("function", valves=pw.TextField(null=True)) + migrator.add_fields("function", is_active=pw.BooleanField(default=False)) + + +def rollback(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your rollback migrations here.""" + + migrator.remove_fields("tool", "valves") + migrator.remove_fields("function", "valves") + migrator.remove_fields("function", "is_active") diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py index cd6320f95..779eef9ef 100644 --- a/backend/apps/webui/models/functions.py +++ b/backend/apps/webui/models/functions.py @@ -28,6 +28,8 @@ class Function(Model): type = TextField() content = TextField() meta = JSONField() + valves = JSONField() + is_active = BooleanField(default=False) updated_at = BigIntegerField() created_at = BigIntegerField() @@ -46,6 +48,7 @@ class FunctionModel(BaseModel): type: str content: str meta: FunctionMeta + is_active: bool updated_at: int # timestamp in epoch created_at: int # timestamp in epoch @@ -61,6 +64,7 @@ class FunctionResponse(BaseModel): type: str name: str meta: FunctionMeta + is_active: bool updated_at: int # timestamp in epoch created_at: int # timestamp in epoch @@ -72,6 +76,10 @@ class FunctionForm(BaseModel): meta: FunctionMeta +class FunctionValves(BaseModel): + valves: Optional[dict] = None + + class FunctionsTable: def __init__(self, db): self.db = db diff --git a/backend/apps/webui/models/tools.py b/backend/apps/webui/models/tools.py index ab322ac14..0f5755e39 100644 --- a/backend/apps/webui/models/tools.py +++ b/backend/apps/webui/models/tools.py @@ -28,6 +28,7 @@ class Tool(Model): content = TextField() specs = JSONField() meta = JSONField() + valves = JSONField() updated_at = BigIntegerField() created_at = BigIntegerField() @@ -71,6 +72,10 @@ class ToolForm(BaseModel): meta: ToolMeta +class ToolValves(BaseModel): + valves: Optional[dict] = None + + class ToolsTable: def __init__(self, db): self.db = db @@ -109,6 +114,27 @@ class ToolsTable: def get_tools(self) -> List[ToolModel]: return [ToolModel(**model_to_dict(tool)) for tool in Tool.select()] + def get_tool_valves_by_id(self, id: str) -> Optional[ToolValves]: + try: + tool = Tool.get(Tool.id == id) + return ToolValves(**model_to_dict(tool)) + except Exception as e: + print(f"An error occurred: {e}") + return None + + def update_tool_valves_by_id(self, id: str, valves: dict) -> Optional[ToolValves]: + try: + query = Tool.update( + **{"valves": valves}, + updated_at=int(time.time()), + ).where(Tool.id == id) + query.execute() + + tool = Tool.get(Tool.id == id) + return ToolValves(**model_to_dict(tool)) + except: + return None + def get_user_valves_by_id_and_user_id( self, id: str, user_id: str ) -> Optional[dict]: diff --git a/src/routes/(app)/workspace/+layout.svelte b/src/routes/(app)/workspace/+layout.svelte index 46e0f63c4..794bd7ed5 100644 --- a/src/routes/(app)/workspace/+layout.svelte +++ b/src/routes/(app)/workspace/+layout.svelte @@ -9,7 +9,7 @@ const i18n = getContext('i18n'); onMount(async () => { - functions.set(await getFunctions(localStorage.token)); + // functions.set(await getFunctions(localStorage.token)); }); From 3034f3d310f22a992b26be2aed5ba199a61f24be Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 18:06:41 -0700 Subject: [PATCH 195/287] refac: styling --- src/lib/components/chat/Settings/Valves.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/chat/Settings/Valves.svelte b/src/lib/components/chat/Settings/Valves.svelte index 1001ddb28..d834bd014 100644 --- a/src/lib/components/chat/Settings/Valves.svelte +++ b/src/lib/components/chat/Settings/Valves.svelte @@ -203,7 +203,7 @@
{#if (valves[property] ?? null) !== null} -
+
Date: Sun, 23 Jun 2024 18:34:42 -0700 Subject: [PATCH 196/287] feat: function toggle support --- backend/apps/webui/main.py | 2 +- backend/apps/webui/models/functions.py | 60 ++++- backend/apps/webui/routers/functions.py | 77 ++++++ backend/apps/webui/routers/tools.py | 50 ++++ backend/main.py | 1 - src/lib/apis/functions/index.ts | 99 +++++++ src/lib/components/workspace/Functions.svelte | 10 +- .../components/workspace/ValvesModal.svelte | 248 ++++-------------- 8 files changed, 338 insertions(+), 209 deletions(-) diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index a9f7fb286..a8f45aff0 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -103,7 +103,7 @@ async def get_status(): async def get_pipe_models(): - pipes = Functions.get_functions_by_type("pipe") + pipes = Functions.get_functions_by_type("pipe", active_only=True) pipe_models = [] for pipe in pipes: diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py index 779eef9ef..6741f2d10 100644 --- a/backend/apps/webui/models/functions.py +++ b/backend/apps/webui/models/functions.py @@ -48,7 +48,7 @@ class FunctionModel(BaseModel): type: str content: str meta: FunctionMeta - is_active: bool + is_active: bool = False updated_at: int # timestamp in epoch created_at: int # timestamp in epoch @@ -115,16 +115,56 @@ class FunctionsTable: except: return None - def get_functions(self) -> List[FunctionModel]: - return [ - FunctionModel(**model_to_dict(function)) for function in Function.select() - ] + def get_functions(self, active_only=False) -> List[FunctionModel]: + if active_only: + return [ + FunctionModel(**model_to_dict(function)) + for function in Function.select().where(Function.is_active == True) + ] + else: + return [ + FunctionModel(**model_to_dict(function)) + for function in Function.select() + ] - def get_functions_by_type(self, type: str) -> List[FunctionModel]: - return [ - FunctionModel(**model_to_dict(function)) - for function in Function.select().where(Function.type == type) - ] + def get_functions_by_type( + self, type: str, active_only=False + ) -> List[FunctionModel]: + if active_only: + return [ + FunctionModel(**model_to_dict(function)) + for function in Function.select().where( + Function.type == type, Function.is_active == True + ) + ] + else: + return [ + FunctionModel(**model_to_dict(function)) + for function in Function.select().where(Function.type == type) + ] + + def get_function_valves_by_id(self, id: str) -> Optional[FunctionValves]: + try: + function = Function.get(Function.id == id) + return FunctionValves(**model_to_dict(function)) + except Exception as e: + print(f"An error occurred: {e}") + return None + + def update_function_valves_by_id( + self, id: str, valves: dict + ) -> Optional[FunctionValves]: + try: + query = Function.update( + **{"valves": valves}, + updated_at=int(time.time()), + ).where(Function.id == id) + query.execute() + + function = Function.get(Function.id == id) + return FunctionValves(**model_to_dict(function)) + except: + return None def get_user_valves_by_id_and_user_id( self, id: str, user_id: str diff --git a/backend/apps/webui/routers/functions.py b/backend/apps/webui/routers/functions.py index acf1894fd..8c6454eac 100644 --- a/backend/apps/webui/routers/functions.py +++ b/backend/apps/webui/routers/functions.py @@ -117,6 +117,56 @@ async def get_function_by_id(id: str, user=Depends(get_admin_user)): ) +############################ +# GetFunctionValves +############################ + + +@router.get("/id/{id}/valves", response_model=Optional[dict]) +async def get_function_valves_by_id(id: str, user=Depends(get_admin_user)): + function = Functions.get_function_by_id(id) + if function: + try: + valves = Functions.get_function_valves_by_id(id) + return valves + except Exception as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + +############################ +# UpdateToolValves +############################ + + +@router.post("/id/{id}/valves/update", response_model=Optional[dict]) +async def update_toolkit_valves_by_id( + id: str, form_data: dict, user=Depends(get_admin_user) +): + function = Functions.get_function_by_id(id) + if function: + try: + valves = Functions.update_function_valves_by_id(id, form_data) + return valves + except Exception as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + ############################ # FunctionUserValves ############################ @@ -204,6 +254,33 @@ async def update_function_user_valves_by_id( ) +############################ +# ToggleFunctionById +############################ + + +@router.post("/id/{id}/toggle", response_model=Optional[FunctionModel]) +async def toggle_function_by_id(id: str, user=Depends(get_admin_user)): + function = Functions.get_function_by_id(id) + if function: + function = Functions.update_function_by_id( + id, {"is_active": not function.is_active} + ) + + if function: + return function + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error updating function"), + ) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + ############################ # UpdateFunctionById ############################ diff --git a/backend/apps/webui/routers/tools.py b/backend/apps/webui/routers/tools.py index c71d2f01c..7988acc86 100644 --- a/backend/apps/webui/routers/tools.py +++ b/backend/apps/webui/routers/tools.py @@ -123,6 +123,56 @@ async def get_toolkit_by_id(id: str, user=Depends(get_admin_user)): ) +############################ +# GetToolValves +############################ + + +@router.get("/id/{id}/valves", response_model=Optional[dict]) +async def get_toolkit_valves_by_id(id: str, user=Depends(get_admin_user)): + toolkit = Tools.get_tool_by_id(id) + if toolkit: + try: + valves = Tools.get_tool_valves_by_id(id) + return valves + except Exception as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + +############################ +# UpdateToolValves +############################ + + +@router.post("/id/{id}/valves/update", response_model=Optional[dict]) +async def update_toolkit_valves_by_id( + id: str, form_data: dict, user=Depends(get_admin_user) +): + toolkit = Tools.get_tool_by_id(id) + if toolkit: + try: + valves = Tools.update_tool_valves_by_id(id, form_data) + return valves + except Exception as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + ############################ # ToolUserValves ############################ diff --git a/backend/main.py b/backend/main.py index 7dda4e557..02552f209 100644 --- a/backend/main.py +++ b/backend/main.py @@ -863,7 +863,6 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u pipe = model.get("pipe") if pipe: - async def job(): pipe_id = form_data["model"] if "." in pipe_id: diff --git a/src/lib/apis/functions/index.ts b/src/lib/apis/functions/index.ts index 530702a3e..c8607b091 100644 --- a/src/lib/apis/functions/index.ts +++ b/src/lib/apis/functions/index.ts @@ -192,6 +192,105 @@ export const deleteFunctionById = async (token: string, id: string) => { return res; }; +export const toggleFunctionById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/functions/id/${id}/toggle`, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const getFunctionValvesById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/functions/id/${id}/valves`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const updateFunctionValvesById = async (token: string, id: string, valves: object) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/functions/id/${id}/valves/update`, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + }, + body: JSON.stringify({ + ...valves + }) + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + export const getUserValvesById = async (token: string, id: string) => { let error = null; diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index b389d6eab..fc8e7a451 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -13,7 +13,8 @@ deleteFunctionById, exportFunctions, getFunctionById, - getFunctions + getFunctions, + toggleFunctionById } from '$lib/apis/functions'; import ArrowDownTray from '../icons/ArrowDownTray.svelte'; @@ -224,7 +225,12 @@
- + { + toggleFunctionById(localStorage.token, func.id); + }} + />
diff --git a/src/lib/components/workspace/ValvesModal.svelte b/src/lib/components/workspace/ValvesModal.svelte index 58434a559..f67d948a9 100644 --- a/src/lib/components/workspace/ValvesModal.svelte +++ b/src/lib/components/workspace/ValvesModal.svelte @@ -5,16 +5,16 @@ import { addUser } from '$lib/apis/auths'; import Modal from '../common/Modal.svelte'; - import { WEBUI_BASE_URL } from '$lib/constants'; const i18n = getContext('i18n'); const dispatch = createEventDispatcher(); export let show = false; + export let type = 'tool'; + export let id = null; + let loading = false; - let tab = ''; - let inputFiles; let _user = { name: '', @@ -23,96 +23,11 @@ role: 'user' }; - $: if (show) { - _user = { - name: '', - email: '', - password: '', - role: 'user' - }; - } - const submitHandler = async () => { const stopLoading = () => { dispatch('save'); loading = false; }; - - if (tab === '') { - loading = true; - - const res = await addUser( - localStorage.token, - _user.name, - _user.email, - _user.password, - _user.role - ).catch((error) => { - toast.error(error); - }); - - if (res) { - stopLoading(); - show = false; - } - } else { - if (inputFiles) { - loading = true; - - const file = inputFiles[0]; - const reader = new FileReader(); - - reader.onload = async (e) => { - const csv = e.target.result; - const rows = csv.split('\n'); - - let userCount = 0; - - for (const [idx, row] of rows.entries()) { - const columns = row.split(',').map((col) => col.trim()); - console.log(idx, columns); - - if (idx > 0) { - if ( - columns.length === 4 && - ['admin', 'user', 'pending'].includes(columns[3].toLowerCase()) - ) { - const res = await addUser( - localStorage.token, - columns[0], - columns[1], - columns[2], - columns[3].toLowerCase() - ).catch((error) => { - toast.error(`Row ${idx + 1}: ${error}`); - return null; - }); - - if (res) { - userCount = userCount + 1; - } - } else { - toast.error(`Row ${idx + 1}: invalid format.`); - } - } - } - - toast.success(`Successfully imported ${userCount} users.`); - inputFiles = null; - const uploadInputElement = document.getElementById('upload-user-csv-input'); - - if (uploadInputElement) { - uploadInputElement.value = null; - } - - stopLoading(); - }; - - reader.readAsText(file); - } else { - toast.error($i18n.t('File not found.')); - } - } }; @@ -147,126 +62,69 @@ submitHandler(); }} > -
- - - -
- {#if tab === ''} -
-
{$i18n.t('Role')}
+
+
{$i18n.t('Role')}
-
- -
+
+
+
-
-
{$i18n.t('Name')}
+
+
{$i18n.t('Name')}
-
- -
+
+
+
-
+
-
-
{$i18n.t('Email')}
+
+
{$i18n.t('Email')}
-
- -
+
+
+
-
-
{$i18n.t('Password')}
+
+
{$i18n.t('Password')}
-
- -
+
+
- {:else if tab === 'import'} -
-
- - - -
- -
- ⓘ {$i18n.t( - 'Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.' - )} - - {$i18n.t('Click here to download user import template file.')} - -
-
- {/if} +
From 3a629ffe0009cf3cbceccc6af53f0da03cbeb9c2 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 18:39:27 -0700 Subject: [PATCH 197/287] feat: global filter --- backend/main.py | 112 ++++++++++-------- src/lib/components/workspace/Functions.svelte | 3 +- 2 files changed, 62 insertions(+), 53 deletions(-) diff --git a/backend/main.py b/backend/main.py index 02552f209..2a44d2029 100644 --- a/backend/main.py +++ b/backend/main.py @@ -376,70 +376,77 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ) model = app.state.MODELS[model_id] + filter_ids = [ + function.id + for function in Functions.get_functions_by_type( + "filter", active_only=True + ) + ] # Check if the model has any filters if "info" in model and "meta" in model["info"]: - for filter_id in model["info"]["meta"].get("filterIds", []): - filter = Functions.get_function_by_id(filter_id) - if filter: - if filter_id in webui_app.state.FUNCTIONS: - function_module = webui_app.state.FUNCTIONS[filter_id] - else: - function_module, function_type = load_function_module_by_id( - filter_id - ) - webui_app.state.FUNCTIONS[filter_id] = function_module + filter_ids.extend(model["info"]["meta"].get("filterIds", [])) + filter_ids = list(set(filter_ids)) - # Check if the function has a file_handler variable - if hasattr(function_module, "file_handler"): - skip_files = function_module.file_handler + for filter_id in filter_ids: + filter = Functions.get_function_by_id(filter_id) + if filter: + if filter_id in webui_app.state.FUNCTIONS: + function_module = webui_app.state.FUNCTIONS[filter_id] + else: + function_module, function_type = load_function_module_by_id( + filter_id + ) + webui_app.state.FUNCTIONS[filter_id] = function_module - try: - if hasattr(function_module, "inlet"): - inlet = function_module.inlet + # Check if the function has a file_handler variable + if hasattr(function_module, "file_handler"): + skip_files = function_module.file_handler - # Get the signature of the function - sig = inspect.signature(inlet) - params = {"body": data} + try: + if hasattr(function_module, "inlet"): + inlet = function_module.inlet - if "__user__" in sig.parameters: - __user__ = { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - } + # Get the signature of the function + sig = inspect.signature(inlet) + params = {"body": data} - try: - if hasattr(function_module, "UserValves"): - __user__["valves"] = ( - function_module.UserValves( - **Functions.get_user_valves_by_id_and_user_id( - filter_id, user.id - ) - ) + 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( + filter_id, user.id ) - except Exception as e: - print(e) + ) + except Exception as e: + print(e) - params = {**params, "__user__": __user__} + params = {**params, "__user__": __user__} - if "__id__" in sig.parameters: - params = { - **params, - "__id__": filter_id, - } + if "__id__" in sig.parameters: + params = { + **params, + "__id__": filter_id, + } - if inspect.iscoroutinefunction(inlet): - data = await inlet(**params) - else: - data = inlet(**params) + if inspect.iscoroutinefunction(inlet): + data = await inlet(**params) + else: + data = inlet(**params) - except Exception as e: - print(f"Error: {e}") - return JSONResponse( - status_code=status.HTTP_400_BAD_REQUEST, - content={"detail": str(e)}, - ) + except Exception as e: + print(f"Error: {e}") + return JSONResponse( + status_code=status.HTTP_400_BAD_REQUEST, + content={"detail": str(e)}, + ) # Set the task model task_model_id = data["model"] @@ -863,6 +870,7 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u pipe = model.get("pipe") if pipe: + async def job(): pipe_id = form_data["model"] if "." in pipe_id: diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index fc8e7a451..75e0ce4ff 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -227,8 +227,9 @@
{ + on:change={async (e) => { toggleFunctionById(localStorage.token, func.id); + models.set(await getModels(localStorage.token)); }} />
From 627705a347bcddb6893b3a1b23cda6636d22d24e Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 19:02:27 -0700 Subject: [PATCH 198/287] feat: valves --- backend/apps/webui/routers/functions.py | 68 +++++-- backend/apps/webui/routers/tools.py | 63 +++++- src/lib/apis/functions/index.ts | 32 +++ src/lib/apis/tools/index.ts | 99 ++++++++++ src/lib/components/workspace/Functions.svelte | 10 + src/lib/components/workspace/Tools.svelte | 10 + .../components/workspace/ValvesModal.svelte | 187 +++++++++++------- 7 files changed, 377 insertions(+), 92 deletions(-) diff --git a/backend/apps/webui/routers/functions.py b/backend/apps/webui/routers/functions.py index 8c6454eac..4da68a052 100644 --- a/backend/apps/webui/routers/functions.py +++ b/backend/apps/webui/routers/functions.py @@ -127,8 +127,8 @@ async def get_function_valves_by_id(id: str, user=Depends(get_admin_user)): function = Functions.get_function_by_id(id) if function: try: - valves = Functions.get_function_valves_by_id(id) - return valves + function_valves = Functions.get_function_valves_by_id(id) + return function_valves.valves except Exception as e: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, @@ -142,24 +142,70 @@ async def get_function_valves_by_id(id: str, user=Depends(get_admin_user)): ############################ -# UpdateToolValves +# GetFunctionValvesSpec +############################ + + +@router.get("/id/{id}/valves/spec", response_model=Optional[dict]) +async def get_function_valves_spec_by_id( + request: Request, id: str, user=Depends(get_admin_user) +): + function = Functions.get_function_by_id(id) + if function: + if id in request.app.state.FUNCTIONS: + function_module = request.app.state.FUNCTIONS[id] + else: + function_module, function_type = load_function_module_by_id(id) + request.app.state.FUNCTIONS[id] = function_module + + if hasattr(function_module, "Valves"): + Valves = function_module.Valves + return Valves.schema() + return None + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + +############################ +# UpdateFunctionValves ############################ @router.post("/id/{id}/valves/update", response_model=Optional[dict]) -async def update_toolkit_valves_by_id( - id: str, form_data: dict, user=Depends(get_admin_user) +async def update_function_valves_by_id( + request: Request, id: str, form_data: dict, user=Depends(get_admin_user) ): function = Functions.get_function_by_id(id) if function: - try: - valves = Functions.update_function_valves_by_id(id, form_data) - return valves - except Exception as e: + + if id in request.app.state.FUNCTIONS: + function_module = request.app.state.FUNCTIONS[id] + else: + function_module, function_type = load_function_module_by_id(id) + request.app.state.FUNCTIONS[id] = function_module + + if hasattr(function_module, "Valves"): + Valves = function_module.Valves + + try: + valves = Valves(**form_data) + Functions.update_function_valves_by_id(id, valves.model_dump()) + return valves.model_dump() + except Exception as e: + print(e) + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + else: raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ERROR_MESSAGES.DEFAULT(e), + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, ) + else: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, diff --git a/backend/apps/webui/routers/tools.py b/backend/apps/webui/routers/tools.py index 7988acc86..7ddcf3ed9 100644 --- a/backend/apps/webui/routers/tools.py +++ b/backend/apps/webui/routers/tools.py @@ -133,8 +133,8 @@ async def get_toolkit_valves_by_id(id: str, user=Depends(get_admin_user)): toolkit = Tools.get_tool_by_id(id) if toolkit: try: - valves = Tools.get_tool_valves_by_id(id) - return valves + tool_valves = Tools.get_tool_valves_by_id(id) + return tool_valves.valves except Exception as e: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, @@ -147,6 +147,34 @@ async def get_toolkit_valves_by_id(id: str, user=Depends(get_admin_user)): ) +############################ +# GetToolValvesSpec +############################ + + +@router.get("/id/{id}/valves/spec", response_model=Optional[dict]) +async def get_toolkit_valves_spec_by_id( + request: Request, id: str, user=Depends(get_admin_user) +): + toolkit = Tools.get_tool_by_id(id) + if toolkit: + if id in request.app.state.TOOLS: + toolkit_module = request.app.state.TOOLS[id] + else: + toolkit_module = load_toolkit_module_by_id(id) + request.app.state.TOOLS[id] = toolkit_module + + if hasattr(toolkit_module, "UserValves"): + UserValves = toolkit_module.UserValves + return UserValves.schema() + return None + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + ############################ # UpdateToolValves ############################ @@ -154,18 +182,35 @@ async def get_toolkit_valves_by_id(id: str, user=Depends(get_admin_user)): @router.post("/id/{id}/valves/update", response_model=Optional[dict]) async def update_toolkit_valves_by_id( - id: str, form_data: dict, user=Depends(get_admin_user) + request: Request, id: str, form_data: dict, user=Depends(get_admin_user) ): toolkit = Tools.get_tool_by_id(id) if toolkit: - try: - valves = Tools.update_tool_valves_by_id(id, form_data) - return valves - except Exception as e: + if id in request.app.state.TOOLS: + toolkit_module = request.app.state.TOOLS[id] + else: + toolkit_module = load_toolkit_module_by_id(id) + request.app.state.TOOLS[id] = toolkit_module + + if hasattr(toolkit_module, "Valves"): + Valves = toolkit_module.Valves + + try: + valves = Valves(**form_data) + Tools.update_tool_valves_by_id(id, valves.model_dump()) + return valves.model_dump() + except Exception as e: + print(e) + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + else: raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ERROR_MESSAGES.DEFAULT(e), + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, ) + else: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, diff --git a/src/lib/apis/functions/index.ts b/src/lib/apis/functions/index.ts index c8607b091..2d5ad16b7 100644 --- a/src/lib/apis/functions/index.ts +++ b/src/lib/apis/functions/index.ts @@ -256,6 +256,38 @@ export const getFunctionValvesById = async (token: string, id: string) => { return res; }; +export const getFunctionValvesSpecById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/functions/id/${id}/valves/spec`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + export const updateFunctionValvesById = async (token: string, id: string, valves: object) => { let error = null; diff --git a/src/lib/apis/tools/index.ts b/src/lib/apis/tools/index.ts index 25d543feb..28e8dde86 100644 --- a/src/lib/apis/tools/index.ts +++ b/src/lib/apis/tools/index.ts @@ -192,6 +192,105 @@ export const deleteToolById = async (token: string, id: string) => { return res; }; +export const getToolValvesById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/tools/id/${id}/valves`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const getToolValvesSpecById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/tools/id/${id}/valves/spec`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + +export const updateToolValvesById = async (token: string, id: string, valves: object) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/tools/id/${id}/valves/update`, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + }, + body: JSON.stringify({ + ...valves + }) + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + export const getUserValvesById = async (token: string, id: string) => { let error = null; diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index 75e0ce4ff..fb92cc32d 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -24,6 +24,7 @@ import FunctionMenu from './Functions/FunctionMenu.svelte'; import EllipsisHorizontal from '../icons/EllipsisHorizontal.svelte'; import Switch from '../common/Switch.svelte'; + import ValvesModal from './ValvesModal.svelte'; const i18n = getContext('i18n'); @@ -33,6 +34,9 @@ let showConfirm = false; let query = ''; + let showValvesModal = false; + let selectedFunction = null; + const shareHandler = async (tool) => { console.log(tool); }; @@ -175,6 +179,10 @@
+ + { diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index 184f5942a..687117f99 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -20,6 +20,7 @@ import ConfirmDialog from '../common/ConfirmDialog.svelte'; import ToolMenu from './Tools/ToolMenu.svelte'; import EllipsisHorizontal from '../icons/EllipsisHorizontal.svelte'; + import ValvesModal from './ValvesModal.svelte'; const i18n = getContext('i18n'); @@ -29,6 +30,9 @@ let showConfirm = false; let query = ''; + let showValvesModal = false; + let selectedTool = null; + const shareHandler = async (tool) => { console.log(tool); }; @@ -169,6 +173,10 @@
+ + { diff --git a/src/lib/components/workspace/ValvesModal.svelte b/src/lib/components/workspace/ValvesModal.svelte index f67d948a9..8c15cdc64 100644 --- a/src/lib/components/workspace/ValvesModal.svelte +++ b/src/lib/components/workspace/ValvesModal.svelte @@ -5,6 +5,13 @@ import { addUser } from '$lib/apis/auths'; import Modal from '../common/Modal.svelte'; + import { + getFunctionValvesById, + getFunctionValvesSpecById, + updateFunctionValvesById + } from '$lib/apis/functions'; + import { getToolValvesById, getToolValvesSpecById, updateToolValvesById } from '$lib/apis/tools'; + import Spinner from '../common/Spinner.svelte'; const i18n = getContext('i18n'); const dispatch = createEventDispatcher(); @@ -14,21 +21,57 @@ export let type = 'tool'; export let id = null; + let saving = false; let loading = false; - let _user = { - name: '', - email: '', - password: '', - role: 'user' - }; + let valvesSpec = null; + let valves = {}; const submitHandler = async () => { - const stopLoading = () => { - dispatch('save'); - loading = false; - }; + saving = true; + + let res = null; + + if (type === 'tool') { + res = await updateToolValvesById(localStorage.token, id, valves).catch((error) => { + toast.error(error); + }); + } else if (type === 'function') { + res = await updateFunctionValvesById(localStorage.token, id, valves).catch((error) => { + toast.error(error); + }); + } + + if (res) { + toast.success('Valves updated successfully'); + } + + saving = false; }; + + const initHandler = async () => { + loading = true; + valves = {}; + valvesSpec = null; + + if (type === 'tool') { + valves = await getToolValvesById(localStorage.token, id); + valvesSpec = await getToolValvesSpecById(localStorage.token, id); + } else if (type === 'function') { + valves = await getFunctionValvesById(localStorage.token, id); + valvesSpec = await getFunctionValvesSpecById(localStorage.token, id); + } + + if (!valves) { + valves = {}; + } + + loading = false; + }; + + $: if (show) { + initHandler(); + } @@ -63,81 +106,81 @@ }} >
-
-
{$i18n.t('Role')}
+ {#if !loading} + {#if valvesSpec} + {#each Object.keys(valvesSpec.properties) as property, idx} +
+
+
+ {valvesSpec.properties[property].title} -
- -
-
+ {#if (valvesSpec?.required ?? []).includes(property)} + *required + {/if} +
-
-
{$i18n.t('Name')}
+ +
-
- -
-
+ {#if (valves[property] ?? null) !== null} +
+
+ +
+
+ {/if} -
- -
-
{$i18n.t('Email')}
- -
- -
-
- -
-
{$i18n.t('Password')}
- -
- -
-
+ {#if (valvesSpec.properties[property]?.description ?? null) !== null} +
+ {valvesSpec.properties[property].description} +
+ {/if} +
+ {/each} + {:else} +
No valves
+ {/if} + {:else} + + {/if}
diff --git a/src/lib/components/workspace/ValvesModal.svelte b/src/lib/components/workspace/ValvesModal.svelte index 9a3bc03a9..c6d139507 100644 --- a/src/lib/components/workspace/ValvesModal.svelte +++ b/src/lib/components/workspace/ValvesModal.svelte @@ -149,7 +149,7 @@ placeholder={valvesSpec.properties[property].title} bind:value={valves[property]} autocomplete="off" - required={(valvesSpec?.required ?? []).includes(property)} + required />
From 2eb15ea1fc1b33477a4aad130ccd03e5d4c4f9b6 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 19:28:33 -0700 Subject: [PATCH 204/287] feat: SAFE_MODE --- backend/apps/webui/models/functions.py | 13 +++++++++++++ backend/config.py | 6 ++++++ backend/main.py | 7 ++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py index 1a055f327..966bd0231 100644 --- a/backend/apps/webui/models/functions.py +++ b/backend/apps/webui/models/functions.py @@ -221,6 +221,19 @@ class FunctionsTable: except: return None + def deactivate_all_functions(self) -> Optional[bool]: + try: + query = Function.update( + **{"is_active": False}, + updated_at=int(time.time()), + ) + + query.execute() + + return True + except: + return None + def delete_function_by_id(self, id: str) -> bool: try: query = Function.delete().where((Function.id == id)) diff --git a/backend/config.py b/backend/config.py index 842cea1ba..2b78cc252 100644 --- a/backend/config.py +++ b/backend/config.py @@ -167,6 +167,12 @@ for version in soup.find_all("h2"): CHANGELOG = changelog_json +#################################### +# SAFE_MODE +#################################### + +SAFE_MODE = os.environ.get("SAFE_MODE", "false").lower() == "true" + #################################### # WEBUI_BUILD_HASH #################################### diff --git a/backend/main.py b/backend/main.py index 991eb5839..4a889f1b3 100644 --- a/backend/main.py +++ b/backend/main.py @@ -55,7 +55,6 @@ from apps.webui.models.functions import Functions from apps.webui.utils import load_toolkit_module_by_id, load_function_module_by_id - from utils.utils import ( get_admin_user, get_verified_user, @@ -102,10 +101,16 @@ from config import ( SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE, SEARCH_QUERY_PROMPT_LENGTH_THRESHOLD, TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE, + SAFE_MODE, AppConfig, ) from constants import ERROR_MESSAGES +if SAFE_MODE: + print("SAFE MODE ENABLED") + Functions.deactivate_all_functions() + + logging.basicConfig(stream=sys.stdout, level=GLOBAL_LOG_LEVEL) log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["MAIN"]) From 5f2d37dce5c657a05c5c1544657271e10afc1a33 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 19:37:35 -0700 Subject: [PATCH 205/287] fix: valves --- backend/main.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/main.py b/backend/main.py index 4a889f1b3..2f2e549bd 100644 --- a/backend/main.py +++ b/backend/main.py @@ -270,8 +270,9 @@ async def get_function_call_response( if hasattr(toolkit_module, "valves") and hasattr( toolkit_module, "Valves" ): + valves = Tools.get_tool_valves_by_id(tool_id) toolkit_module.valves = toolkit_module.Valves( - **Tools.get_tool_valves_by_id(tool_id) + **(valves if valves else {}) ) function = getattr(toolkit_module, result["name"]) @@ -417,8 +418,9 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): if hasattr(function_module, "valves") and hasattr( function_module, "Valves" ): + valves = Functions.get_function_valves_by_id(filter_id) function_module.valves = function_module.Valves( - **Functions.get_function_valves_by_id(filter_id) + **(valves if valves else {}) ) try: @@ -906,8 +908,10 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u 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( - **Functions.get_function_valves_by_id(pipe_id) + **(valves if valves else {}) ) pipe = function_module.pipe @@ -1134,8 +1138,9 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): if hasattr(function_module, "valves") and hasattr( function_module, "Valves" ): + valves = Functions.get_function_valves_by_id(filter_id) function_module.valves = function_module.Valves( - **Functions.get_function_valves_by_id(filter_id) + **(valves if valves else {}) ) try: From 99e7b328a47e15019703569f82b857d09b651851 Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Mon, 24 Jun 2024 10:43:53 +0800 Subject: [PATCH 206/287] refac: add better logging for oauth errors --- backend/main.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/main.py b/backend/main.py index 1ba6ce0f3..0cd12f16c 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1883,17 +1883,19 @@ async def oauth_callback(provider: str, request: Request, response: Response): try: token = await client.authorize_access_token(request) except Exception as e: - log.error(f"OAuth callback error: {e}") + log.warning(f"OAuth callback error: {e}") raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED) user_data: UserInfo = token["userinfo"] sub = user_data.get("sub") if not sub: + log.warning(f"OAuth callback failed, sub is missing: {user_data}") raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED) provider_sub = f"{provider}@{sub}" email = user_data.get("email", "").lower() # We currently mandate that email addresses are provided if not email: + log.warning(f"OAuth callback failed, email is missing: {user_data}") raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED) # Check if the user exists @@ -1958,7 +1960,9 @@ async def oauth_callback(provider: str, request: Request, response: Response): }, ) else: - raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED) + raise HTTPException( + status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.ACCESS_PROHIBITED + ) jwt_token = create_token( data={"id": user.id}, From 0250f69da02d315d799a557714b3f6412089481a Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 19:48:16 -0700 Subject: [PATCH 207/287] fix: valves --- backend/apps/webui/models/functions.py | 2 +- backend/apps/webui/models/tools.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py index 966bd0231..f4366a1a7 100644 --- a/backend/apps/webui/models/functions.py +++ b/backend/apps/webui/models/functions.py @@ -146,7 +146,7 @@ class FunctionsTable: def get_function_valves_by_id(self, id: str) -> Optional[dict]: try: function = Function.get(Function.id == id) - return function.valves if "valves" in function and function.valves else {} + return function.valves if function.valves else {} except Exception as e: print(f"An error occurred: {e}") return None diff --git a/backend/apps/webui/models/tools.py b/backend/apps/webui/models/tools.py index 41504bd4a..bfa65742b 100644 --- a/backend/apps/webui/models/tools.py +++ b/backend/apps/webui/models/tools.py @@ -117,7 +117,7 @@ class ToolsTable: def get_tool_valves_by_id(self, id: str) -> Optional[dict]: try: tool = Tool.get(Tool.id == id) - return tool.valves if "valves" in tool and tool.valves else {} + return tool.valves if tool.valves else {} except Exception as e: print(f"An error occurred: {e}") return None From f4a2ae5eacf5ccf585f7729815033345b77135f0 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 19:49:48 -0700 Subject: [PATCH 208/287] enh: list valve --- .../components/workspace/ValvesModal.svelte | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/lib/components/workspace/ValvesModal.svelte b/src/lib/components/workspace/ValvesModal.svelte index c6d139507..124af83de 100644 --- a/src/lib/components/workspace/ValvesModal.svelte +++ b/src/lib/components/workspace/ValvesModal.svelte @@ -30,20 +30,29 @@ const submitHandler = async () => { saving = true; - let res = null; + if (valvesSpec) { + // Convert string to array + for (const property in valvesSpec.properties) { + if (valvesSpec.properties[property]?.type === 'array') { + valves[property] = (valves[property] ?? '').split(',').map((v) => v.trim()); + } + } - if (type === 'tool') { - res = await updateToolValvesById(localStorage.token, id, valves).catch((error) => { - toast.error(error); - }); - } else if (type === 'function') { - res = await updateFunctionValvesById(localStorage.token, id, valves).catch((error) => { - toast.error(error); - }); - } + let res = null; - if (res) { - toast.success('Valves updated successfully'); + if (type === 'tool') { + res = await updateToolValvesById(localStorage.token, id, valves).catch((error) => { + toast.error(error); + }); + } else if (type === 'function') { + res = await updateFunctionValvesById(localStorage.token, id, valves).catch((error) => { + toast.error(error); + }); + } + + if (res) { + toast.success('Valves updated successfully'); + } } saving = false; @@ -66,6 +75,15 @@ valves = {}; } + if (valvesSpec) { + // Convert array to string + for (const property in valvesSpec.properties) { + if (valvesSpec.properties[property]?.type === 'array') { + valves[property] = (valves[property] ?? []).join(','); + } + } + } + loading = false; }; From 8b998701896ef6e1b67ac76fb08392e019751b97 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 20:11:08 -0700 Subject: [PATCH 209/287] enh: filter function priority valve support --- backend/main.py | 131 ++++++++++++++++++++++++++++-------------------- 1 file changed, 77 insertions(+), 54 deletions(-) diff --git a/backend/main.py b/backend/main.py index 2f2e549bd..85fe16d3b 100644 --- a/backend/main.py +++ b/backend/main.py @@ -389,6 +389,14 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ) model = app.state.MODELS[model_id] + def get_priority(function_id): + function = Functions.get_function_by_id(function_id) + if function is not None and hasattr(function, "valves"): + return (function.valves if function.valves else {}).get( + "priority", 0 + ) + return 0 + filter_ids = [ function.id for function in Functions.get_functions_by_type( @@ -400,6 +408,7 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): filter_ids.extend(model["info"]["meta"].get("filterIds", [])) filter_ids = list(set(filter_ids)) + filter_ids.sort(key=get_priority) for filter_id in filter_ids: filter = Functions.get_function_by_id(filter_id) if filter: @@ -1122,72 +1131,86 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): else: pass + def get_priority(function_id): + function = Functions.get_function_by_id(function_id) + if function is not None and hasattr(function, "valves"): + return (function.valves if function.valves else {}).get("priority", 0) + return 0 + + filter_ids = [ + function.id + for function in Functions.get_functions_by_type("filter", active_only=True) + ] # Check if the model has any filters if "info" in model and "meta" in model["info"]: - for filter_id in model["info"]["meta"].get("filterIds", []): - filter = Functions.get_function_by_id(filter_id) - if filter: - if filter_id in webui_app.state.FUNCTIONS: - function_module = webui_app.state.FUNCTIONS[filter_id] - else: - function_module, function_type = load_function_module_by_id( - filter_id - ) - webui_app.state.FUNCTIONS[filter_id] = function_module + filter_ids.extend(model["info"]["meta"].get("filterIds", [])) + filter_ids = list(set(filter_ids)) - if hasattr(function_module, "valves") and hasattr( - function_module, "Valves" - ): - valves = Functions.get_function_valves_by_id(filter_id) - function_module.valves = function_module.Valves( - **(valves if valves else {}) - ) + # Sort filter_ids by priority, using the get_priority function + filter_ids.sort(key=get_priority) - try: - if hasattr(function_module, "outlet"): - outlet = function_module.outlet + for filter_id in filter_ids: + filter = Functions.get_function_by_id(filter_id) + if filter: + if filter_id in webui_app.state.FUNCTIONS: + function_module = webui_app.state.FUNCTIONS[filter_id] + else: + function_module, function_type = load_function_module_by_id(filter_id) + webui_app.state.FUNCTIONS[filter_id] = function_module - # Get the signature of the function - sig = inspect.signature(outlet) - params = {"body": data} + if hasattr(function_module, "valves") and hasattr( + function_module, "Valves" + ): + valves = Functions.get_function_valves_by_id(filter_id) + function_module.valves = function_module.Valves( + **(valves if valves else {}) + ) - if "__user__" in sig.parameters: - __user__ = { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - } + try: + if hasattr(function_module, "outlet"): + outlet = function_module.outlet - try: - if hasattr(function_module, "UserValves"): - __user__["valves"] = function_module.UserValves( - **Functions.get_user_valves_by_id_and_user_id( - filter_id, user.id - ) + # Get the signature of the function + sig = inspect.signature(outlet) + params = {"body": data} + + 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( + filter_id, user.id ) - except Exception as e: - print(e) + ) + except Exception as e: + print(e) - params = {**params, "__user__": __user__} + params = {**params, "__user__": __user__} - if "__id__" in sig.parameters: - params = { - **params, - "__id__": filter_id, - } + if "__id__" in sig.parameters: + params = { + **params, + "__id__": filter_id, + } - if inspect.iscoroutinefunction(outlet): - data = await outlet(**params) - else: - data = outlet(**params) + if inspect.iscoroutinefunction(outlet): + data = await outlet(**params) + else: + data = outlet(**params) - except Exception as e: - print(f"Error: {e}") - return JSONResponse( - status_code=status.HTTP_400_BAD_REQUEST, - content={"detail": str(e)}, - ) + except Exception as e: + print(f"Error: {e}") + return JSONResponse( + status_code=status.HTTP_400_BAD_REQUEST, + content={"detail": str(e)}, + ) return data From abf212c28f1bd5a44403deb9339ecd43accf0495 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 20:31:40 -0700 Subject: [PATCH 210/287] enh: tools & functions frontmatter --- backend/apps/webui/main.py | 4 +- backend/apps/webui/models/functions.py | 1 + backend/apps/webui/models/tools.py | 1 + backend/apps/webui/routers/functions.py | 194 ++++++++++++------------ backend/apps/webui/routers/tools.py | 144 +++++++++--------- backend/apps/webui/utils.py | 29 +++- backend/main.py | 14 +- 7 files changed, 212 insertions(+), 175 deletions(-) diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index a8f45aff0..f092da7ad 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -109,7 +109,9 @@ async def get_pipe_models(): for pipe in pipes: # Check if function is already loaded if pipe.id not in app.state.FUNCTIONS: - function_module, function_type = load_function_module_by_id(pipe.id) + 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] diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py index f4366a1a7..261987981 100644 --- a/backend/apps/webui/models/functions.py +++ b/backend/apps/webui/models/functions.py @@ -39,6 +39,7 @@ class Function(Model): class FunctionMeta(BaseModel): description: Optional[str] = None + manifest: Optional[dict] = {} class FunctionModel(BaseModel): diff --git a/backend/apps/webui/models/tools.py b/backend/apps/webui/models/tools.py index bfa65742b..694081df9 100644 --- a/backend/apps/webui/models/tools.py +++ b/backend/apps/webui/models/tools.py @@ -38,6 +38,7 @@ class Tool(Model): class ToolMeta(BaseModel): description: Optional[str] = None + manifest: Optional[dict] = {} class ToolModel(BaseModel): diff --git a/backend/apps/webui/routers/functions.py b/backend/apps/webui/routers/functions.py index fa3e3aeb9..4c89ca487 100644 --- a/backend/apps/webui/routers/functions.py +++ b/backend/apps/webui/routers/functions.py @@ -69,7 +69,10 @@ async def create_new_function( with open(function_path, "w") as function_file: function_file.write(form_data.content) - function_module, function_type = load_function_module_by_id(form_data.id) + function_module, function_type, frontmatter = load_function_module_by_id( + form_data.id + ) + form_data.meta.manifest = frontmatter FUNCTIONS = request.app.state.FUNCTIONS FUNCTIONS[form_data.id] = function_module @@ -117,6 +120,97 @@ async def get_function_by_id(id: str, user=Depends(get_admin_user)): ) +############################ +# ToggleFunctionById +############################ + + +@router.post("/id/{id}/toggle", response_model=Optional[FunctionModel]) +async def toggle_function_by_id(id: str, user=Depends(get_admin_user)): + function = Functions.get_function_by_id(id) + if function: + function = Functions.update_function_by_id( + id, {"is_active": not function.is_active} + ) + + if function: + return function + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error updating function"), + ) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + +############################ +# UpdateFunctionById +############################ + + +@router.post("/id/{id}/update", response_model=Optional[FunctionModel]) +async def update_function_by_id( + request: Request, id: str, form_data: FunctionForm, user=Depends(get_admin_user) +): + function_path = os.path.join(FUNCTIONS_DIR, f"{id}.py") + + try: + with open(function_path, "w") as function_file: + function_file.write(form_data.content) + + function_module, function_type, frontmatter = load_function_module_by_id(id) + form_data.meta.manifest = frontmatter + + FUNCTIONS = request.app.state.FUNCTIONS + FUNCTIONS[id] = function_module + + updated = {**form_data.model_dump(exclude={"id"}), "type": function_type} + print(updated) + + function = Functions.update_function_by_id(id, updated) + + if function: + return function + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error updating function"), + ) + + except Exception as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + + +############################ +# DeleteFunctionById +############################ + + +@router.delete("/id/{id}/delete", response_model=bool) +async def delete_function_by_id( + request: Request, id: str, user=Depends(get_admin_user) +): + result = Functions.delete_function_by_id(id) + + if result: + FUNCTIONS = request.app.state.FUNCTIONS + if id in FUNCTIONS: + del FUNCTIONS[id] + + # delete the function file + function_path = os.path.join(FUNCTIONS_DIR, f"{id}.py") + os.remove(function_path) + + return result + + ############################ # GetFunctionValves ############################ @@ -155,7 +249,7 @@ async def get_function_valves_spec_by_id( if id in request.app.state.FUNCTIONS: function_module = request.app.state.FUNCTIONS[id] else: - function_module, function_type = load_function_module_by_id(id) + function_module, function_type, frontmatter = load_function_module_by_id(id) request.app.state.FUNCTIONS[id] = function_module if hasattr(function_module, "Valves"): @@ -184,7 +278,7 @@ async def update_function_valves_by_id( if id in request.app.state.FUNCTIONS: function_module = request.app.state.FUNCTIONS[id] else: - function_module, function_type = load_function_module_by_id(id) + function_module, function_type, frontmatter = load_function_module_by_id(id) request.app.state.FUNCTIONS[id] = function_module if hasattr(function_module, "Valves"): @@ -247,7 +341,7 @@ async def get_function_user_valves_spec_by_id( if id in request.app.state.FUNCTIONS: function_module = request.app.state.FUNCTIONS[id] else: - function_module, function_type = load_function_module_by_id(id) + function_module, function_type, frontmatter = load_function_module_by_id(id) request.app.state.FUNCTIONS[id] = function_module if hasattr(function_module, "UserValves"): @@ -271,7 +365,7 @@ async def update_function_user_valves_by_id( if id in request.app.state.FUNCTIONS: function_module = request.app.state.FUNCTIONS[id] else: - function_module, function_type = load_function_module_by_id(id) + function_module, function_type, frontmatter = load_function_module_by_id(id) request.app.state.FUNCTIONS[id] = function_module if hasattr(function_module, "UserValves"): @@ -300,93 +394,3 @@ async def update_function_user_valves_by_id( status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND, ) - - -############################ -# ToggleFunctionById -############################ - - -@router.post("/id/{id}/toggle", response_model=Optional[FunctionModel]) -async def toggle_function_by_id(id: str, user=Depends(get_admin_user)): - function = Functions.get_function_by_id(id) - if function: - function = Functions.update_function_by_id( - id, {"is_active": not function.is_active} - ) - - if function: - return function - else: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ERROR_MESSAGES.DEFAULT("Error updating function"), - ) - else: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail=ERROR_MESSAGES.NOT_FOUND, - ) - - -############################ -# UpdateFunctionById -############################ - - -@router.post("/id/{id}/update", response_model=Optional[FunctionModel]) -async def update_function_by_id( - request: Request, id: str, form_data: FunctionForm, user=Depends(get_admin_user) -): - function_path = os.path.join(FUNCTIONS_DIR, f"{id}.py") - - try: - with open(function_path, "w") as function_file: - function_file.write(form_data.content) - - function_module, function_type = load_function_module_by_id(id) - - FUNCTIONS = request.app.state.FUNCTIONS - FUNCTIONS[id] = function_module - - updated = {**form_data.model_dump(exclude={"id"}), "type": function_type} - print(updated) - - function = Functions.update_function_by_id(id, updated) - - if function: - return function - else: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ERROR_MESSAGES.DEFAULT("Error updating function"), - ) - - except Exception as e: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ERROR_MESSAGES.DEFAULT(e), - ) - - -############################ -# DeleteFunctionById -############################ - - -@router.delete("/id/{id}/delete", response_model=bool) -async def delete_function_by_id( - request: Request, id: str, user=Depends(get_admin_user) -): - result = Functions.delete_function_by_id(id) - - if result: - FUNCTIONS = request.app.state.FUNCTIONS - if id in FUNCTIONS: - del FUNCTIONS[id] - - # delete the function file - function_path = os.path.join(FUNCTIONS_DIR, f"{id}.py") - os.remove(function_path) - - return result diff --git a/backend/apps/webui/routers/tools.py b/backend/apps/webui/routers/tools.py index ab974391c..d20584c22 100644 --- a/backend/apps/webui/routers/tools.py +++ b/backend/apps/webui/routers/tools.py @@ -74,7 +74,8 @@ async def create_new_toolkit( with open(toolkit_path, "w") as tool_file: tool_file.write(form_data.content) - toolkit_module = load_toolkit_module_by_id(form_data.id) + toolkit_module, frontmatter = load_toolkit_module_by_id(form_data.id) + form_data.meta.manifest = frontmatter TOOLS = request.app.state.TOOLS TOOLS[form_data.id] = toolkit_module @@ -123,6 +124,73 @@ async def get_toolkit_by_id(id: str, user=Depends(get_admin_user)): ) +############################ +# UpdateToolkitById +############################ + + +@router.post("/id/{id}/update", response_model=Optional[ToolModel]) +async def update_toolkit_by_id( + request: Request, id: str, form_data: ToolForm, user=Depends(get_admin_user) +): + toolkit_path = os.path.join(TOOLS_DIR, f"{id}.py") + + try: + with open(toolkit_path, "w") as tool_file: + tool_file.write(form_data.content) + + toolkit_module, frontmatter = load_toolkit_module_by_id(id) + form_data.meta.manifest = frontmatter + + TOOLS = request.app.state.TOOLS + TOOLS[id] = toolkit_module + + specs = get_tools_specs(TOOLS[id]) + + updated = { + **form_data.model_dump(exclude={"id"}), + "specs": specs, + } + + print(updated) + toolkit = Tools.update_tool_by_id(id, updated) + + if toolkit: + return toolkit + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error updating toolkit"), + ) + + except Exception as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + + +############################ +# DeleteToolkitById +############################ + + +@router.delete("/id/{id}/delete", response_model=bool) +async def delete_toolkit_by_id(request: Request, id: str, user=Depends(get_admin_user)): + result = Tools.delete_tool_by_id(id) + + if result: + TOOLS = request.app.state.TOOLS + if id in TOOLS: + del TOOLS[id] + + # delete the toolkit file + toolkit_path = os.path.join(TOOLS_DIR, f"{id}.py") + os.remove(toolkit_path) + + return result + + ############################ # GetToolValves ############################ @@ -161,7 +229,7 @@ async def get_toolkit_valves_spec_by_id( if id in request.app.state.TOOLS: toolkit_module = request.app.state.TOOLS[id] else: - toolkit_module = load_toolkit_module_by_id(id) + toolkit_module, frontmatter = load_toolkit_module_by_id(id) request.app.state.TOOLS[id] = toolkit_module if hasattr(toolkit_module, "Valves"): @@ -189,7 +257,7 @@ async def update_toolkit_valves_by_id( if id in request.app.state.TOOLS: toolkit_module = request.app.state.TOOLS[id] else: - toolkit_module = load_toolkit_module_by_id(id) + toolkit_module, frontmatter = load_toolkit_module_by_id(id) request.app.state.TOOLS[id] = toolkit_module if hasattr(toolkit_module, "Valves"): @@ -252,7 +320,7 @@ async def get_toolkit_user_valves_spec_by_id( if id in request.app.state.TOOLS: toolkit_module = request.app.state.TOOLS[id] else: - toolkit_module = load_toolkit_module_by_id(id) + toolkit_module, frontmatter = load_toolkit_module_by_id(id) request.app.state.TOOLS[id] = toolkit_module if hasattr(toolkit_module, "UserValves"): @@ -276,7 +344,7 @@ async def update_toolkit_user_valves_by_id( if id in request.app.state.TOOLS: toolkit_module = request.app.state.TOOLS[id] else: - toolkit_module = load_toolkit_module_by_id(id) + toolkit_module, frontmatter = load_toolkit_module_by_id(id) request.app.state.TOOLS[id] = toolkit_module if hasattr(toolkit_module, "UserValves"): @@ -305,69 +373,3 @@ async def update_toolkit_user_valves_by_id( status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND, ) - - -############################ -# UpdateToolkitById -############################ - - -@router.post("/id/{id}/update", response_model=Optional[ToolModel]) -async def update_toolkit_by_id( - request: Request, id: str, form_data: ToolForm, user=Depends(get_admin_user) -): - toolkit_path = os.path.join(TOOLS_DIR, f"{id}.py") - - try: - with open(toolkit_path, "w") as tool_file: - tool_file.write(form_data.content) - - toolkit_module = load_toolkit_module_by_id(id) - - TOOLS = request.app.state.TOOLS - TOOLS[id] = toolkit_module - - specs = get_tools_specs(TOOLS[id]) - - updated = { - **form_data.model_dump(exclude={"id"}), - "specs": specs, - } - - print(updated) - toolkit = Tools.update_tool_by_id(id, updated) - - if toolkit: - return toolkit - else: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ERROR_MESSAGES.DEFAULT("Error updating toolkit"), - ) - - except Exception as e: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ERROR_MESSAGES.DEFAULT(e), - ) - - -############################ -# DeleteToolkitById -############################ - - -@router.delete("/id/{id}/delete", response_model=bool) -async def delete_toolkit_by_id(request: Request, id: str, user=Depends(get_admin_user)): - result = Tools.delete_tool_by_id(id) - - if result: - TOOLS = request.app.state.TOOLS - if id in TOOLS: - del TOOLS[id] - - # delete the toolkit file - toolkit_path = os.path.join(TOOLS_DIR, f"{id}.py") - os.remove(toolkit_path) - - return result diff --git a/backend/apps/webui/utils.py b/backend/apps/webui/utils.py index 3e075a8a8..f50b13f38 100644 --- a/backend/apps/webui/utils.py +++ b/backend/apps/webui/utils.py @@ -1,19 +1,41 @@ from importlib import util import os +import re from config import TOOLS_DIR, FUNCTIONS_DIR +def extract_frontmatter(file_path): + """ + Extract frontmatter as a dictionary from the specified file path. + """ + frontmatter = {} + frontmatter_pattern = re.compile(r"^([a-z_]+):\s*(.*)\s*$", re.IGNORECASE) + + with open(file_path, "r", encoding="utf-8") as file: + for line in file: + if line.strip() == '"""': + # End of frontmatter section + break + match = frontmatter_pattern.match(line) + if match: + key, value = match.groups() + frontmatter[key] = value + + return frontmatter + + def load_toolkit_module_by_id(toolkit_id): toolkit_path = os.path.join(TOOLS_DIR, f"{toolkit_id}.py") spec = util.spec_from_file_location(toolkit_id, toolkit_path) module = util.module_from_spec(spec) + frontmatter = extract_frontmatter(toolkit_path) try: spec.loader.exec_module(module) print(f"Loaded module: {module.__name__}") if hasattr(module, "Tools"): - return module.Tools() + return module.Tools(), frontmatter else: raise Exception("No Tools class found") except Exception as e: @@ -28,14 +50,15 @@ def load_function_module_by_id(function_id): spec = util.spec_from_file_location(function_id, function_path) module = util.module_from_spec(spec) + frontmatter = extract_frontmatter(function_path) try: spec.loader.exec_module(module) print(f"Loaded module: {module.__name__}") if hasattr(module, "Pipe"): - return module.Pipe(), "pipe" + return module.Pipe(), "pipe", frontmatter elif hasattr(module, "Filter"): - return module.Filter(), "filter" + return module.Filter(), "filter", frontmatter else: raise Exception("No Function class found") except Exception as e: diff --git a/backend/main.py b/backend/main.py index 85fe16d3b..12e2d937e 100644 --- a/backend/main.py +++ b/backend/main.py @@ -258,7 +258,7 @@ async def get_function_call_response( if tool_id in webui_app.state.TOOLS: toolkit_module = webui_app.state.TOOLS[tool_id] else: - toolkit_module = load_toolkit_module_by_id(tool_id) + toolkit_module, frontmatter = load_toolkit_module_by_id(tool_id) webui_app.state.TOOLS[tool_id] = toolkit_module file_handler = False @@ -415,8 +415,8 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): if filter_id in webui_app.state.FUNCTIONS: function_module = webui_app.state.FUNCTIONS[filter_id] else: - function_module, function_type = load_function_module_by_id( - filter_id + function_module, function_type, frontmatter = ( + load_function_module_by_id(filter_id) ) webui_app.state.FUNCTIONS[filter_id] = function_module @@ -909,7 +909,9 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u # Check if function is already loaded if pipe_id not in webui_app.state.FUNCTIONS: - function_module, function_type = load_function_module_by_id(pipe_id) + function_module, function_type, frontmatter = ( + load_function_module_by_id(pipe_id) + ) webui_app.state.FUNCTIONS[pipe_id] = function_module else: function_module = webui_app.state.FUNCTIONS[pipe_id] @@ -1155,7 +1157,9 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): if filter_id in webui_app.state.FUNCTIONS: function_module = webui_app.state.FUNCTIONS[filter_id] else: - function_module, function_type = load_function_module_by_id(filter_id) + function_module, function_type, frontmatter = ( + load_function_module_by_id(filter_id) + ) webui_app.state.FUNCTIONS[filter_id] = function_module if hasattr(function_module, "valves") and hasattr( From 5c0015cd66a3fd617e78cae3adbbfc2d4c6dd3fe Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 20:37:41 -0700 Subject: [PATCH 211/287] fix: frontmatter --- backend/apps/webui/utils.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/backend/apps/webui/utils.py b/backend/apps/webui/utils.py index f50b13f38..8bcda539e 100644 --- a/backend/apps/webui/utils.py +++ b/backend/apps/webui/utils.py @@ -10,17 +10,32 @@ def extract_frontmatter(file_path): Extract frontmatter as a dictionary from the specified file path. """ frontmatter = {} - frontmatter_pattern = re.compile(r"^([a-z_]+):\s*(.*)\s*$", re.IGNORECASE) + frontmatter_started = False + frontmatter_ended = False + frontmatter_pattern = re.compile(r"^\s*([a-z_]+):\s*(.*)\s*$", re.IGNORECASE) - with open(file_path, "r", encoding="utf-8") as file: - for line in file: - if line.strip() == '"""': - # End of frontmatter section - break - match = frontmatter_pattern.match(line) - if match: - key, value = match.groups() - frontmatter[key] = value + try: + with open(file_path, "r", encoding="utf-8") as file: + for line in file: + if '"""' in line: + if not frontmatter_started: + frontmatter_started = True + continue # skip the line with the opening triple quotes + else: + frontmatter_ended = True + break + + if frontmatter_started and not frontmatter_ended: + match = frontmatter_pattern.match(line) + if match: + key, value = match.groups() + frontmatter[key.strip()] = value.strip() + except FileNotFoundError: + print(f"Error: The file {file_path} does not exist.") + return {} + except Exception as e: + print(f"An error occurred: {e}") + return {} return frontmatter From be2340d4ef907b2117ee8f7764cc928ec4b0ace9 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 20:40:12 -0700 Subject: [PATCH 212/287] refac: styling --- src/app.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app.css b/src/app.css index baf620845..2dacf5d72 100644 --- a/src/app.css +++ b/src/app.css @@ -32,6 +32,10 @@ math { @apply underline; } +iframe { + @apply rounded-lg; +} + ol > li { counter-increment: list-number; display: block; From 0b8f5c22326b8c4c4c82f7f126faec73ddf97ae4 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 21:00:34 -0700 Subject: [PATCH 213/287] enh: manifest modal --- src/lib/components/icons/Heart.svelte | 19 ++++ src/lib/components/workspace/Functions.svelte | 21 +++- src/lib/components/workspace/Tools.svelte | 21 +++- .../workspace/common/ManifestModal.svelte | 102 ++++++++++++++++++ .../workspace/{ => common}/ValvesModal.svelte | 4 +- 5 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 src/lib/components/icons/Heart.svelte create mode 100644 src/lib/components/workspace/common/ManifestModal.svelte rename src/lib/components/workspace/{ => common}/ValvesModal.svelte (98%) diff --git a/src/lib/components/icons/Heart.svelte b/src/lib/components/icons/Heart.svelte new file mode 100644 index 000000000..ba042ff65 --- /dev/null +++ b/src/lib/components/icons/Heart.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index fb92cc32d..39e77a454 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -24,7 +24,9 @@ import FunctionMenu from './Functions/FunctionMenu.svelte'; import EllipsisHorizontal from '../icons/EllipsisHorizontal.svelte'; import Switch from '../common/Switch.svelte'; - import ValvesModal from './ValvesModal.svelte'; + import ValvesModal from './common/ValvesModal.svelte'; + import ManifestModal from './common/ManifestModal.svelte'; + import Heart from '../icons/Heart.svelte'; const i18n = getContext('i18n'); @@ -34,6 +36,7 @@ let showConfirm = false; let query = ''; + let showManifestModal = false; let showValvesModal = false; let selectedFunction = null; @@ -175,6 +178,21 @@
+ {#if func?.meta?.manifest?.funding_url ?? false} + + + + {/if} +
+
+ {#if tool?.meta?.manifest?.funding_url ?? false} + + + + {/if} + +
+ +
+
+
{ + show = false; + }} + > +
+
+ The developers behind this plugin are passionate volunteers from the community. If you + find this plugin helpful, please consider contributing to its development. +
+ +
+ 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. +
+ +
+ +
+ Support this plugin: {manifest.funding_url} +
+
+ +
+ +
+
+
+
+
+
+ + diff --git a/src/lib/components/workspace/ValvesModal.svelte b/src/lib/components/workspace/common/ValvesModal.svelte similarity index 98% rename from src/lib/components/workspace/ValvesModal.svelte rename to src/lib/components/workspace/common/ValvesModal.svelte index 124af83de..0bf2b8f19 100644 --- a/src/lib/components/workspace/ValvesModal.svelte +++ b/src/lib/components/workspace/common/ValvesModal.svelte @@ -4,14 +4,14 @@ import { onMount, getContext } from 'svelte'; import { addUser } from '$lib/apis/auths'; - import Modal from '../common/Modal.svelte'; + import Modal from '../../common/Modal.svelte'; import { getFunctionValvesById, getFunctionValvesSpecById, updateFunctionValvesById } from '$lib/apis/functions'; import { getToolValvesById, getToolValvesSpecById, updateToolValvesById } from '$lib/apis/tools'; - import Spinner from '../common/Spinner.svelte'; + import Spinner from '../../common/Spinner.svelte'; const i18n = getContext('i18n'); const dispatch = createEventDispatcher(); From 9788633ce1fd7fcc22374f1406591ffad43ba049 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 21:01:07 -0700 Subject: [PATCH 214/287] refac: wording --- src/lib/components/workspace/Functions.svelte | 2 +- src/lib/components/workspace/Tools.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index 39e77a454..bcfd570ea 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -179,7 +179,7 @@
{#if func?.meta?.manifest?.funding_url ?? false} - +
+ {#if func?.meta?.manifest?.version} +
+ v{func?.meta?.manifest?.version ?? ''} +
+ {/if} +
{func.name}
diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index 15008187f..0b8f70e85 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -156,6 +156,14 @@ TOOL
+ {#if tool?.meta?.manifest?.version} +
+ v{tool?.meta?.manifest?.version ?? ''} +
+ {/if} +
{tool.name}
From 37a052327a2e421cf4733af476e253a2574c9f63 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 21:14:31 -0700 Subject: [PATCH 216/287] chore: format --- src/lib/i18n/locales/ar-BH/translation.json | 2 ++ src/lib/i18n/locales/bg-BG/translation.json | 2 ++ src/lib/i18n/locales/bn-BD/translation.json | 2 ++ src/lib/i18n/locales/ca-ES/translation.json | 2 ++ src/lib/i18n/locales/ceb-PH/translation.json | 2 ++ src/lib/i18n/locales/de-DE/translation.json | 2 ++ src/lib/i18n/locales/dg-DG/translation.json | 2 ++ src/lib/i18n/locales/en-GB/translation.json | 2 ++ src/lib/i18n/locales/en-US/translation.json | 2 ++ src/lib/i18n/locales/es-ES/translation.json | 2 ++ src/lib/i18n/locales/fa-IR/translation.json | 2 ++ src/lib/i18n/locales/fi-FI/translation.json | 2 ++ src/lib/i18n/locales/fr-CA/translation.json | 2 ++ src/lib/i18n/locales/fr-FR/translation.json | 2 ++ src/lib/i18n/locales/he-IL/translation.json | 2 ++ src/lib/i18n/locales/hi-IN/translation.json | 2 ++ src/lib/i18n/locales/hr-HR/translation.json | 2 ++ src/lib/i18n/locales/it-IT/translation.json | 2 ++ src/lib/i18n/locales/ja-JP/translation.json | 2 ++ src/lib/i18n/locales/ka-GE/translation.json | 2 ++ src/lib/i18n/locales/ko-KR/translation.json | 2 ++ src/lib/i18n/locales/lt-LT/translation.json | 2 ++ src/lib/i18n/locales/nb-NO/translation.json | 2 ++ src/lib/i18n/locales/nl-NL/translation.json | 2 ++ src/lib/i18n/locales/pa-IN/translation.json | 2 ++ src/lib/i18n/locales/pl-PL/translation.json | 2 ++ src/lib/i18n/locales/pt-BR/translation.json | 2 ++ src/lib/i18n/locales/pt-PT/translation.json | 2 ++ src/lib/i18n/locales/ru-RU/translation.json | 2 ++ src/lib/i18n/locales/sr-RS/translation.json | 2 ++ src/lib/i18n/locales/sv-SE/translation.json | 2 ++ src/lib/i18n/locales/tk-TW/translation.json | 2 ++ src/lib/i18n/locales/tr-TR/translation.json | 2 ++ src/lib/i18n/locales/uk-UA/translation.json | 2 ++ src/lib/i18n/locales/vi-VN/translation.json | 2 ++ src/lib/i18n/locales/zh-CN/translation.json | 2 ++ src/lib/i18n/locales/zh-TW/translation.json | 2 ++ 37 files changed, 74 insertions(+) diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 165dc825b..2847b854d 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "لا تسمح بذلك", "Don't have an account?": "ليس لديك حساب؟", "Don't like the style": "لا أحب النمط", + "Done": "", "Download": "تحميل", "Download canceled": "تم اللغاء التحميل", "Download Database": "تحميل قاعدة البيانات", @@ -505,6 +506,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "إظهار الاختصارات", + "Show your support!": "", "Showcased creativity": "أظهر الإبداع", "sidebar": "الشريط الجانبي", "Sign in": "تسجيل الدخول", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index ad6225eba..fa534ef3e 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Не Позволявай", "Don't have an account?": "Нямате акаунт?", "Don't like the style": "Не харесваш стила?", + "Done": "", "Download": "Изтегляне отменено", "Download canceled": "Изтегляне отменено", "Download Database": "Сваляне на база данни", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Покажи", + "Show your support!": "", "Showcased creativity": "Показана креативност", "sidebar": "sidebar", "Sign in": "Вписване", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 49f0e06ef..27365e1fd 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "অনুমোদন দেবেন না", "Don't have an account?": "একাউন্ট নেই?", "Don't like the style": "স্টাইল পছন্দ করেন না", + "Done": "", "Download": "ডাউনলোড", "Download canceled": "ডাউনলোড বাতিল করা হয়েছে", "Download Database": "ডেটাবেজ ডাউনলোড করুন", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "শর্টকাটগুলো দেখান", + "Show your support!": "", "Showcased creativity": "সৃজনশীলতা প্রদর্শন", "sidebar": "সাইডবার", "Sign in": "সাইন ইন", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 98ae50aa5..336f3eeb1 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "No permetre", "Don't have an account?": "No tens un compte?", "Don't like the style": "No t'agrada l'estil?", + "Done": "", "Download": "Descarregar", "Download canceled": "Descàrrega cancel·lada", "Download Database": "Descarregar la base de dades", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "Mostrar els detalls de l'administrador a la superposició del compte pendent", "Show Model": "Mostrar el model", "Show shortcuts": "Mostrar dreceres", + "Show your support!": "", "Showcased creativity": "Creativitat mostrada", "sidebar": "barra lateral", "Sign in": "Iniciar sessió", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 68e21d8be..1923ef56f 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Dili tugotan", "Don't have an account?": "Wala kay account ?", "Don't like the style": "", + "Done": "", "Download": "", "Download canceled": "", "Download Database": "I-download ang database", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Ipakita ang mga shortcut", + "Show your support!": "", "Showcased creativity": "", "sidebar": "lateral bar", "Sign in": "Para maka log in", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index 710aad09f..2d6c81831 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Nicht erlauben", "Don't have an account?": "Hast du vielleicht noch kein Konto?", "Don't like the style": "Dir gefällt der Style nicht", + "Done": "", "Download": "Herunterladen", "Download canceled": "Download abgebrochen", "Download Database": "Datenbank herunterladen", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "Admin-Details im Account-Pending-Overlay anzeigen", "Show Model": "", "Show shortcuts": "Verknüpfungen anzeigen", + "Show your support!": "", "Showcased creativity": "Kreativität zur Schau gestellt", "sidebar": "Seitenleiste", "Sign in": "Anmelden", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index a26e8dda4..15840440e 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Don't Allow", "Don't have an account?": "No account? Much sad.", "Don't like the style": "", + "Done": "", "Download": "", "Download canceled": "", "Download Database": "Download Database", @@ -503,6 +504,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Show shortcuts much shortcut", + "Show your support!": "", "Showcased creativity": "", "sidebar": "sidebar much side", "Sign in": "Sign in very sign", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index af9d122bb..ad3109a95 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "", "Don't have an account?": "", "Don't like the style": "", + "Done": "", "Download": "", "Download canceled": "", "Download Database": "", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "", + "Show your support!": "", "Showcased creativity": "", "sidebar": "", "Sign in": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index af9d122bb..ad3109a95 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "", "Don't have an account?": "", "Don't like the style": "", + "Done": "", "Download": "", "Download canceled": "", "Download Database": "", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "", + "Show your support!": "", "Showcased creativity": "", "sidebar": "", "Sign in": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 3394bd90c..a928ace1f 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "No Permitir", "Don't have an account?": "¿No tienes una cuenta?", "Don't like the style": "No te gusta el estilo?", + "Done": "", "Download": "Descargar", "Download canceled": "Descarga cancelada", "Download Database": "Descarga la Base de Datos", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Mostrar atajos", + "Show your support!": "", "Showcased creativity": "Mostrar creatividad", "sidebar": "barra lateral", "Sign in": "Iniciar sesión", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index a8b59dca1..1cc8dae6f 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "اجازه نده", "Don't have an account?": "حساب کاربری ندارید؟", "Don't like the style": "نظری ندارید؟", + "Done": "", "Download": "دانلود کن", "Download canceled": "دانلود لغو شد", "Download Database": "دانلود پایگاه داده", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "نمایش میانبرها", + "Show your support!": "", "Showcased creativity": "ایده\u200cآفرینی", "sidebar": "نوار کناری", "Sign in": "ورود", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 00bbd8c00..1cb1453a6 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Älä salli", "Don't have an account?": "Eikö sinulla ole tiliä?", "Don't like the style": "En pidä tyylistä", + "Done": "", "Download": "Lataa", "Download canceled": "Lataus peruutettu", "Download Database": "Lataa tietokanta", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Näytä pikanäppäimet", + "Show your support!": "", "Showcased creativity": "Näytti luovuutta", "sidebar": "sivupalkki", "Sign in": "Kirjaudu sisään", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 0d0ba8d32..03b09764a 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Ne pas autoriser", "Don't have an account?": "Vous n'avez pas de compte ?", "Don't like the style": "Vous n'aimez pas le style ?", + "Done": "", "Download": "Télécharger", "Download canceled": "Téléchargement annulé", "Download Database": "Télécharger la base de données", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Afficher les raccourcis", + "Show your support!": "", "Showcased creativity": "Créativité affichée", "sidebar": "barre latérale", "Sign in": "Se connecter", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 103247e52..021a20c46 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Ne pas autoriser", "Don't have an account?": "Vous n'avez pas de compte ?", "Don't like the style": "N'aime pas le style", + "Done": "", "Download": "Télécharger", "Download canceled": "Téléchargement annulé", "Download Database": "Télécharger la base de données", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Afficher les raccourcis", + "Show your support!": "", "Showcased creativity": "Créativité affichée", "sidebar": "barre latérale", "Sign in": "Se connecter", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index 9054fe03e..7cad70c19 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "אל תאפשר", "Don't have an account?": "אין לך חשבון?", "Don't like the style": "לא אוהב את הסגנון", + "Done": "", "Download": "הורד", "Download canceled": "ההורדה בוטלה", "Download Database": "הורד מסד נתונים", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "הצג קיצורי דרך", + "Show your support!": "", "Showcased creativity": "הצגת יצירתיות", "sidebar": "סרגל צד", "Sign in": "הירשם", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 3ee1cfe1a..0cd959aa7 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "अनुमति न दें", "Don't have an account?": "कोई खाता नहीं है?", "Don't like the style": "शैली पसंद नहीं है", + "Done": "", "Download": "डाउनलोड", "Download canceled": "डाउनलोड रद्द किया गया", "Download Database": "डेटाबेस डाउनलोड करें", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "शॉर्टकट दिखाएँ", + "Show your support!": "", "Showcased creativity": "रचनात्मकता का प्रदर्शन किया", "sidebar": "साइड बार", "Sign in": "साइन इन", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index ecdc9057b..9f3412261 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Ne dopuštaj", "Don't have an account?": "Nemate račun?", "Don't like the style": "Ne sviđa mi se stil", + "Done": "", "Download": "Preuzimanje", "Download canceled": "Preuzimanje otkazano", "Download Database": "Preuzmi bazu podataka", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Pokaži prečace", + "Show your support!": "", "Showcased creativity": "Prikazana kreativnost", "sidebar": "bočna traka", "Sign in": "Prijava", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 0298134db..d414a04a4 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Non consentire", "Don't have an account?": "Non hai un account?", "Don't like the style": "Non ti piace lo stile", + "Done": "", "Download": "Scarica", "Download canceled": "Scaricamento annullato", "Download Database": "Scarica database", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Mostra", + "Show your support!": "", "Showcased creativity": "Creatività messa in mostra", "sidebar": "barra laterale", "Sign in": "Accedi", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index d91343dad..765294c02 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "許可しない", "Don't have an account?": "アカウントをお持ちではありませんか?", "Don't like the style": "デザインが好きでない", + "Done": "", "Download": "ダウンロードをキャンセルしました", "Download canceled": "ダウンロードをキャンセルしました", "Download Database": "データベースをダウンロード", @@ -500,6 +501,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "表示", + "Show your support!": "", "Showcased creativity": "創造性を披露", "sidebar": "サイドバー", "Sign in": "サインイン", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 78a3841aa..c814420c1 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "არ დაუშვა", "Don't have an account?": "არ გაქვს ანგარიში?", "Don't like the style": "არ ეთიკურია ფართოდ", + "Done": "", "Download": "ჩამოტვირთვა გაუქმებულია", "Download canceled": "ჩამოტვირთვა გაუქმებულია", "Download Database": "გადმოწერე მონაცემთა ბაზა", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "მალსახმობების ჩვენება", + "Show your support!": "", "Showcased creativity": "ჩვენებული ქონება", "sidebar": "საიდბარი", "Sign in": "ავტორიზაცია", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 6c8498206..7abccd7fd 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "허용 안 함", "Don't have an account?": "계정이 없으신가요?", "Don't like the style": "스타일을 좋아하지 않으세요?", + "Done": "", "Download": "다운로드", "Download canceled": "다운로드 취소", "Download Database": "데이터베이스 다운로드", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "사용자용 계정 보류 설명창에, 관리자 상세 정보 노출", "Show Model": "", "Show shortcuts": "단축키 보기", + "Show your support!": "", "Showcased creativity": "창의성 발휘", "sidebar": "사이드바", "Sign in": "로그인", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index c65693bfe..7d2652513 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Neleisti", "Don't have an account?": "Neturite paskyros?", "Don't like the style": "Nepatinka stilius", + "Done": "", "Download": "Parsisiųsti", "Download canceled": "Parsisiuntimas atšauktas", "Download Database": "Parsisiųsti duomenų bazę", @@ -503,6 +504,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Rodyti trumpinius", + "Show your support!": "", "Showcased creativity": "Kūrybingų užklausų paroda", "sidebar": "šoninis meniu", "Sign in": "Prisijungti", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index f3c91c88d..8de6b0861 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Ikke tillat", "Don't have an account?": "Har du ikke en konto?", "Don't like the style": "Liker ikke stilen", + "Done": "", "Download": "Last ned", "Download canceled": "Nedlasting avbrutt", "Download Database": "Last ned database", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "Vis administratordetaljer i ventende kontooverlay", "Show Model": "", "Show shortcuts": "Vis snarveier", + "Show your support!": "", "Showcased creativity": "Vist frem kreativitet", "sidebar": "sidefelt", "Sign in": "Logg inn", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index d51f7b590..747658698 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Niet Toestaan", "Don't have an account?": "Heb je geen account?", "Don't like the style": "Je vindt het stijl niet?", + "Done": "", "Download": "Download", "Download canceled": "Download geannuleerd", "Download Database": "Download Database", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Toon snelkoppelingen", + "Show your support!": "", "Showcased creativity": "Tooncase creativiteit", "sidebar": "sidebar", "Sign in": "Inloggen", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index 03c34cbb5..f742492d1 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "ਆਗਿਆ ਨਾ ਦਿਓ", "Don't have an account?": "ਖਾਤਾ ਨਹੀਂ ਹੈ?", "Don't like the style": "ਸਟਾਈਲ ਪਸੰਦ ਨਹੀਂ ਹੈ", + "Done": "", "Download": "ਡਾਊਨਲੋਡ", "Download canceled": "ਡਾਊਨਲੋਡ ਰੱਦ ਕੀਤਾ ਗਿਆ", "Download Database": "ਡਾਟਾਬੇਸ ਡਾਊਨਲੋਡ ਕਰੋ", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "ਸ਼ਾਰਟਕਟ ਦਿਖਾਓ", + "Show your support!": "", "Showcased creativity": "ਸਿਰਜਣਾਤਮਕਤਾ ਦਿਖਾਈ", "sidebar": "ਸਾਈਡਬਾਰ", "Sign in": "ਸਾਈਨ ਇਨ ਕਰੋ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index c57a1abe6..3573d7c81 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Nie zezwalaj", "Don't have an account?": "Nie masz konta?", "Don't like the style": "Nie podobał mi się styl", + "Done": "", "Download": "Pobieranie", "Download canceled": "Pobieranie przerwane", "Download Database": "Pobierz bazę danych", @@ -503,6 +504,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Pokaż skróty", + "Show your support!": "", "Showcased creativity": "Pokaz kreatywności", "sidebar": "Panel boczny", "Sign in": "Zaloguj się", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 669209a5a..ce40d80e4 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Não Permitir", "Don't have an account?": "Não tem uma conta?", "Don't like the style": "Não gosta do estilo", + "Done": "", "Download": "Baixar", "Download canceled": "Download cancelado", "Download Database": "Baixar Banco de Dados", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Mostrar", + "Show your support!": "", "Showcased creativity": "Criatividade Exibida", "sidebar": "barra lateral", "Sign in": "Entrar", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index d98c00276..bb48b4b90 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Não Permitir", "Don't have an account?": "Não tem uma conta?", "Don't like the style": "Não gosta do estilo", + "Done": "", "Download": "Descarregar", "Download canceled": "Download cancelado", "Download Database": "Descarregar Base de Dados", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na sobreposição de Conta Pendente", "Show Model": "", "Show shortcuts": "Mostrar atalhos", + "Show your support!": "", "Showcased creativity": "Criatividade Exibida", "sidebar": "barra lateral", "Sign in": "Entrar", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index e8e3431b8..798795396 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Не разрешать", "Don't have an account?": "у вас не есть аккаунт?", "Don't like the style": "Не нравится стиль", + "Done": "", "Download": "Загрузить", "Download canceled": "Загрузка отменена", "Download Database": "Загрузить базу данных", @@ -503,6 +504,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Показать клавиатурные сокращения", + "Show your support!": "", "Showcased creativity": "Показать творчество", "sidebar": "боковая панель", "Sign in": "Войти", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index f4483c723..5abaa9984 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Не дозволи", "Don't have an account?": "Немате налог?", "Don't like the style": "Не свиђа ми се стил", + "Done": "", "Download": "Преузми", "Download canceled": "Преузимање отказано", "Download Database": "Преузми базу података", @@ -502,6 +503,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Прикажи пречице", + "Show your support!": "", "Showcased creativity": "Приказана креативност", "sidebar": "бочна трака", "Sign in": "Пријави се", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index d55eedaef..618db37ac 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Tillåt inte", "Don't have an account?": "Har du inget konto?", "Don't like the style": "Tycker inte om utseendet", + "Done": "", "Download": "Ladda ner", "Download canceled": "Nedladdning avbruten", "Download Database": "Ladda ner databas", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "Visa administratörsinformation till väntande konton", "Show Model": "", "Show shortcuts": "Visa genvägar", + "Show your support!": "", "Showcased creativity": "Visade kreativitet", "sidebar": "sidofält", "Sign in": "Logga in", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index af9d122bb..ad3109a95 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "", "Don't have an account?": "", "Don't like the style": "", + "Done": "", "Download": "", "Download canceled": "", "Download Database": "", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "", + "Show your support!": "", "Showcased creativity": "", "sidebar": "", "Sign in": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index de284a4c8..cb0ba78ae 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "İzin Verme", "Don't have an account?": "Hesabınız yok mu?", "Don't like the style": "Tarzını beğenmedim", + "Done": "", "Download": "İndir", "Download canceled": "İndirme iptal edildi", "Download Database": "Veritabanını İndir", @@ -501,6 +502,7 @@ "Show Admin Details in Account Pending Overlay": "", "Show Model": "", "Show shortcuts": "Kısayolları göster", + "Show your support!": "", "Showcased creativity": "Sergilenen yaratıcılık", "sidebar": "kenar çubuğu", "Sign in": "Oturum aç", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 814f657b5..272f67ceb 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Не дозволяти", "Don't have an account?": "Немає облікового запису?", "Don't like the style": "Не подобається стиль", + "Done": "", "Download": "Завантажити", "Download canceled": "Завантаження скасовано", "Download Database": "Завантажити базу даних", @@ -503,6 +504,7 @@ "Show Admin Details in Account Pending Overlay": "Відобразити дані адміна у вікні очікування облікового запису", "Show Model": "Показати модель", "Show shortcuts": "Показати клавіатурні скорочення", + "Show your support!": "", "Showcased creativity": "Продемонстрований креатив", "sidebar": "бокова панель", "Sign in": "Увійти", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 60db86300..94c7ea22d 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "Không Cho phép", "Don't have an account?": "Không có tài khoản?", "Don't like the style": "Không thích phong cách trả lời", + "Done": "", "Download": "Tải về", "Download canceled": "Đã hủy download", "Download Database": "Tải xuống Cơ sở dữ liệu", @@ -500,6 +501,7 @@ "Show Admin Details in Account Pending Overlay": "Hiển thị thông tin của Quản trị viên trên màn hình hiển thị Tài khoản đang chờ xử lý", "Show Model": "Hiện mô hình", "Show shortcuts": "Hiển thị phím tắt", + "Show your support!": "", "Showcased creativity": "Thể hiện sự sáng tạo", "sidebar": "thanh bên", "Sign in": "Đăng nhập", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 28e68e2e6..3863f8f8d 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "不允许", "Don't have an account?": "没有账号?", "Don't like the style": "不喜欢这个文风", + "Done": "", "Download": "下载", "Download canceled": "下载已取消", "Download Database": "下载数据库", @@ -500,6 +501,7 @@ "Show Admin Details in Account Pending Overlay": "在用户待激活界面中显示管理员邮箱等详细信息", "Show Model": "显示", "Show shortcuts": "显示快捷方式", + "Show your support!": "", "Showcased creativity": "很有创意", "sidebar": "侧边栏", "Sign in": "登录", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 9c7d53458..6ab58a4e0 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -184,6 +184,7 @@ "Don't Allow": "不允許", "Don't have an account?": "還沒有註冊帳號?", "Don't like the style": "不喜歡這個樣式?", + "Done": "", "Download": "下載", "Download canceled": "下載已取消", "Download Database": "下載資料庫", @@ -500,6 +501,7 @@ "Show Admin Details in Account Pending Overlay": "在帳號待審覆蓋層中顯示管理員詳細資訊", "Show Model": "顯示模型", "Show shortcuts": "顯示快速鍵", + "Show your support!": "", "Showcased creativity": "展示創造性", "sidebar": "側邊欄", "Sign in": "登入", From bc73cb139084db2e307ae7f05f314b23c51fd8e3 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 21:48:06 -0700 Subject: [PATCH 217/287] enh: iframe message event listener --- src/routes/+layout.svelte | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index c4cbc9cfd..675ecc5dc 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -50,6 +50,33 @@ } }; + window.addEventListener('message', (event) => { + if (event.origin === window.origin) { + // Replace with your iframe's origin + console.log('Message received from iframe:', event.data); + if (event.data.type === 'input:prompt') { + console.log(event.data.text); + + const inputElement = document.getElementById('chat-textarea'); + + if (inputElement) { + inputElement.value = event.data.text; + inputElement.focus(); + } + } + + if (event.data.type === 'action:submit-prompt') { + console.log(event.data.text); + + const submitButtonElement = document.getElementById('send-message-button'); + + if (submitButtonElement) { + submitButtonElement.click(); + } + } + } + }); + window.addEventListener('resize', onResize); const setWakeLock = async () => { From f33ca4c9a5b7a618b54c25561ec98a358c2fa282 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Sun, 23 Jun 2024 23:10:26 -0700 Subject: [PATCH 218/287] refac --- src/lib/components/chat/Chat.svelte | 35 +++++++++++++++++++++++++++++ src/routes/+layout.svelte | 27 ---------------------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 8f8448847..621dc827e 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -127,6 +127,41 @@ } onMount(async () => { + window.addEventListener('message', async (event) => { + if (event.origin === window.origin) { + // Replace with your iframe's origin + console.log('Message received from iframe:', event.data); + if (event.data.type === 'input:prompt') { + console.log(event.data.text); + + const inputElement = document.getElementById('chat-textarea'); + + if (inputElement) { + prompt = event.data.text; + inputElement.focus(); + } + } + + if (event.data.type === 'action:submit') { + console.log(event.data.text); + + if (prompt !== '') { + await tick(); + submitPrompt(prompt); + } + } + + if (event.data.type === 'input:prompt:submit') { + console.log(event.data.text); + + if (prompt !== '') { + await tick(); + submitPrompt(event.data.text); + } + } + } + }); + if (!$chatId) { chatId.subscribe(async (value) => { if (!value) { diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 675ecc5dc..c4cbc9cfd 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -50,33 +50,6 @@ } }; - window.addEventListener('message', (event) => { - if (event.origin === window.origin) { - // Replace with your iframe's origin - console.log('Message received from iframe:', event.data); - if (event.data.type === 'input:prompt') { - console.log(event.data.text); - - const inputElement = document.getElementById('chat-textarea'); - - if (inputElement) { - inputElement.value = event.data.text; - inputElement.focus(); - } - } - - if (event.data.type === 'action:submit-prompt') { - console.log(event.data.text); - - const submitButtonElement = document.getElementById('send-message-button'); - - if (submitButtonElement) { - submitButtonElement.click(); - } - } - } - }); - window.addEventListener('resize', onResize); const setWakeLock = async () => { From 82b44740db8e84fd93f9791c6ce99722db747bbc Mon Sep 17 00:00:00 2001 From: josephrocca <1167575+josephrocca@users.noreply.github.com> Date: Mon, 24 Jun 2024 14:10:32 +0800 Subject: [PATCH 219/287] Fix scrollToBottom button container obstructing clicks on buttons beneath it --- src/lib/components/chat/MessageInput.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index ba288829b..8814c6a7d 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -291,9 +291,9 @@
{#if autoScroll === false && messages.length > 0} -
+
-
Export LiteLLM config.yaml
+
{$i18n.t('Export LiteLLM config.yaml')}
@@ -137,7 +137,7 @@ class=" px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-lg" type="submit" > - Save + {$i18n.t('Save')}
--> diff --git a/src/lib/components/admin/Settings/Pipelines.svelte b/src/lib/components/admin/Settings/Pipelines.svelte index b3e20a05e..a830ee12d 100644 --- a/src/lib/components/admin/Settings/Pipelines.svelte +++ b/src/lib/components/admin/Settings/Pipelines.svelte @@ -509,7 +509,7 @@
{/if} {:else} -
Pipelines Not Detected
+
{$i18n.t('Pipelines Not Detected')}
{/if} {:else}
@@ -525,7 +525,7 @@ class=" px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-lg" type="submit" > - Save + {$i18n.t('Save')}
diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 2847b854d..a9834c886 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -238,6 +238,7 @@ "Export Chats": "تصدير جميع الدردشات", "Export Documents Mapping": "تصدير وثائق الخرائط", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "نماذج التصدير", "Export Prompts": "مطالبات التصدير", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "{{error}} تم رفض الإذن عند الوصول إلى الميكروفون ", "Personalization": "التخصيص", "Pipelines": "خطوط الانابيب", + "Pipelines Not Detected": "", "Pipelines Valves": "صمامات خطوط الأنابيب", "Plain text (.txt)": "نص عادي (.txt)", "Playground": "مكان التجربة", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index fa534ef3e..5aa2585a6 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Експортване на чатове", "Export Documents Mapping": "Експортване на документен мапинг", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Експортиране на модели", "Export Prompts": "Експортване на промптове", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Permission denied when accessing microphone: {{error}}", "Personalization": "Персонализация", "Pipelines": "Тръбопроводи", + "Pipelines Not Detected": "", "Pipelines Valves": "Тръбопроводи Вентили", "Plain text (.txt)": "Plain text (.txt)", "Playground": "Плейграунд", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 27365e1fd..2d5af8cad 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -238,6 +238,7 @@ "Export Chats": "চ্যাটগুলো এক্সপোর্ট করুন", "Export Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং এক্সপোর্ট করুন", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "রপ্তানি মডেল", "Export Prompts": "প্রম্পটগুলো একপোর্ট করুন", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "মাইক্রোফোন ব্যবহারের অনুমতি পাওয়া যায়নি: {{error}}", "Personalization": "ডিজিটাল বাংলা", "Pipelines": "পাইপলাইন", + "Pipelines Not Detected": "", "Pipelines Valves": "পাইপলাইন ভালভ", "Plain text (.txt)": "প্লায়েন টেক্সট (.txt)", "Playground": "খেলাঘর", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 336f3eeb1..7e24536fb 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Exportar els xats", "Export Documents Mapping": "Exportar el mapatge de documents", "Export Functions": "Exportar funcions", + "Export LiteLLM config.yaml": "", "Export Models": "Exportar els models", "Export Prompts": "Exportar les indicacions", "Export Tools": "Exportar les eines", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Permís denegat en accedir al micròfon: {{error}}", "Personalization": "Personalització", "Pipelines": "Pipelines", + "Pipelines Not Detected": "", "Pipelines Valves": "Vàlvules de les Pipelines", "Plain text (.txt)": "Text pla (.txt)", "Playground": "Zona de jocs", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 1923ef56f..79f0ea987 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -238,6 +238,7 @@ "Export Chats": "I-export ang mga chat", "Export Documents Mapping": "I-export ang pagmapa sa dokumento", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "", "Export Prompts": "Export prompts", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Gidili ang pagtugot sa dihang nag-access sa mikropono: {{error}}", "Personalization": "", "Pipelines": "", + "Pipelines Not Detected": "", "Pipelines Valves": "", "Plain text (.txt)": "", "Playground": "Dulaanan", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index 2d6c81831..863e2eea5 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Chats exportieren", "Export Documents Mapping": "Dokumentenmapping exportieren", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Modelle exportieren", "Export Prompts": "Prompts exportieren", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Zugriff auf das Mikrofon verweigert: {{error}}", "Personalization": "Personalisierung", "Pipelines": "Pipelines", + "Pipelines Not Detected": "", "Pipelines Valves": "Rohrleitungen Ventile", "Plain text (.txt)": "Nur Text (.txt)", "Playground": "Testumgebung", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 15840440e..168740ce6 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Export Barks", "Export Documents Mapping": "Export Mappings of Dogos", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "", "Export Prompts": "Export Promptos", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Permission denied when accessing microphone: {{error}}", "Personalization": "Personalization", "Pipelines": "", + "Pipelines Not Detected": "", "Pipelines Valves": "", "Plain text (.txt)": "Plain text (.txt)", "Playground": "Playground", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index ad3109a95..b1f4d7206 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -238,6 +238,7 @@ "Export Chats": "", "Export Documents Mapping": "", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "", "Export Prompts": "", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "", "Personalization": "", "Pipelines": "", + "Pipelines Not Detected": "", "Pipelines Valves": "", "Plain text (.txt)": "", "Playground": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index ad3109a95..b1f4d7206 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -238,6 +238,7 @@ "Export Chats": "", "Export Documents Mapping": "", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "", "Export Prompts": "", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "", "Personalization": "", "Pipelines": "", + "Pipelines Not Detected": "", "Pipelines Valves": "", "Plain text (.txt)": "", "Playground": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index a928ace1f..4acabe8e0 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Exportar Chats", "Export Documents Mapping": "Exportar el mapeo de documentos", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Modelos de exportación", "Export Prompts": "Exportar Prompts", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Permiso denegado al acceder al micrófono: {{error}}", "Personalization": "Personalización", "Pipelines": "Tuberías", + "Pipelines Not Detected": "", "Pipelines Valves": "Tuberías Válvulas", "Plain text (.txt)": "Texto plano (.txt)", "Playground": "Patio de juegos", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 1cc8dae6f..1c19d5009 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -238,6 +238,7 @@ "Export Chats": "اکسپورت از گپ\u200cها", "Export Documents Mapping": "اکسپورت از نگاشت اسناد", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "مدل های صادرات", "Export Prompts": "اکسپورت از پرامپت\u200cها", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "هنگام دسترسی به میکروفون، اجازه داده نشد: {{error}}", "Personalization": "شخصی سازی", "Pipelines": "خط لوله", + "Pipelines Not Detected": "", "Pipelines Valves": "شیرالات خطوط لوله", "Plain text (.txt)": "متن ساده (.txt)", "Playground": "زمین بازی", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 1cb1453a6..a6b82e386 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Vie keskustelut", "Export Documents Mapping": "Vie asiakirjakartoitus", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Vie malleja", "Export Prompts": "Vie kehotteet", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Mikrofonin käyttöoikeus evätty: {{error}}", "Personalization": "Henkilökohtaisuus", "Pipelines": "Putkistot", + "Pipelines Not Detected": "", "Pipelines Valves": "Putkistot Venttiilit", "Plain text (.txt)": "Pelkkä teksti (.txt)", "Playground": "Leikkipaikka", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 03b09764a..bfd8aab3b 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Exporter les discussions", "Export Documents Mapping": "Exporter le mappage des documents", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Modèles d’exportation", "Export Prompts": "Exporter les prompts", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Permission refusée lors de l'accès au microphone : {{error}}", "Personalization": "Personnalisation", "Pipelines": "Pipelines", + "Pipelines Not Detected": "", "Pipelines Valves": "Vannes de pipelines", "Plain text (.txt)": "Texte brut (.txt)", "Playground": "Aire de jeu", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 021a20c46..5544a1c66 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Exporter les Chats", "Export Documents Mapping": "Exporter la Correspondance des Documents", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Exporter les Modèles", "Export Prompts": "Exporter les Prompts", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Permission refusée lors de l'accès au microphone : {{error}}", "Personalization": "Personnalisation", "Pipelines": "Pipelines", + "Pipelines Not Detected": "", "Pipelines Valves": "Vannes de pipelines", "Plain text (.txt)": "Texte Brute (.txt)", "Playground": "Aire de jeu", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index 7cad70c19..c8459c03c 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -238,6 +238,7 @@ "Export Chats": "ייצוא צ'אטים", "Export Documents Mapping": "ייצוא מיפוי מסמכים", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "ייצוא מודלים", "Export Prompts": "ייצוא פקודות", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "ההרשאה נדחתה בעת גישה למיקרופון: {{error}}", "Personalization": "תאור", "Pipelines": "צינורות", + "Pipelines Not Detected": "", "Pipelines Valves": "צינורות שסתומים", "Plain text (.txt)": "טקסט פשוט (.txt)", "Playground": "אזור משחקים", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 0cd959aa7..e3975d152 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -238,6 +238,7 @@ "Export Chats": "चैट निर्यात करें", "Export Documents Mapping": "निर्यात दस्तावेज़ मैपिंग", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "निर्यात मॉडल", "Export Prompts": "प्रॉम्प्ट निर्यात करें", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "माइक्रोफ़ोन तक पहुँचने पर अनुमति अस्वीकृत: {{error}}", "Personalization": "पेरसनलाइज़मेंट", "Pipelines": "पाइपलाइनों", + "Pipelines Not Detected": "", "Pipelines Valves": "पाइपलाइन वाल्व", "Plain text (.txt)": "सादा पाठ (.txt)", "Playground": "कार्यक्षेत्र", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 9f3412261..d111b4376 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Izvoz razgovora", "Export Documents Mapping": "Izvoz mapiranja dokumenata", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Izvoz modela", "Export Prompts": "Izvoz prompta", "Export Tools": "Izvoz alata", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Pristup mikrofonu odbijen: {{error}}", "Personalization": "Prilagodba", "Pipelines": "Cjevovodi", + "Pipelines Not Detected": "", "Pipelines Valves": "Ventili za cjevovode", "Plain text (.txt)": "Običan tekst (.txt)", "Playground": "Igralište", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index d414a04a4..239006b23 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Esporta chat", "Export Documents Mapping": "Esporta mappatura documenti", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Esporta modelli", "Export Prompts": "Esporta prompt", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Autorizzazione negata durante l'accesso al microfono: {{error}}", "Personalization": "Personalizzazione", "Pipelines": "Condutture", + "Pipelines Not Detected": "", "Pipelines Valves": "Valvole per tubazioni", "Plain text (.txt)": "Testo normale (.txt)", "Playground": "Terreno di gioco", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 765294c02..3a636d33e 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -238,6 +238,7 @@ "Export Chats": "チャットをエクスポート", "Export Documents Mapping": "ドキュメントマッピングをエクスポート", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "モデルのエクスポート", "Export Prompts": "プロンプトをエクスポート", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "マイクへのアクセス時に権限が拒否されました: {{error}}", "Personalization": "個人化", "Pipelines": "パイプライン", + "Pipelines Not Detected": "", "Pipelines Valves": "パイプラインバルブ", "Plain text (.txt)": "プレーンテキスト (.txt)", "Playground": "プレイグラウンド", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index c814420c1..640665e5d 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -238,6 +238,7 @@ "Export Chats": "მიმოწერის ექსპორტირება", "Export Documents Mapping": "დოკუმენტების კავშირის ექსპორტი", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "ექსპორტის მოდელები", "Export Prompts": "მოთხოვნების ექსპორტი", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "ნებართვა უარყოფილია მიკროფონზე წვდომისას: {{error}}", "Personalization": "პერსონალიზაცია", "Pipelines": "მილსადენები", + "Pipelines Not Detected": "", "Pipelines Valves": "მილსადენების სარქველები", "Plain text (.txt)": "ტექსტი (.txt)", "Playground": "სათამაშო მოედანი", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 7abccd7fd..e5148a431 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -238,6 +238,7 @@ "Export Chats": "채팅 내보내기", "Export Documents Mapping": "문서 매핑 내보내기", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "모델 내보내기", "Export Prompts": "프롬프트 내보내기", "Export Tools": "도구 내보내기", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "마이크 액세스가 거부되었습니다: {{error}}", "Personalization": "개인화", "Pipelines": "파이프라인", + "Pipelines Not Detected": "", "Pipelines Valves": "파이프라인 밸브", "Plain text (.txt)": "일반 텍스트(.txt)", "Playground": "놀이터", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 7d2652513..01ee7f297 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Eksportuoti pokalbius", "Export Documents Mapping": "Eksportuoti dokumentų žemėlapį", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "", "Export Prompts": "Eksportuoti užklausas", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Leidimas naudoti mikrofoną atmestas: {{error}}", "Personalization": "", "Pipelines": "", + "Pipelines Not Detected": "", "Pipelines Valves": "", "Plain text (.txt)": "Grynas tekstas (.txt)", "Playground": "Eksperimentavimo erdvė", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 8de6b0861..df78ce0ea 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Eksporter chatter", "Export Documents Mapping": "Eksporter dokumentkartlegging", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Eksporter modeller", "Export Prompts": "Eksporter prompts", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Tillatelse nektet ved tilgang til mikrofon: {{error}}", "Personalization": "Personalisering", "Pipelines": "Pipelines", + "Pipelines Not Detected": "", "Pipelines Valves": "Pipeline-ventiler", "Plain text (.txt)": "Ren tekst (.txt)", "Playground": "Lekeplass", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 747658698..515f1cd4b 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Exporteer Chats", "Export Documents Mapping": "Exporteer Documenten Mapping", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Modellen exporteren", "Export Prompts": "Exporteer Prompts", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Toestemming geweigerd bij toegang tot microfoon: {{error}}", "Personalization": "Personalisatie", "Pipelines": "Pijpleidingen", + "Pipelines Not Detected": "", "Pipelines Valves": "Pijpleidingen Kleppen", "Plain text (.txt)": "Platte tekst (.txt)", "Playground": "Speeltuin", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index f742492d1..a1dd80092 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -238,6 +238,7 @@ "Export Chats": "ਗੱਲਾਂ ਨਿਰਯਾਤ ਕਰੋ", "Export Documents Mapping": "ਡਾਕੂਮੈਂਟ ਮੈਪਿੰਗ ਨਿਰਯਾਤ ਕਰੋ", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "ਨਿਰਯਾਤ ਮਾਡਲ", "Export Prompts": "ਪ੍ਰੰਪਟ ਨਿਰਯਾਤ ਕਰੋ", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਤੱਕ ਪਹੁੰਚਣ ਸਮੇਂ ਆਗਿਆ ਰੱਦ ਕੀਤੀ ਗਈ: {{error}}", "Personalization": "ਪਰਸੋਨਲਿਸ਼ਮ", "Pipelines": "ਪਾਈਪਲਾਈਨਾਂ", + "Pipelines Not Detected": "", "Pipelines Valves": "ਪਾਈਪਲਾਈਨਾਂ ਵਾਲਵ", "Plain text (.txt)": "ਸਧਾਰਨ ਪਾਠ (.txt)", "Playground": "ਖੇਡ ਦਾ ਮੈਦਾਨ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 3573d7c81..5692d6bf9 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Eksportuj czaty", "Export Documents Mapping": "Eksportuj mapowanie dokumentów", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Eksportuj modele", "Export Prompts": "Eksportuj prompty", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Odmowa dostępu do mikrofonu: {{error}}", "Personalization": "Personalizacja", "Pipelines": "Rurociągów", + "Pipelines Not Detected": "", "Pipelines Valves": "Rurociągi Zawory", "Plain text (.txt)": "Zwykły tekst (.txt)", "Playground": "Plac zabaw", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index ce40d80e4..94d691523 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Exportar Bate-papos", "Export Documents Mapping": "Exportar Mapeamento de Documentos", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Modelos de Exportação", "Export Prompts": "Exportar Prompts", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Permissão negada ao acessar o microfone: {{error}}", "Personalization": "Personalização", "Pipelines": "Pipelines", + "Pipelines Not Detected": "", "Pipelines Valves": "Válvulas de Dutos", "Plain text (.txt)": "Texto sem formatação (.txt)", "Playground": "Parque infantil", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index bb48b4b90..17215660f 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Exportar Conversas", "Export Documents Mapping": "Exportar Mapeamento de Documentos", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Modelos de Exportação", "Export Prompts": "Exportar Prompts", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "A permissão foi negada ao aceder o microfone: {{error}}", "Personalization": "Personalização", "Pipelines": "Condutas", + "Pipelines Not Detected": "", "Pipelines Valves": "Válvulas de Condutas", "Plain text (.txt)": "Texto sem formatação (.txt)", "Playground": "Recreio", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 798795396..25595cfd1 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Экспортировать чаты", "Export Documents Mapping": "Экспортировать отображение документов", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Экспорт моделей", "Export Prompts": "Экспортировать промты", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Отказано в доступе к микрофону: {{error}}", "Personalization": "Персонализация", "Pipelines": "Трубопроводов", + "Pipelines Not Detected": "", "Pipelines Valves": "Трубопроводы Клапаны", "Plain text (.txt)": "Текст в формате .txt", "Playground": "Площадка", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index 5abaa9984..dcbaf7f4c 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Извези ћаскања", "Export Documents Mapping": "Извези мапирање докумената", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Извези моделе", "Export Prompts": "Извези упите", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Приступ микрофону је одбијен: {{error}}", "Personalization": "Прилагођавање", "Pipelines": "Цевоводи", + "Pipelines Not Detected": "", "Pipelines Valves": "Вентили за цевоводе", "Plain text (.txt)": "Обичан текст (.txt)", "Playground": "Игралиште", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 618db37ac..c6cf433f9 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Exportera chattar", "Export Documents Mapping": "Exportera dokumentmappning", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Exportera modeller", "Export Prompts": "Exportera instruktioner", "Export Tools": "Exportera verktyg", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Tillstånd nekades vid åtkomst till mikrofon: {{error}}", "Personalization": "Personalisering", "Pipelines": "Rörledningar", + "Pipelines Not Detected": "", "Pipelines Valves": "Ventiler för rörledningar", "Plain text (.txt)": "Text (.txt)", "Playground": "Lekplats", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index ad3109a95..b1f4d7206 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -238,6 +238,7 @@ "Export Chats": "", "Export Documents Mapping": "", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "", "Export Prompts": "", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "", "Personalization": "", "Pipelines": "", + "Pipelines Not Detected": "", "Pipelines Valves": "", "Plain text (.txt)": "", "Playground": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index cb0ba78ae..6f677bb99 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Sohbetleri Dışa Aktar", "Export Documents Mapping": "Belge Eşlemesini Dışa Aktar", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Modelleri Dışa Aktar", "Export Prompts": "Promptları Dışa Aktar", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Mikrofona erişim izni reddedildi: {{error}}", "Personalization": "Kişiselleştirme", "Pipelines": "Pipelinelar", + "Pipelines Not Detected": "", "Pipelines Valves": "Pipeline Valvleri", "Plain text (.txt)": "Düz metin (.txt)", "Playground": "Oyun Alanı", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 8a09f209b..0d5ffc026 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -166,13 +166,13 @@ "Description": "Опис", "Didn't fully follow instructions": "Не повністю дотримувалися інструкцій", "Discover a function": "Знайдіть функцію", - "Discover a model": "Знайдіть модель", - "Discover a prompt": "Знайдіть промт", - "Discover a tool": "Знайдіть інструмент", - "Discover, download, and explore custom functions": "Знайдіть, завантажте та досліджуйте налаштовані функції", - "Discover, download, and explore custom prompts": "Знайдіть, завантажте та досліджуйте налаштовані промти", - "Discover, download, and explore custom tools": "Знайдіть, завантажте та досліджуйте налаштовані інструменти", - "Discover, download, and explore model presets": "Знайдіть, завантажте та досліджуйте налаштування моделей", + "Discover a model": "Знайдіть модель", + "Discover a prompt": "Знайдіть промт", + "Discover a tool": "Знайдіть інструмент", + "Discover, download, and explore custom functions": "Знайдіть, завантажте та досліджуйте налаштовані функції", + "Discover, download, and explore custom prompts": "Знайдіть, завантажте та досліджуйте налаштовані промти", + "Discover, download, and explore custom tools": "Знайдіть, завантажте та досліджуйте налаштовані інструменти", + "Discover, download, and explore model presets": "Знайдіть, завантажте та досліджуйте налаштування моделей", "Dismissible": "Неприйнятно", "Display Emoji in Call": "Відображати емодзі у викликах", "Display the username instead of You in the Chat": "Показувати ім'я користувача замість 'Ви' в чаті", @@ -238,6 +238,7 @@ "Export Chats": "Експортувати чати", "Export Documents Mapping": "Експортувати відображення документів", "Export Functions": "Експорт функцій ", + "Export LiteLLM config.yaml": "Експорт LiteLLM config.yaml", "Export Models": "Експорт моделей", "Export Prompts": "Експортувати промти", "Export Tools": "Експортувати інструменти", @@ -314,10 +315,10 @@ "Made by OpenWebUI Community": "Зроблено спільнотою OpenWebUI", "Make sure to enclose them with": "Переконайтеся, що вони закриті", "Manage": "Керувати", - "Manage Models": "Керування моделями", - "Manage Ollama Models": "Керування моделями Ollama", - "Manage Pipelines": "Керування конвеєрами", - "Manage Valves": "Керування клапанами", + "Manage Models": "Керування моделями", + "Manage Ollama Models": "Керування моделями Ollama", + "Manage Pipelines": "Керування конвеєрами", + "Manage Valves": "Керування клапанами", "March": "Березень", "Max Tokens (num_predict)": "Макс токенів (num_predict)", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 моделі можна завантажити одночасно. Будь ласка, спробуйте пізніше.", @@ -397,7 +398,8 @@ "Permission denied when accessing microphone: {{error}}": "Доступ до мікрофона заборонено: {{error}}", "Personalization": "Персоналізація", "Pipelines": "Конвеєри", - "Pipelines Valves": "Клапани конвеєрів", + "Pipelines Not Detected": "Конвеєрів не знайдено", + "Pipelines Valves": "Клапани конвеєрів", "Plain text (.txt)": "Простий текст (.txt)", "Playground": "Майданчик", "Positive attitude": "Позитивне ставлення", @@ -470,7 +472,7 @@ "Select a mode": "Оберіть режим", "Select a model": "Оберіть модель", "Select a pipeline": "Оберіть конвеєр", - "Select a pipeline url": "Оберіть адресу конвеєра", + "Select a pipeline url": "Оберіть адресу конвеєра", "Select a tool": "Оберіть інструмент", "Select an Ollama instance": "Оберіть екземпляр Ollama", "Select Documents": "Оберіть документи", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 94c7ea22d..4632d7b70 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -238,6 +238,7 @@ "Export Chats": "Tải nội dung chat về máy", "Export Documents Mapping": "Tải cấu trúc tài liệu về máy", "Export Functions": "", + "Export LiteLLM config.yaml": "", "Export Models": "Tải Models về máy", "Export Prompts": "Tải các prompt về máy", "Export Tools": "", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "Quyền truy cập micrô bị từ chối: {{error}}", "Personalization": "Cá nhân hóa", "Pipelines": "", + "Pipelines Not Detected": "", "Pipelines Valves": "", "Plain text (.txt)": "Văn bản thô (.txt)", "Playground": "Thử nghiệm (Playground)", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 3863f8f8d..83ef80c6d 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -238,6 +238,7 @@ "Export Chats": "导出对话", "Export Documents Mapping": "导出文档映射", "Export Functions": "导出功能", + "Export LiteLLM config.yaml": "", "Export Models": "导出模型", "Export Prompts": "导出提示词", "Export Tools": "导出工具", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "申请麦克风权限被拒绝:{{error}}", "Personalization": "个性化", "Pipelines": "Pipeline", + "Pipelines Not Detected": "", "Pipelines Valves": "Pipeline 值", "Plain text (.txt)": "TXT 文档 (.txt)", "Playground": "AI 对话游乐场", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 6ab58a4e0..f64c034b6 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -238,6 +238,7 @@ "Export Chats": "匯出聊天紀錄", "Export Documents Mapping": "匯出文件對映", "Export Functions": "匯出功能", + "Export LiteLLM config.yaml": "", "Export Models": "匯出模型", "Export Prompts": "匯出提示詞", "Export Tools": "匯出工具", @@ -397,6 +398,7 @@ "Permission denied when accessing microphone: {{error}}": "存取麥克風時被拒絕權限:{{error}}", "Personalization": "個人化", "Pipelines": "管線", + "Pipelines Not Detected": "", "Pipelines Valves": "管線閥門", "Plain text (.txt)": "純文字 (.txt)", "Playground": "AI 對話遊樂場", From 85b3b81617566f6f8ef1ee69073bab69b3739cec Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Mon, 24 Jun 2024 16:23:08 +0200 Subject: [PATCH 226/287] fix key Database --- src/lib/components/admin/Settings/Database.svelte | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/components/admin/Settings/Database.svelte b/src/lib/components/admin/Settings/Database.svelte index 8d9cca3fd..0ba45263e 100644 --- a/src/lib/components/admin/Settings/Database.svelte +++ b/src/lib/components/admin/Settings/Database.svelte @@ -126,7 +126,9 @@ />
-
{$i18n.t('Export LiteLLM config.yaml')}
+
+ {$i18n.t('Export LiteLLM config.yaml')} +
From 09e95b8d3c15bb43df33812de29014c1dabf0a10 Mon Sep 17 00:00:00 2001 From: Jonathan Rohde Date: Mon, 24 Jun 2024 16:44:44 +0200 Subject: [PATCH 227/287] feat(chat): ignore upper/lower case to select document/tag/collection --- .../components/chat/MessageInput/Documents.svelte | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/MessageInput/Documents.svelte b/src/lib/components/chat/MessageInput/Documents.svelte index b3a6ae20b..da6baa3d3 100644 --- a/src/lib/components/chat/MessageInput/Documents.svelte +++ b/src/lib/components/chat/MessageInput/Documents.svelte @@ -43,11 +43,11 @@ ]; $: filteredCollections = collections - .filter((collection) => collection.name.includes(prompt.split(' ')?.at(0)?.substring(1) ?? '')) + .filter((collection) => findByName(collection, prompt)) .sort((a, b) => a.name.localeCompare(b.name)); $: filteredDocs = $documents - .filter((doc) => doc.name.includes(prompt.split(' ')?.at(0)?.substring(1) ?? '')) + .filter((doc) => findByName(doc, prompt)) .sort((a, b) => a.title.localeCompare(b.title)); $: filteredItems = [...filteredCollections, ...filteredDocs]; @@ -58,6 +58,15 @@ console.log(filteredCollections); } + type ObjectWithName = { + name: string; + }; + + const findByName = (obj: ObjectWithName, prompt: string) => { + const name = obj.name.toLowerCase(); + return name.includes(prompt.toLowerCase().split(' ')?.at(0)?.substring(1) ?? ''); + } + export const selectUp = () => { selectedIdx = Math.max(0, selectedIdx - 1); }; From c7855b3b9dd05c8263735b4a706096923cbb7509 Mon Sep 17 00:00:00 2001 From: Jonathan Rohde Date: Mon, 24 Jun 2024 16:47:02 +0200 Subject: [PATCH 228/287] feat(chat): formatting --- src/lib/components/chat/MessageInput/Documents.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/chat/MessageInput/Documents.svelte b/src/lib/components/chat/MessageInput/Documents.svelte index da6baa3d3..cff3aa725 100644 --- a/src/lib/components/chat/MessageInput/Documents.svelte +++ b/src/lib/components/chat/MessageInput/Documents.svelte @@ -65,7 +65,7 @@ const findByName = (obj: ObjectWithName, prompt: string) => { const name = obj.name.toLowerCase(); return name.includes(prompt.toLowerCase().split(' ')?.at(0)?.substring(1) ?? ''); - } + }; export const selectUp = () => { selectedIdx = Math.max(0, selectedIdx - 1); From 9c81d84e165ab298dfb0fe569041677305449857 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Mon, 24 Jun 2024 17:18:39 +0200 Subject: [PATCH 229/287] Add toasts i18n key --- src/lib/components/admin/Settings/Pipelines.svelte | 12 ++++++------ .../Settings/Personalization/AddMemoryModal.svelte | 2 +- .../Settings/Personalization/EditMemoryModal.svelte | 2 +- .../Settings/Personalization/ManageModal.svelte | 4 ++-- src/lib/components/workspace/Functions.svelte | 4 ++-- src/lib/components/workspace/Tools.svelte | 4 ++-- .../components/workspace/common/ValvesModal.svelte | 2 +- src/lib/i18n/locales/ar-BH/translation.json | 13 +++++++++++++ src/lib/i18n/locales/bg-BG/translation.json | 13 +++++++++++++ src/lib/i18n/locales/bn-BD/translation.json | 13 +++++++++++++ src/lib/i18n/locales/ca-ES/translation.json | 13 +++++++++++++ src/lib/i18n/locales/ceb-PH/translation.json | 13 +++++++++++++ src/lib/i18n/locales/de-DE/translation.json | 13 +++++++++++++ src/lib/i18n/locales/dg-DG/translation.json | 13 +++++++++++++ src/lib/i18n/locales/en-GB/translation.json | 13 +++++++++++++ src/lib/i18n/locales/en-US/translation.json | 13 +++++++++++++ src/lib/i18n/locales/es-ES/translation.json | 13 +++++++++++++ src/lib/i18n/locales/fa-IR/translation.json | 13 +++++++++++++ src/lib/i18n/locales/fi-FI/translation.json | 13 +++++++++++++ src/lib/i18n/locales/fr-CA/translation.json | 13 +++++++++++++ src/lib/i18n/locales/fr-FR/translation.json | 13 +++++++++++++ src/lib/i18n/locales/he-IL/translation.json | 13 +++++++++++++ src/lib/i18n/locales/hi-IN/translation.json | 13 +++++++++++++ src/lib/i18n/locales/hr-HR/translation.json | 13 +++++++++++++ src/lib/i18n/locales/it-IT/translation.json | 13 +++++++++++++ src/lib/i18n/locales/ja-JP/translation.json | 13 +++++++++++++ src/lib/i18n/locales/ka-GE/translation.json | 13 +++++++++++++ src/lib/i18n/locales/ko-KR/translation.json | 13 +++++++++++++ src/lib/i18n/locales/lt-LT/translation.json | 13 +++++++++++++ src/lib/i18n/locales/nb-NO/translation.json | 13 +++++++++++++ src/lib/i18n/locales/nl-NL/translation.json | 13 +++++++++++++ src/lib/i18n/locales/pa-IN/translation.json | 13 +++++++++++++ src/lib/i18n/locales/pl-PL/translation.json | 13 +++++++++++++ src/lib/i18n/locales/pt-BR/translation.json | 13 +++++++++++++ src/lib/i18n/locales/pt-PT/translation.json | 13 +++++++++++++ src/lib/i18n/locales/ru-RU/translation.json | 13 +++++++++++++ src/lib/i18n/locales/sr-RS/translation.json | 13 +++++++++++++ src/lib/i18n/locales/sv-SE/translation.json | 13 +++++++++++++ src/lib/i18n/locales/tk-TW/translation.json | 13 +++++++++++++ src/lib/i18n/locales/tr-TR/translation.json | 13 +++++++++++++ src/lib/i18n/locales/uk-UA/translation.json | 13 +++++++++++++ src/lib/i18n/locales/vi-VN/translation.json | 13 +++++++++++++ src/lib/i18n/locales/zh-CN/translation.json | 13 +++++++++++++ src/lib/i18n/locales/zh-TW/translation.json | 13 +++++++++++++ 44 files changed, 496 insertions(+), 15 deletions(-) diff --git a/src/lib/components/admin/Settings/Pipelines.svelte b/src/lib/components/admin/Settings/Pipelines.svelte index a830ee12d..6826cb92b 100644 --- a/src/lib/components/admin/Settings/Pipelines.svelte +++ b/src/lib/components/admin/Settings/Pipelines.svelte @@ -60,13 +60,13 @@ }); if (res) { - toast.success('Valves updated successfully'); + toast.success($i18n.t('Valves updated successfully')); setPipelines(); models.set(await getModels(localStorage.token)); saveHandler(); } } else { - toast.error('No valves to update'); + toast.error($i18n.t('No valves to update')); } }; @@ -122,7 +122,7 @@ }); if (res) { - toast.success('Pipeline downloaded successfully'); + toast.success($i18n.t('Pipeline downloaded successfully')); setPipelines(); models.set(await getModels(localStorage.token)); } @@ -147,12 +147,12 @@ ); if (res) { - toast.success('Pipeline downloaded successfully'); + toast.success($i18n.t('Pipeline downloaded successfully')); setPipelines(); models.set(await getModels(localStorage.token)); } } else { - toast.error('No file selected'); + toast.error($i18n.t('No file selected')); } pipelineFiles = null; @@ -176,7 +176,7 @@ }); if (res) { - toast.success('Pipeline deleted successfully'); + toast.success($i18n.t('Pipeline deleted successfully')); setPipelines(); models.set(await getModels(localStorage.token)); } diff --git a/src/lib/components/chat/Settings/Personalization/AddMemoryModal.svelte b/src/lib/components/chat/Settings/Personalization/AddMemoryModal.svelte index 98d77c07a..6e16576b0 100644 --- a/src/lib/components/chat/Settings/Personalization/AddMemoryModal.svelte +++ b/src/lib/components/chat/Settings/Personalization/AddMemoryModal.svelte @@ -24,7 +24,7 @@ if (res) { console.log(res); - toast.success('Memory added successfully'); + toast.success($i18n.t('Memory added successfully')); content = ''; show = false; dispatch('save'); diff --git a/src/lib/components/chat/Settings/Personalization/EditMemoryModal.svelte b/src/lib/components/chat/Settings/Personalization/EditMemoryModal.svelte index 7eecc4c30..773309ff9 100644 --- a/src/lib/components/chat/Settings/Personalization/EditMemoryModal.svelte +++ b/src/lib/components/chat/Settings/Personalization/EditMemoryModal.svelte @@ -35,7 +35,7 @@ if (res) { console.log(res); - toast.success('Memory updated successfully'); + toast.success($i18n.t('Memory updated successfully')); dispatch('save'); show = false; } diff --git a/src/lib/components/chat/Settings/Personalization/ManageModal.svelte b/src/lib/components/chat/Settings/Personalization/ManageModal.svelte index 8474e89e8..92b4936e9 100644 --- a/src/lib/components/chat/Settings/Personalization/ManageModal.svelte +++ b/src/lib/components/chat/Settings/Personalization/ManageModal.svelte @@ -129,7 +129,7 @@ }); if (res) { - toast.success('Memory deleted successfully'); + toast.success($i18n.t('Memory deleted successfully')); memories = await getMemories(localStorage.token); } }} @@ -182,7 +182,7 @@ }); if (res) { - toast.success('Memory cleared successfully'); + toast.success($i18n.t('Memory cleared successfully')); memories = []; } }}>{$i18n.t('Clear memory')} Date: Mon, 24 Jun 2024 17:25:23 +0200 Subject: [PATCH 230/287] Add Ukrainian translation for keys --- src/lib/i18n/locales/uk-UA/translation.json | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 769d18459..51b936c3a 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -259,9 +259,9 @@ "Form": "Форма", "Format your variables using square brackets like this:": "Форматуйте свої змінні квадратними дужками так:", "Frequency Penalty": "Штраф за частоту", - "Function deleted successfully": "", + "Function deleted successfully": "Функцію успішно видалено", "Functions": "Функції", - "Functions imported successfully": "", + "Functions imported successfully": "Функції успішно імпортовано", "General": "Загальні", "General Settings": "Загальні налаштування", "Generate Image": "Створити зображення", @@ -327,10 +327,10 @@ "May": "Травень", "Memories accessible by LLMs will be shown here.": "Пам'ять, яка доступна LLM, буде показана тут.", "Memory": "Пам'ять", - "Memory added successfully": "", - "Memory cleared successfully": "", - "Memory deleted successfully": "", - "Memory updated successfully": "", + "Memory added successfully": "Пам'ять додано успішно", + "Memory cleared successfully": "Пам'ять успішно очищено", + "Memory deleted successfully": "Пам'ять успішно видалено", + "Memory updated successfully": "Пам'ять успішно оновлено", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Повідомлення, які ви надішлете після створення посилання, не будуть доступні для інших. Користувачі, які мають URL, зможуть переглядати спільний чат.", "Minimum Score": "Мінімальний бал", "Mirostat": "Mirostat", @@ -359,11 +359,11 @@ "New Chat": "Новий чат", "New Password": "Новий пароль", "No documents found": "Документів не знайдено", - "No file selected": "", + "No file selected": "Файл не обрано", "No results found": "Не знайдено жодного результату", "No search query generated": "Пошуковий запит не сформовано", "No source available": "Джерело не доступне", - "No valves to update": "", + "No valves to update": "Немає клапанів для оновлення", "None": "Нема", "Not factually correct": "Не відповідає дійсності", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Примітка: Якщо ви встановите мінімальну кількість балів, пошук поверне лише документи з кількістю балів, більшою або рівною мінімальній кількості балів.", @@ -405,8 +405,8 @@ "Permission denied when accessing microphone": "Відмовлено у доступі до мікрофона", "Permission denied when accessing microphone: {{error}}": "Доступ до мікрофона заборонено: {{error}}", "Personalization": "Персоналізація", - "Pipeline deleted successfully": "", - "Pipeline downloaded successfully": "", + "Pipeline deleted successfully": "Конвеєр успішно видалено", + "Pipeline downloaded successfully": "Конвеєр успішно завантажено", "Pipelines": "Конвеєри", "Pipelines Not Detected": "Конвеєрів не знайдено", "Pipelines Valves": "Клапани конвеєрів", @@ -573,8 +573,8 @@ "Toggle settings": "Переключити налаштування", "Toggle sidebar": "Переключити бокову панель", "Tokens To Keep On Context Refresh (num_keep)": "Токени для збереження при оновленні контексту (num_keep)", - "Tool deleted successfully": "", - "Tool imported successfully": "", + "Tool deleted successfully": "Інструмент успішно видалено", + "Tool imported successfully": "Інструмент успішно імпортовано", "Tools": "Інструменти", "Top K": "Top K", "Top P": "Top P", @@ -608,7 +608,7 @@ "Utilize": "Використовувати", "Valid time units:": "Дійсні одиниці часу:", "Valves": "Клапани", - "Valves updated successfully": "", + "Valves updated successfully": "Клапани успішно оновлено", "variable": "змінна", "variable to have them replaced with clipboard content.": "змінна, щоб замінити їх вмістом буфера обміну.", "Version": "Версія", From 665f87e84a4ceb47c0ce9323196fbde1b0a35ffd Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Mon, 24 Jun 2024 18:09:45 +0200 Subject: [PATCH 231/287] add toasts keys i18n --- src/lib/components/chat/Settings/General.svelte | 2 +- src/lib/components/chat/Settings/Interface.svelte | 4 ++-- src/lib/components/chat/Settings/Valves.svelte | 4 ++-- src/lib/components/common/CodeEditor.svelte | 2 +- src/lib/i18n/locales/ar-BH/translation.json | 5 +++++ src/lib/i18n/locales/bg-BG/translation.json | 5 +++++ src/lib/i18n/locales/bn-BD/translation.json | 5 +++++ src/lib/i18n/locales/ca-ES/translation.json | 5 +++++ src/lib/i18n/locales/ceb-PH/translation.json | 5 +++++ src/lib/i18n/locales/de-DE/translation.json | 5 +++++ src/lib/i18n/locales/dg-DG/translation.json | 5 +++++ src/lib/i18n/locales/en-GB/translation.json | 5 +++++ src/lib/i18n/locales/en-US/translation.json | 5 +++++ src/lib/i18n/locales/es-ES/translation.json | 5 +++++ src/lib/i18n/locales/fa-IR/translation.json | 5 +++++ src/lib/i18n/locales/fi-FI/translation.json | 5 +++++ src/lib/i18n/locales/fr-CA/translation.json | 5 +++++ src/lib/i18n/locales/fr-FR/translation.json | 5 +++++ src/lib/i18n/locales/he-IL/translation.json | 5 +++++ src/lib/i18n/locales/hi-IN/translation.json | 5 +++++ src/lib/i18n/locales/hr-HR/translation.json | 5 +++++ src/lib/i18n/locales/it-IT/translation.json | 5 +++++ src/lib/i18n/locales/ja-JP/translation.json | 5 +++++ src/lib/i18n/locales/ka-GE/translation.json | 5 +++++ src/lib/i18n/locales/ko-KR/translation.json | 5 +++++ src/lib/i18n/locales/lt-LT/translation.json | 5 +++++ src/lib/i18n/locales/nb-NO/translation.json | 5 +++++ src/lib/i18n/locales/nl-NL/translation.json | 5 +++++ src/lib/i18n/locales/pa-IN/translation.json | 5 +++++ src/lib/i18n/locales/pl-PL/translation.json | 5 +++++ src/lib/i18n/locales/pt-BR/translation.json | 5 +++++ src/lib/i18n/locales/pt-PT/translation.json | 5 +++++ src/lib/i18n/locales/ru-RU/translation.json | 5 +++++ src/lib/i18n/locales/sr-RS/translation.json | 5 +++++ src/lib/i18n/locales/sv-SE/translation.json | 5 +++++ src/lib/i18n/locales/tk-TW/translation.json | 5 +++++ src/lib/i18n/locales/tr-TR/translation.json | 5 +++++ src/lib/i18n/locales/uk-UA/translation.json | 5 +++++ src/lib/i18n/locales/vi-VN/translation.json | 5 +++++ src/lib/i18n/locales/zh-CN/translation.json | 5 +++++ src/lib/i18n/locales/zh-TW/translation.json | 5 +++++ 41 files changed, 191 insertions(+), 6 deletions(-) diff --git a/src/lib/components/chat/Settings/General.svelte b/src/lib/components/chat/Settings/General.svelte index bfe52d87e..f1960009a 100644 --- a/src/lib/components/chat/Settings/General.svelte +++ b/src/lib/components/chat/Settings/General.svelte @@ -32,7 +32,7 @@ saveSettings({ notificationEnabled: notificationEnabled }); } else { toast.error( - 'Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.' + $i18n.t('Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.') ); } }; diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index 49632f00e..a2bcd08f1 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -75,7 +75,7 @@ if (position) { await updateUserInfo(localStorage.token, { location: position }); - toast.success('User location successfully retrieved.'); + toast.success($i18n.t('User location successfully retrieved.')); } else { userLocation = false; } @@ -111,7 +111,7 @@ saveSettings({ responseAutoCopy: responseAutoCopy }); } else { toast.error( - 'Clipboard write permission denied. Please check your browser settings to grant the necessary access.' + $i18n.t('Clipboard write permission denied. Please check your browser settings to grant the necessary access.') ); } }; diff --git a/src/lib/components/chat/Settings/Valves.svelte b/src/lib/components/chat/Settings/Valves.svelte index 53d5a5686..eb4554871 100644 --- a/src/lib/components/chat/Settings/Valves.svelte +++ b/src/lib/components/chat/Settings/Valves.svelte @@ -73,7 +73,7 @@ ); if (res) { - toast.success('Valves updated'); + toast.success($i18n.t('Valves updated')); valves = res; } } else if (tab === 'functions') { @@ -87,7 +87,7 @@ }); if (res) { - toast.success('Valves updated'); + toast.success($i18n.t('Valves updated')); valves = res; } } diff --git a/src/lib/components/common/CodeEditor.svelte b/src/lib/components/common/CodeEditor.svelte index 0822ac019..8cb50d01c 100644 --- a/src/lib/components/common/CodeEditor.svelte +++ b/src/lib/components/common/CodeEditor.svelte @@ -37,7 +37,7 @@ changes: [{ from: 0, to: codeEditor.state.doc.length, insert: formattedCode }] }); - toast.success('Code formatted successfully'); + toast.success($i18n.t('Code formatted successfully')); return true; } return false; diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 6e79986b4..7cd0a076e 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "انقر هنا لاختيار المستندات", "click here.": "أضغط هنا", "Click on the user role button to change a user's role.": "أضغط على أسم الصلاحيات لتغيرها للمستخدم", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "استنساخ", "Close": "أغلق", + "Code formatted successfully": "", "Collection": "مجموعة", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI الرابط الافتراضي", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "إعادة تعيين تخزين المتجهات", "Response AutoCopy to Clipboard": "النسخ التلقائي للاستجابة إلى الحافظة", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "منصب", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -605,11 +608,13 @@ "use_mlock (Ollama)": "use_mlock (أولاما)", "use_mmap (Ollama)": "use_mmap (أولاما)", "user": "مستخدم", + "User location successfully retrieved.": "", "User Permissions": "صلاحيات المستخدم", "Users": "المستخدمين", "Utilize": "يستخدم", "Valid time units:": "وحدات زمنية صالحة:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "المتغير", "variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 282a2dd42..1bcadcc2d 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Натиснете тук, за да изберете документи.", "click here.": "натиснете тук.", "Click on the user role button to change a user's role.": "Натиснете върху бутона за промяна на ролята на потребителя.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клонинг", "Close": "Затвори", + "Code formatted successfully": "", "Collection": "Колекция", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Ресет Vector Storage", "Response AutoCopy to Clipboard": "Аувтоматично копиране на отговор в клипборда", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Роля", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "потребител", + "User location successfully retrieved.": "", "User Permissions": "Права на потребителя", "Users": "Потребители", "Utilize": "Използване", "Valid time units:": "Валидни единици за време:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "променлива", "variable to have them replaced with clipboard content.": "променливи да се заменят съдържанието от клипборд.", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 0449d4ee8..7ed34bd98 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "ডকুমেন্টগুলো নির্বাচন করার জন্য এখানে ক্লিক করুন", "click here.": "এখানে ক্লিক করুন", "Click on the user role button to change a user's role.": "ইউজারের পদবি পরিবর্তন করার জন্য ইউজারের পদবি বাটনে ক্লিক করুন", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "ক্লোন", "Close": "বন্ধ", + "Code formatted successfully": "", "Collection": "সংগ্রহ", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ভেক্টর স্টোরেজ রিসেট করুন", "Response AutoCopy to Clipboard": "রেসপন্সগুলো স্বয়ংক্রিভাবে ক্লিপবোর্ডে কপি হবে", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "পদবি", "Rosé Pine": "রোজ পাইন", "Rosé Pine Dawn": "ভোরের রোজ পাইন", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (ওলামা)", "use_mmap (Ollama)": "use_mmap (ওলামা)", "user": "ব্যবহারকারী", + "User location successfully retrieved.": "", "User Permissions": "ইউজার পারমিশনসমূহ", "Users": "ব্যাবহারকারীগণ", "Utilize": "ইউটিলাইজ", "Valid time units:": "সময়ের গ্রহণযোগ্য এককসমূহ:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "ভেরিয়েবল", "variable to have them replaced with clipboard content.": "ক্লিপবোর্ডের কন্টেন্ট দিয়ে যেই ভেরিয়েবল রিপ্লেস করা যাবে।", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 0c93cc1fb..746ca43e5 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Clica aquí per seleccionar documents.", "click here.": "clica aquí.", "Click on the user role button to change a user's role.": "Clica sobre el botó de rol d'usuari per canviar el rol d'un usuari.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clonar", "Close": "Tancar", + "Code formatted successfully": "", "Collection": "Col·lecció", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "URL base de ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "Restableix el directori de pujades", "Reset Vector Storage": "Restableix l'emmagatzematge de vectors", "Response AutoCopy to Clipboard": "Copiar la resposta automàticament al porta-retalls", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Albada Rosé Pine", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "usuari", + "User location successfully retrieved.": "", "User Permissions": "Permisos d'usuari", "Users": "Usuaris", "Utilize": "Utilitzar", "Valid time units:": "Unitats de temps vàlides:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variable", "variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index e761d15c9..9d5ae4b1a 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Pag-klik dinhi aron mapili ang mga dokumento.", "click here.": "I-klik dinhi.", "Click on the user role button to change a user's role.": "I-klik ang User Role button aron usbon ang role sa user.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "Suod nga", + "Code formatted successfully": "", "Collection": "Koleksyon", "ComfyUI": "", "ComfyUI Base URL": "", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "I-reset ang pagtipig sa vector", "Response AutoCopy to Clipboard": "Awtomatikong kopya sa tubag sa clipboard", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Papel", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Aube Pine Rosé", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "", "use_mmap (Ollama)": "", "user": "tiggamit", + "User location successfully retrieved.": "", "User Permissions": "Mga permiso sa tiggamit", "Users": "Mga tiggamit", "Utilize": "Sa paggamit", "Valid time units:": "Balido nga mga yunit sa oras:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variable", "variable to have them replaced with clipboard content.": "variable aron pulihan kini sa mga sulud sa clipboard.", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index 3409bda62..1e6546d2d 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Klicke hier um Dokumente auszuwählen", "click here.": "hier klicken.", "Click on the user role button to change a user's role.": "Klicke auf die Benutzerrollenschaltfläche, um die Rolle eines Benutzers zu ändern.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klonen", "Close": "Schließe", + "Code formatted successfully": "", "Collection": "Kollektion", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "Uploadverzeichnis löschen", "Reset Vector Storage": "Vektorspeicher zurücksetzen", "Response AutoCopy to Clipboard": "Antwort automatisch in die Zwischenablage kopieren", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rolle", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "Benutzer", + "User location successfully retrieved.": "", "User Permissions": "Benutzerberechtigungen", "Users": "Benutzer", "Utilize": "Nutze die", "Valid time units:": "Gültige Zeiteinheiten:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "Variable", "variable to have them replaced with clipboard content.": "Variable, um den Inhalt der Zwischenablage beim Nutzen des Prompts zu ersetzen.", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 451f8b0b2..df1a1e7a6 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Click to select documents", "click here.": "click here. Such click.", "Click on the user role button to change a user's role.": "Click user role button to change role.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "Close", + "Code formatted successfully": "", "Collection": "Collection", "ComfyUI": "", "ComfyUI Base URL": "", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reset Vector Storage", "Response AutoCopy to Clipboard": "Copy Bark Auto Bark", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Role", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -603,11 +606,13 @@ "use_mlock (Ollama)": "", "use_mmap (Ollama)": "", "user": "user much user", + "User location successfully retrieved.": "", "User Permissions": "User Permissions much permissions", "Users": "Users much users", "Utilize": "Utilize very use", "Valid time units:": "Valid time units: much time", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variable very variable", "variable to have them replaced with clipboard content.": "variable to have them replaced with clipboard content. Very replace.", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 301e23797..2227ebe91 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "", "click here.": "", "Click on the user role button to change a user's role.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "", + "Code formatted successfully": "", "Collection": "", "ComfyUI": "", "ComfyUI Base URL": "", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "", "Rosé Pine": "", "Rosé Pine Dawn": "", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "", "use_mmap (Ollama)": "", "user": "", + "User location successfully retrieved.": "", "User Permissions": "", "Users": "", "Utilize": "", "Valid time units:": "", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "", "variable to have them replaced with clipboard content.": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 301e23797..2227ebe91 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "", "click here.": "", "Click on the user role button to change a user's role.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "", + "Code formatted successfully": "", "Collection": "", "ComfyUI": "", "ComfyUI Base URL": "", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "", "Rosé Pine": "", "Rosé Pine Dawn": "", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "", "use_mmap (Ollama)": "", "user": "", + "User location successfully retrieved.": "", "User Permissions": "", "Users": "", "Utilize": "", "Valid time units:": "", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "", "variable to have them replaced with clipboard content.": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 05b19946a..6a4083fe9 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Presiona aquí para seleccionar documentos", "click here.": "Presiona aquí.", "Click on the user role button to change a user's role.": "Presiona en el botón de roles del usuario para cambiar su rol.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clon", "Close": "Cerrar", + "Code formatted successfully": "", "Collection": "Colección", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Restablecer almacenamiento vectorial", "Response AutoCopy to Clipboard": "Copiar respuesta automáticamente al portapapeles", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "usuario", + "User location successfully retrieved.": "", "User Permissions": "Permisos de usuario", "Users": "Usuarios", "Utilize": "Utilizar", "Valid time units:": "Unidades válidas de tiempo:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variable", "variable to have them replaced with clipboard content.": "variable para reemplazarlos con el contenido del portapapeles.", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 24abdaa71..336d0f31a 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "برای انتخاب اسناد اینجا را کلیک کنید.", "click here.": "اینجا کلیک کنید.", "Click on the user role button to change a user's role.": "برای تغییر نقش کاربر، روی دکمه نقش کاربر کلیک کنید.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "کلون", "Close": "بسته", + "Code formatted successfully": "", "Collection": "مجموعه", "ComfyUI": "کومیوآی", "ComfyUI Base URL": "URL پایه کومیوآی", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "بازنشانی ذخیره سازی برداری", "Response AutoCopy to Clipboard": "کپی خودکار پاسخ به کلیپ بورد", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "نقش", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (اولاما)", "use_mmap (Ollama)": "use_mmap (اولاما)", "user": "کاربر", + "User location successfully retrieved.": "", "User Permissions": "مجوزهای کاربر", "Users": "کاربران", "Utilize": "استفاده کنید", "Valid time units:": "واحدهای زمانی معتبر:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "متغیر", "variable to have them replaced with clipboard content.": "متغیر برای جایگزینی آنها با محتوای کلیپ بورد.", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 6b5fd77c4..d88438721 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Klikkaa tästä valitaksesi asiakirjoja.", "click here.": "klikkaa tästä.", "Click on the user role button to change a user's role.": "Klikkaa käyttäjän roolipainiketta vaihtaaksesi käyttäjän roolia.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klooni", "Close": "Sulje", + "Code formatted successfully": "", "Collection": "Kokoelma", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI-perus-URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Tyhjennä vektorivarasto", "Response AutoCopy to Clipboard": "Vastauksen automaattikopiointi leikepöydälle", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rooli", "Rosé Pine": "Rosee-mänty", "Rosé Pine Dawn": "Aamuinen Rosee-mänty", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "käyttäjä", + "User location successfully retrieved.": "", "User Permissions": "Käyttäjäoikeudet", "Users": "Käyttäjät", "Utilize": "Käytä", "Valid time units:": "Kelvolliset aikayksiköt:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "muuttuja", "variable to have them replaced with clipboard content.": "muuttuja korvataan leikepöydän sisällöllä.", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 57d9f6155..d7073e212 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Cliquez ici pour sélectionner des documents.", "click here.": "cliquez ici.", "Click on the user role button to change a user's role.": "Cliquez sur le bouton de rôle d'utilisateur pour changer le rôle d'un utilisateur.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Cloner", "Close": "Fermer", + "Code formatted successfully": "", "Collection": "Collection", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Réinitialiser le stockage vectoriel", "Response AutoCopy to Clipboard": "Copie automatique de la réponse vers le presse-papiers", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rôle", "Rosé Pine": "Pin Rosé", "Rosé Pine Dawn": "Aube Pin Rosé", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "utilisateur", + "User location successfully retrieved.": "", "User Permissions": "Permissions de l'utilisateur", "Users": "Utilisateurs", "Utilize": "Utiliser", "Valid time units:": "Unités de temps valides :", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variable", "variable to have them replaced with clipboard content.": "variable pour les remplacer par le contenu du presse-papiers.", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 1d710743d..9d66c0aff 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Cliquez ici pour sélectionner des documents.", "click here.": "cliquez ici.", "Click on the user role button to change a user's role.": "Cliquez sur le bouton de rôle d'utilisateur pour changer le rôle d'un utilisateur.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clone", "Close": "Fermer", + "Code formatted successfully": "", "Collection": "Collection", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "URL de base ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Réinitialiser le Stockage de Vecteur", "Response AutoCopy to Clipboard": "Copie Automatique de la Réponse dans le Presse-papiers", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rôle", "Rosé Pine": "Pin Rosé", "Rosé Pine Dawn": "Aube Pin Rosé", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "utilisateur", + "User location successfully retrieved.": "", "User Permissions": "Permissions d'utilisateur", "Users": "Utilisateurs", "Utilize": "Utiliser", "Valid time units:": "Unités de temps valides :", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variable", "variable to have them replaced with clipboard content.": "variable pour les remplacer par le contenu du presse-papiers.", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index 5879ea9fe..078bc787d 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "לחץ כאן לבחירת מסמכים.", "click here.": "לחץ כאן.", "Click on the user role button to change a user's role.": "לחץ על כפתור תפקיד המשתמש כדי לשנות את תפקיד המשתמש.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "שיבוט", "Close": "סגור", + "Code formatted successfully": "", "Collection": "אוסף", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "כתובת URL בסיסית של ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "איפוס אחסון וקטורים", "Response AutoCopy to Clipboard": "העתקה אוטומטית של תגובה ללוח", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "תפקיד", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "use_mlock (אולמה)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "משתמש", + "User location successfully retrieved.": "", "User Permissions": "הרשאות משתמש", "Users": "משתמשים", "Utilize": "שימוש", "Valid time units:": "יחידות זמן תקינות:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "משתנה", "variable to have them replaced with clipboard content.": "משתנה להחליפו ב- clipboard תוכן.", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 2332afeb8..1d8c57af5 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "दस्तावेज़ चुनने के लिए यहां क्लिक करें।", "click here.": "यहाँ क्लिक करें।", "Click on the user role button to change a user's role.": "उपयोगकर्ता की भूमिका बदलने के लिए उपयोगकर्ता भूमिका बटन पर क्लिक करें।", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "क्लोन", "Close": "बंद करना", + "Code formatted successfully": "", "Collection": "संग्रह", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI बेस यूआरएल", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "वेक्टर संग्रहण रीसेट करें", "Response AutoCopy to Clipboard": "क्लिपबोर्ड पर प्रतिक्रिया ऑटोकॉपी", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "भूमिका", "Rosé Pine": "रोसे पिन", "Rosé Pine Dawn": "रोसे पिन डेन", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (ओलामा)", "use_mmap (Ollama)": "use_mmap (ओलामा)", "user": "उपयोगकर्ता", + "User location successfully retrieved.": "", "User Permissions": "उपयोगकर्ता अनुमतियाँ", "Users": "उपयोगकर्ताओं", "Utilize": "उपयोग करें", "Valid time units:": "मान्य समय इकाइयाँ:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "वेरिएबल", "variable to have them replaced with clipboard content.": "उन्हें क्लिपबोर्ड सामग्री से बदलने के लिए वेरिएबल।", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 45526dc2a..0da584f2d 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Kliknite ovdje da odaberete dokumente.", "click here.": "kliknite ovdje.", "Click on the user role button to change a user's role.": "Kliknite na gumb uloge korisnika za promjenu uloge korisnika.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Kloniraj", "Close": "Zatvori", + "Code formatted successfully": "", "Collection": "Kolekcija", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI osnovni URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "Poništi upload direktorij", "Reset Vector Storage": "Resetiraj pohranu vektora", "Response AutoCopy to Clipboard": "Automatsko kopiranje odgovora u međuspremnik", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Uloga", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "korisnik", + "User location successfully retrieved.": "", "User Permissions": "Korisnička dopuštenja", "Users": "Korisnici", "Utilize": "Iskoristi", "Valid time units:": "Važeće vremenske jedinice:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "varijabla", "variable to have them replaced with clipboard content.": "varijabla za zamjenu sadržajem međuspremnika.", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 09b147857..1ca9e1f31 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Clicca qui per selezionare i documenti.", "click here.": "clicca qui.", "Click on the user role button to change a user's role.": "Clicca sul pulsante del ruolo utente per modificare il ruolo di un utente.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clone", "Close": "Chiudi", + "Code formatted successfully": "", "Collection": "Collezione", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "URL base ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reimposta archivio vettoriale", "Response AutoCopy to Clipboard": "Copia automatica della risposta negli appunti", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Ruolo", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "utente", + "User location successfully retrieved.": "", "User Permissions": "Autorizzazioni utente", "Users": "Utenti", "Utilize": "Utilizza", "Valid time units:": "Unità di tempo valide:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variabile", "variable to have them replaced with clipboard content.": "variabile per farli sostituire con il contenuto degli appunti.", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 223ab4ee5..9c0286f38 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "ドキュメントを選択するにはここをクリックしてください。", "click here.": "ここをクリックしてください。", "Click on the user role button to change a user's role.": "ユーザーの役割を変更するには、ユーザー役割ボタンをクリックしてください。", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "クローン", "Close": "閉じる", + "Code formatted successfully": "", "Collection": "コレクション", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUIベースURL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ベクトルストレージをリセット", "Response AutoCopy to Clipboard": "クリップボードへの応答の自動コピー", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "役割", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -600,11 +603,13 @@ "use_mlock (Ollama)": "use_mlock(オラマ)", "use_mmap (Ollama)": "use_mmap(オラマ)", "user": "ユーザー", + "User location successfully retrieved.": "", "User Permissions": "ユーザー権限", "Users": "ユーザー", "Utilize": "活用", "Valid time units:": "有効な時間単位:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "変数", "variable to have them replaced with clipboard content.": "クリップボードの内容に置き換える変数。", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 590735470..d0cc29b7a 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "დოკუმენტების ასარჩევად, დააკლიკე აქ", "click here.": "დააკლიკე აქ", "Click on the user role button to change a user's role.": "დააკლიკეთ მომხმარებლის როლის ღილაკს რომ შეცვალოთ მომხმარების როლი", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "კლონი", "Close": "დახურვა", + "Code formatted successfully": "", "Collection": "ნაკრები", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI საბაზისო URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ვექტორული მეხსიერების გადატვირთვა", "Response AutoCopy to Clipboard": "პასუხის ავტომატური კოპირება ბუფერში", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "როლი", "Rosé Pine": "ვარდისფერი ფიჭვის ხე", "Rosé Pine Dawn": "ვარდისფერი ფიჭვის გარიჟრაჟი", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (ოლამა)", "use_mmap (Ollama)": "use_mmap (ოლამა)", "user": "მომხმარებელი", + "User location successfully retrieved.": "", "User Permissions": "მომხმარებლის უფლებები", "Users": "მომხმარებლები", "Utilize": "გამოყენება", "Valid time units:": "მოქმედი დროის ერთეულები", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "ცვლადი", "variable to have them replaced with clipboard content.": "ცვლადი, რომ შეცვალოს ისინი ბუფერში შიგთავსით.", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index c8a241620..616841a34 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "문서를 선택하려면 여기를 클릭하세요.", "click here.": "여기를 클릭하세요.", "Click on the user role button to change a user's role.": "사용자 역할 버튼을 클릭하여 사용자의 역할을 변경하세요.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "복제", "Close": "닫기", + "Code formatted successfully": "", "Collection": "컬렉션", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI 기본 URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "업로드 디렉토리 초기화", "Reset Vector Storage": "벡터 스토리지 초기화", "Response AutoCopy to Clipboard": "응답을 클립보드에 자동 복사", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "역할", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (올라마)", "use_mmap (Ollama)": "use_mmap (올라마)", "user": "사용자", + "User location successfully retrieved.": "", "User Permissions": "사용자 권한", "Users": "사용자", "Utilize": "활용", "Valid time units:": "유효 시간 단위:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "변수", "variable to have them replaced with clipboard content.": "변수를 사용하여 클립보드 내용으로 바꾸세요.", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 5b5da9a1c..ba2dbe71a 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Spauskite čia norėdami pasirinkti dokumentus.", "click here.": "paspauskite čia.", "Click on the user role button to change a user's role.": "Paspauskite ant naudotojo rolės mygtuko tam, kad pakeisti naudotojo rolę.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "Uždaryti", + "Code formatted successfully": "", "Collection": "Kolekcija", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI bazės nuoroda", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reinicializuoti vektorių atmintį", "Response AutoCopy to Clipboard": "Automatiškai nukopijuoti atsakymą", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rolė", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -603,11 +606,13 @@ "use_mlock (Ollama)": "", "use_mmap (Ollama)": "", "user": "naudotojas", + "User location successfully retrieved.": "", "User Permissions": "Naudotojo leidimai", "Users": "Naudotojai", "Utilize": "Naudoti", "Valid time units:": "Teisingūs laiko vienetai :", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "kintamasis", "variable to have them replaced with clipboard content.": "kintamoji pakeičiama kopijuoklės turiniu.", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 4a7d4cfce..7f252d01a 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Klikk her for å velge dokumenter.", "click here.": "klikk her.", "Click on the user role button to change a user's role.": "Klikk på brukerrolle-knappen for å endre en brukers rolle.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Lukk", + "Code formatted successfully": "", "Collection": "Samling", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Grunn-URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Tilbakestill vektorlagring", "Response AutoCopy to Clipboard": "Respons auto-kopi til utklippstavle", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rolle", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "bruker", + "User location successfully retrieved.": "", "User Permissions": "Brukertillatelser", "Users": "Brukere", "Utilize": "Utnytt", "Valid time units:": "Gyldige tidsenheter:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variabel", "variable to have them replaced with clipboard content.": "variabel for å få dem erstattet med utklippstavleinnhold.", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 608348071..7452486a3 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Klik hier om documenten te selecteren", "click here.": "klik hier.", "Click on the user role button to change a user's role.": "Klik op de gebruikersrol knop om de rol van een gebruiker te wijzigen.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Kloon", "Close": "Sluiten", + "Code formatted successfully": "", "Collection": "Verzameling", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reset Vector Opslag", "Response AutoCopy to Clipboard": "Antwoord Automatisch Kopiëren naar Klembord", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "user", + "User location successfully retrieved.": "", "User Permissions": "Gebruikers Rechten", "Users": "Gebruikers", "Utilize": "Utilize", "Valid time units:": "Geldige tijdseenheden:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variabele", "variable to have them replaced with clipboard content.": "variabele om ze te laten vervangen door klembord inhoud.", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index ef110754d..df68fd93e 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "ਡਾਕੂਮੈਂਟ ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।", "click here.": "ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।", "Click on the user role button to change a user's role.": "ਉਪਭੋਗਤਾ ਦੀ ਭੂਮਿਕਾ ਬਦਲਣ ਲਈ ਉਪਭੋਗਤਾ ਭੂਮਿਕਾ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "ਕਲੋਨ", "Close": "ਬੰਦ ਕਰੋ", + "Code formatted successfully": "", "Collection": "ਸੰਗ੍ਰਹਿ", "ComfyUI": "ਕੰਫੀਯੂਆਈ", "ComfyUI Base URL": "ਕੰਫੀਯੂਆਈ ਬੇਸ URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ਵੈਕਟਰ ਸਟੋਰੇਜ ਨੂੰ ਰੀਸੈਟ ਕਰੋ", "Response AutoCopy to Clipboard": "ਜਵਾਬ ਆਟੋ ਕਾਪੀ ਕਲਿੱਪਬੋਰਡ 'ਤੇ", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "ਭੂਮਿਕਾ", "Rosé Pine": "ਰੋਜ਼ ਪਾਈਨ", "Rosé Pine Dawn": "ਰੋਜ਼ ਪਾਈਨ ਡਾਨ", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (ਓਲਾਮਾ)", "use_mmap (Ollama)": "use_mmap (ਓਲਾਮਾ)", "user": "ਉਪਭੋਗਤਾ", + "User location successfully retrieved.": "", "User Permissions": "ਉਪਭੋਗਤਾ ਅਧਿਕਾਰ", "Users": "ਉਪਭੋਗਤਾ", "Utilize": "ਵਰਤੋਂ", "Valid time units:": "ਵੈਧ ਸਮਾਂ ਇਕਾਈਆਂ:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "ਵੈਰੀਏਬਲ", "variable to have them replaced with clipboard content.": "ਕਲਿੱਪਬੋਰਡ ਸਮੱਗਰੀ ਨਾਲ ਬਦਲਣ ਲਈ ਵੈਰੀਏਬਲ।", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index fe7c70508..f129c4947 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Kliknij tutaj, aby wybrać dokumenty.", "click here.": "kliknij tutaj.", "Click on the user role button to change a user's role.": "Kliknij przycisk roli użytkownika, aby zmienić rolę użytkownika.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Zamknij", + "Code formatted successfully": "", "Collection": "Kolekcja", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "Bazowy URL ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Resetuj przechowywanie wektorów", "Response AutoCopy to Clipboard": "Automatyczne kopiowanie odpowiedzi do schowka", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rola", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -603,11 +606,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "użytkownik", + "User location successfully retrieved.": "", "User Permissions": "Uprawnienia użytkownika", "Users": "Użytkownicy", "Utilize": "Wykorzystaj", "Valid time units:": "Poprawne jednostki czasu:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "zmienna", "variable to have them replaced with clipboard content.": "zmienna która zostanie zastąpiona zawartością schowka.", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index f266f58c5..edd8d7ae0 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Clique aqui para selecionar documentos.", "click here.": "clique aqui.", "Click on the user role button to change a user's role.": "Clique no botão de função do usuário para alterar a função de um usuário.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clone", "Close": "Fechar", + "Code formatted successfully": "", "Collection": "Coleção", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "URL Base do ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Redefinir Armazenamento de Vetor", "Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Função", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "usuário", + "User location successfully retrieved.": "", "User Permissions": "Permissões do Usuário", "Users": "Usuários", "Utilize": "Utilizar", "Valid time units:": "Unidades de tempo válidas:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variável", "variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 356d60248..1ef6697c6 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Clique aqui para selecionar documentos.", "click here.": "clique aqui.", "Click on the user role button to change a user's role.": "Clique no botão de função do utilizador para alterar a função de um utilizador.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clonar", "Close": "Fechar", + "Code formatted successfully": "", "Collection": "Coleção", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "URL Base do ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "Limpar Pasta de Carregamento", "Reset Vector Storage": "Redefinir Armazenamento de Vetor", "Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Função", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "utilizador", + "User location successfully retrieved.": "", "User Permissions": "Permissões do Utilizador", "Users": "Utilizadores", "Utilize": "Utilizar", "Valid time units:": "Unidades de tempo válidas:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variável", "variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 1973d375f..f9bbf2c4a 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Нажмите здесь чтобы выберите документы.", "click here.": "нажмите здесь.", "Click on the user role button to change a user's role.": "Нажмите кнопку роли пользователя чтобы изменить роль пользователя.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клон", "Close": "Закрывать", + "Code formatted successfully": "", "Collection": "Коллекция", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "Базовый адрес URL ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Сбросить векторное хранилище", "Response AutoCopy to Clipboard": "Автоматическое копирование ответа в буфер обмена", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Роль", "Rosé Pine": "Розовое сосновое дерево", "Rosé Pine Dawn": "Розовое сосновое дерево рассвет", @@ -603,11 +606,13 @@ "use_mlock (Ollama)": "use_mlock (Оллама)", "use_mmap (Ollama)": "use_mmap (Оллама)", "user": "пользователь", + "User location successfully retrieved.": "", "User Permissions": "Права пользователя", "Users": "Пользователи", "Utilize": "Использовать", "Valid time units:": "Допустимые единицы времени:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "переменная", "variable to have them replaced with clipboard content.": "переменная, чтобы их заменить содержимым буфера обмена.", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index 7de0bc09d..bd48bd270 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Кликните овде да изаберете документе.", "click here.": "кликните овде.", "Click on the user role button to change a user's role.": "Кликните на дугме за улогу корисника да промените улогу корисника.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клон", "Close": "Затвори", + "Code formatted successfully": "", "Collection": "Колекција", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "Основна адреса за ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Ресетуј складиште вектора", "Response AutoCopy to Clipboard": "Самостално копирање одговора у оставу", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Улога", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -602,11 +605,13 @@ "use_mlock (Ollama)": "усе _млоцк (Оллама)", "use_mmap (Ollama)": "усе _ммап (Оллама)", "user": "корисник", + "User location successfully retrieved.": "", "User Permissions": "Овлашћења корисника", "Users": "Корисници", "Utilize": "Искористи", "Valid time units:": "Важеће временске јединице:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "променљива", "variable to have them replaced with clipboard content.": "променљива за замену са садржајем оставе.", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 5939c609a..e9706e1c0 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Klicka här för att välja dokument.", "click here.": "klicka här.", "Click on the user role button to change a user's role.": "Klicka på knappen för användarroll för att ändra en användares roll.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Stäng", + "Code formatted successfully": "", "Collection": "Samling", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "Återställ uppladdningskatalog", "Reset Vector Storage": "Återställ vektorlager", "Response AutoCopy to Clipboard": "Svara AutoCopy till urklipp", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Roll", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "användare", + "User location successfully retrieved.": "", "User Permissions": "Användarbehörigheter", "Users": "Användare", "Utilize": "Använd", "Valid time units:": "Giltiga tidsenheter:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "variabel", "variable to have them replaced with clipboard content.": "variabel för att få dem ersatta med urklippsinnehåll.", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index 301e23797..2227ebe91 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "", "click here.": "", "Click on the user role button to change a user's role.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "", + "Code formatted successfully": "", "Collection": "", "ComfyUI": "", "ComfyUI Base URL": "", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "", "Rosé Pine": "", "Rosé Pine Dawn": "", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "", "use_mmap (Ollama)": "", "user": "", + "User location successfully retrieved.": "", "User Permissions": "", "Users": "", "Utilize": "", "Valid time units:": "", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "", "variable to have them replaced with clipboard content.": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index da44e15ac..f1b927e0c 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Belgeleri seçmek için buraya tıklayın.", "click here.": "buraya tıklayın.", "Click on the user role button to change a user's role.": "Bir kullanıcının rolünü değiştirmek için kullanıcı rolü düğmesine tıklayın.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Kapat", + "Code formatted successfully": "", "Collection": "Koleksiyon", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Temel URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Vektör Depolamayı Sıfırla", "Response AutoCopy to Clipboard": "Yanıtı Panoya Otomatik Kopyala", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -601,11 +604,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "kullanıcı", + "User location successfully retrieved.": "", "User Permissions": "Kullanıcı İzinleri", "Users": "Kullanıcılar", "Utilize": "Kullan", "Valid time units:": "Geçerli zaman birimleri:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "değişken", "variable to have them replaced with clipboard content.": "panodaki içerikle değiştirilmesi için değişken.", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 51b936c3a..c1988a9f1 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Натисніть тут, щоб обрати документи.", "click here.": "клацніть тут.", "Click on the user role button to change a user's role.": "Натисніть кнопку ролі користувача, щоб змінити роль користувача.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клонувати", "Close": "Закрити", + "Code formatted successfully": "", "Collection": "Колекція", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "URL-адреса ComfyUI", @@ -444,6 +446,7 @@ "Reset Upload Directory": "Скинути каталог завантажень", "Reset Vector Storage": "Скинути векторне сховище", "Response AutoCopy to Clipboard": "Автокопіювання відповіді в буфер обміну", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Роль", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -603,11 +606,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "користувач", + "User location successfully retrieved.": "", "User Permissions": "Права користувача", "Users": "Користувачі", "Utilize": "Використовувати", "Valid time units:": "Дійсні одиниці часу:", "Valves": "Клапани", + "Valves updated": "", "Valves updated successfully": "Клапани успішно оновлено", "variable": "змінна", "variable to have them replaced with clipboard content.": "змінна, щоб замінити їх вмістом буфера обміну.", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index fec1313be..1245f7318 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "Bấm vào đây để chọn tài liệu.", "click here.": "bấm vào đây.", "Click on the user role button to change a user's role.": "Bấm vào nút trong cột VAI TRÒ để thay đổi quyền của người sử dụng.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Nhân bản", "Close": "Đóng", + "Code formatted successfully": "", "Collection": "Tổng hợp mọi tài liệu", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "Xóa toàn bộ thư mục Upload", "Reset Vector Storage": "Cài đặt lại Vector Storage", "Response AutoCopy to Clipboard": "Tự động Sao chép Phản hồi vào clipboard", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Vai trò", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -600,11 +603,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "Người sử dụng", + "User location successfully retrieved.": "", "User Permissions": "Phân quyền sử dụng", "Users": "Người sử dụng", "Utilize": "Sử dụng", "Valid time units:": "Đơn vị thời gian hợp lệ:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "biến", "variable to have them replaced with clipboard content.": "biến để có chúng được thay thế bằng nội dung clipboard.", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 4ef030dc0..59104d9de 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "单击选择文档", "click here.": "点击这里。", "Click on the user role button to change a user's role.": "点击角色前方的组别按钮以更改用户所属权限组。", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "复制", "Close": "关闭", + "Code formatted successfully": "", "Collection": "集合", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI 基础地址", @@ -444,6 +446,7 @@ "Reset Upload Directory": "重置上传目录", "Reset Vector Storage": "重置向量存储", "Response AutoCopy to Clipboard": "自动复制回复到剪贴板", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "权限组", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -600,11 +603,13 @@ "use_mlock (Ollama)": "use_mlock(Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "用户", + "User location successfully retrieved.": "", "User Permissions": "用户权限", "Users": "用户", "Utilize": "利用", "Valid time units:": "有效时间单位:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "变量", "variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换。", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index a8316dff0..86a7eca86 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -107,8 +107,10 @@ "Click here to select documents.": "點選這裡選擇文件。", "click here.": "點選這裡。", "Click on the user role button to change a user's role.": "點選使用者角色按鈕以更改使用者的角色。", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "複製", "Close": "關閉", + "Code formatted successfully": "", "Collection": "收藏", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI 基本 URL", @@ -444,6 +446,7 @@ "Reset Upload Directory": "重設上傳目錄", "Reset Vector Storage": "重設向量儲存空間", "Response AutoCopy to Clipboard": "自動複製回答到剪貼簿", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "角色", "Rosé Pine": "玫瑰松", "Rosé Pine Dawn": "黎明玫瑰松", @@ -600,11 +603,13 @@ "use_mlock (Ollama)": "use_mlock(Ollama)", "use_mmap (Ollama)": "use_mmap(Ollama)", "user": "使用者", + "User location successfully retrieved.": "", "User Permissions": "使用者權限", "Users": "使用者", "Utilize": "使用", "Valid time units:": "有效時間單位:", "Valves": "", + "Valves updated": "", "Valves updated successfully": "", "variable": "變數", "variable to have them replaced with clipboard content.": "變數將替換為剪貼簿內容", From 2ece4e7cbb40db5cc9632ce8b50dc80679db72d4 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Mon, 24 Jun 2024 18:12:39 +0200 Subject: [PATCH 232/287] Add Ukrainian translation for keys + formatin --- src/lib/components/chat/Settings/General.svelte | 4 +++- src/lib/components/chat/Settings/Interface.svelte | 4 +++- src/lib/i18n/locales/uk-UA/translation.json | 10 +++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/lib/components/chat/Settings/General.svelte b/src/lib/components/chat/Settings/General.svelte index f1960009a..ee6a88fc8 100644 --- a/src/lib/components/chat/Settings/General.svelte +++ b/src/lib/components/chat/Settings/General.svelte @@ -32,7 +32,9 @@ saveSettings({ notificationEnabled: notificationEnabled }); } else { toast.error( - $i18n.t('Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.') + $i18n.t( ++ 'Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.' ++ ) ); } }; diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index a2bcd08f1..23a9b55f1 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -111,7 +111,9 @@ saveSettings({ responseAutoCopy: responseAutoCopy }); } else { toast.error( - $i18n.t('Clipboard write permission denied. Please check your browser settings to grant the necessary access.') + $i18n.t( ++ 'Clipboard write permission denied. Please check your browser settings to grant the necessary access.' ++ ) ); } }; diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index c1988a9f1..38d346c4b 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -107,10 +107,10 @@ "Click here to select documents.": "Натисніть тут, щоб обрати документи.", "click here.": "клацніть тут.", "Click on the user role button to change a user's role.": "Натисніть кнопку ролі користувача, щоб змінити роль користувача.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Відмовлено в дозволі на запис до буфера обміну. Будь ласка, перевірте налаштування вашого браузера, щоб надати необхідний доступ.", "Clone": "Клонувати", "Close": "Закрити", - "Code formatted successfully": "", + "Code formatted successfully": "Код успішно відформатовано", "Collection": "Колекція", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "URL-адреса ComfyUI", @@ -446,7 +446,7 @@ "Reset Upload Directory": "Скинути каталог завантажень", "Reset Vector Storage": "Скинути векторне сховище", "Response AutoCopy to Clipboard": "Автокопіювання відповіді в буфер обміну", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Сповіщення про відповіді не можуть бути активовані, оскільки вам було відмовлено в доступі до веб-сайту. Будь ласка, відвідайте налаштування вашого браузера, щоб надати необхідний доступ.", "Role": "Роль", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -606,13 +606,13 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "користувач", - "User location successfully retrieved.": "", + "User location successfully retrieved.": "Місцезнаходження користувача успішно знайдено.", "User Permissions": "Права користувача", "Users": "Користувачі", "Utilize": "Використовувати", "Valid time units:": "Дійсні одиниці часу:", "Valves": "Клапани", - "Valves updated": "", + "Valves updated": "Клапани оновлено", "Valves updated successfully": "Клапани успішно оновлено", "variable": "змінна", "variable to have them replaced with clipboard content.": "змінна, щоб замінити їх вмістом буфера обміну.", From 855b5508d062b2aa7749c91986e1f411fc699d99 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Mon, 24 Jun 2024 18:14:19 +0200 Subject: [PATCH 233/287] start parser --- src/lib/i18n/locales/ar-BH/translation.json | 2 -- src/lib/i18n/locales/bg-BG/translation.json | 2 -- src/lib/i18n/locales/bn-BD/translation.json | 2 -- src/lib/i18n/locales/ca-ES/translation.json | 2 -- src/lib/i18n/locales/ceb-PH/translation.json | 2 -- src/lib/i18n/locales/de-DE/translation.json | 2 -- src/lib/i18n/locales/dg-DG/translation.json | 2 -- src/lib/i18n/locales/en-GB/translation.json | 2 -- src/lib/i18n/locales/en-US/translation.json | 2 -- src/lib/i18n/locales/es-ES/translation.json | 2 -- src/lib/i18n/locales/fa-IR/translation.json | 2 -- src/lib/i18n/locales/fi-FI/translation.json | 2 -- src/lib/i18n/locales/fr-CA/translation.json | 2 -- src/lib/i18n/locales/fr-FR/translation.json | 2 -- src/lib/i18n/locales/he-IL/translation.json | 2 -- src/lib/i18n/locales/hi-IN/translation.json | 2 -- src/lib/i18n/locales/hr-HR/translation.json | 2 -- src/lib/i18n/locales/it-IT/translation.json | 2 -- src/lib/i18n/locales/ja-JP/translation.json | 2 -- src/lib/i18n/locales/ka-GE/translation.json | 2 -- src/lib/i18n/locales/ko-KR/translation.json | 2 -- src/lib/i18n/locales/lt-LT/translation.json | 2 -- src/lib/i18n/locales/nb-NO/translation.json | 2 -- src/lib/i18n/locales/nl-NL/translation.json | 2 -- src/lib/i18n/locales/pa-IN/translation.json | 2 -- src/lib/i18n/locales/pl-PL/translation.json | 2 -- src/lib/i18n/locales/pt-BR/translation.json | 2 -- src/lib/i18n/locales/pt-PT/translation.json | 2 -- src/lib/i18n/locales/ru-RU/translation.json | 2 -- src/lib/i18n/locales/sr-RS/translation.json | 2 -- src/lib/i18n/locales/sv-SE/translation.json | 2 -- src/lib/i18n/locales/tk-TW/translation.json | 2 -- src/lib/i18n/locales/tr-TR/translation.json | 2 -- src/lib/i18n/locales/uk-UA/translation.json | 2 -- src/lib/i18n/locales/vi-VN/translation.json | 2 -- src/lib/i18n/locales/zh-CN/translation.json | 2 -- src/lib/i18n/locales/zh-TW/translation.json | 2 -- 37 files changed, 74 deletions(-) diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 7cd0a076e..58f6ef9e8 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "انقر هنا لاختيار المستندات", "click here.": "أضغط هنا", "Click on the user role button to change a user's role.": "أضغط على أسم الصلاحيات لتغيرها للمستخدم", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "استنساخ", "Close": "أغلق", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "إعادة تعيين تخزين المتجهات", "Response AutoCopy to Clipboard": "النسخ التلقائي للاستجابة إلى الحافظة", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "منصب", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 1bcadcc2d..c3d6fdbab 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Натиснете тук, за да изберете документи.", "click here.": "натиснете тук.", "Click on the user role button to change a user's role.": "Натиснете върху бутона за промяна на ролята на потребителя.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клонинг", "Close": "Затвори", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Ресет Vector Storage", "Response AutoCopy to Clipboard": "Аувтоматично копиране на отговор в клипборда", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Роля", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 7ed34bd98..f7b85b32d 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "ডকুমেন্টগুলো নির্বাচন করার জন্য এখানে ক্লিক করুন", "click here.": "এখানে ক্লিক করুন", "Click on the user role button to change a user's role.": "ইউজারের পদবি পরিবর্তন করার জন্য ইউজারের পদবি বাটনে ক্লিক করুন", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "ক্লোন", "Close": "বন্ধ", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ভেক্টর স্টোরেজ রিসেট করুন", "Response AutoCopy to Clipboard": "রেসপন্সগুলো স্বয়ংক্রিভাবে ক্লিপবোর্ডে কপি হবে", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "পদবি", "Rosé Pine": "রোজ পাইন", "Rosé Pine Dawn": "ভোরের রোজ পাইন", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 746ca43e5..62c0879f3 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Clica aquí per seleccionar documents.", "click here.": "clica aquí.", "Click on the user role button to change a user's role.": "Clica sobre el botó de rol d'usuari per canviar el rol d'un usuari.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clonar", "Close": "Tancar", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "Restableix el directori de pujades", "Reset Vector Storage": "Restableix l'emmagatzematge de vectors", "Response AutoCopy to Clipboard": "Copiar la resposta automàticament al porta-retalls", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Albada Rosé Pine", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 9d5ae4b1a..340c57c55 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Pag-klik dinhi aron mapili ang mga dokumento.", "click here.": "I-klik dinhi.", "Click on the user role button to change a user's role.": "I-klik ang User Role button aron usbon ang role sa user.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "Suod nga", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "I-reset ang pagtipig sa vector", "Response AutoCopy to Clipboard": "Awtomatikong kopya sa tubag sa clipboard", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Papel", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Aube Pine Rosé", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index 1e6546d2d..a1b26114b 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Klicke hier um Dokumente auszuwählen", "click here.": "hier klicken.", "Click on the user role button to change a user's role.": "Klicke auf die Benutzerrollenschaltfläche, um die Rolle eines Benutzers zu ändern.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klonen", "Close": "Schließe", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "Uploadverzeichnis löschen", "Reset Vector Storage": "Vektorspeicher zurücksetzen", "Response AutoCopy to Clipboard": "Antwort automatisch in die Zwischenablage kopieren", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rolle", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index df1a1e7a6..df4c37782 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Click to select documents", "click here.": "click here. Such click.", "Click on the user role button to change a user's role.": "Click user role button to change role.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "Close", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reset Vector Storage", "Response AutoCopy to Clipboard": "Copy Bark Auto Bark", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Role", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 2227ebe91..26ca39bef 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "", "click here.": "", "Click on the user role button to change a user's role.": "", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "", "Rosé Pine": "", "Rosé Pine Dawn": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 2227ebe91..26ca39bef 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "", "click here.": "", "Click on the user role button to change a user's role.": "", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "", "Rosé Pine": "", "Rosé Pine Dawn": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 6a4083fe9..84e08fd94 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Presiona aquí para seleccionar documentos", "click here.": "Presiona aquí.", "Click on the user role button to change a user's role.": "Presiona en el botón de roles del usuario para cambiar su rol.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clon", "Close": "Cerrar", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Restablecer almacenamiento vectorial", "Response AutoCopy to Clipboard": "Copiar respuesta automáticamente al portapapeles", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 336d0f31a..38bba427e 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "برای انتخاب اسناد اینجا را کلیک کنید.", "click here.": "اینجا کلیک کنید.", "Click on the user role button to change a user's role.": "برای تغییر نقش کاربر، روی دکمه نقش کاربر کلیک کنید.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "کلون", "Close": "بسته", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "بازنشانی ذخیره سازی برداری", "Response AutoCopy to Clipboard": "کپی خودکار پاسخ به کلیپ بورد", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "نقش", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index d88438721..29b592da8 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Klikkaa tästä valitaksesi asiakirjoja.", "click here.": "klikkaa tästä.", "Click on the user role button to change a user's role.": "Klikkaa käyttäjän roolipainiketta vaihtaaksesi käyttäjän roolia.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klooni", "Close": "Sulje", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Tyhjennä vektorivarasto", "Response AutoCopy to Clipboard": "Vastauksen automaattikopiointi leikepöydälle", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rooli", "Rosé Pine": "Rosee-mänty", "Rosé Pine Dawn": "Aamuinen Rosee-mänty", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index d7073e212..6465cdf48 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Cliquez ici pour sélectionner des documents.", "click here.": "cliquez ici.", "Click on the user role button to change a user's role.": "Cliquez sur le bouton de rôle d'utilisateur pour changer le rôle d'un utilisateur.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Cloner", "Close": "Fermer", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Réinitialiser le stockage vectoriel", "Response AutoCopy to Clipboard": "Copie automatique de la réponse vers le presse-papiers", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rôle", "Rosé Pine": "Pin Rosé", "Rosé Pine Dawn": "Aube Pin Rosé", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 9d66c0aff..891907945 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Cliquez ici pour sélectionner des documents.", "click here.": "cliquez ici.", "Click on the user role button to change a user's role.": "Cliquez sur le bouton de rôle d'utilisateur pour changer le rôle d'un utilisateur.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clone", "Close": "Fermer", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Réinitialiser le Stockage de Vecteur", "Response AutoCopy to Clipboard": "Copie Automatique de la Réponse dans le Presse-papiers", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rôle", "Rosé Pine": "Pin Rosé", "Rosé Pine Dawn": "Aube Pin Rosé", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index 078bc787d..618b81f0e 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "לחץ כאן לבחירת מסמכים.", "click here.": "לחץ כאן.", "Click on the user role button to change a user's role.": "לחץ על כפתור תפקיד המשתמש כדי לשנות את תפקיד המשתמש.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "שיבוט", "Close": "סגור", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "איפוס אחסון וקטורים", "Response AutoCopy to Clipboard": "העתקה אוטומטית של תגובה ללוח", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "תפקיד", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 1d8c57af5..910143d78 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "दस्तावेज़ चुनने के लिए यहां क्लिक करें।", "click here.": "यहाँ क्लिक करें।", "Click on the user role button to change a user's role.": "उपयोगकर्ता की भूमिका बदलने के लिए उपयोगकर्ता भूमिका बटन पर क्लिक करें।", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "क्लोन", "Close": "बंद करना", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "वेक्टर संग्रहण रीसेट करें", "Response AutoCopy to Clipboard": "क्लिपबोर्ड पर प्रतिक्रिया ऑटोकॉपी", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "भूमिका", "Rosé Pine": "रोसे पिन", "Rosé Pine Dawn": "रोसे पिन डेन", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 0da584f2d..fe5978280 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Kliknite ovdje da odaberete dokumente.", "click here.": "kliknite ovdje.", "Click on the user role button to change a user's role.": "Kliknite na gumb uloge korisnika za promjenu uloge korisnika.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Kloniraj", "Close": "Zatvori", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "Poništi upload direktorij", "Reset Vector Storage": "Resetiraj pohranu vektora", "Response AutoCopy to Clipboard": "Automatsko kopiranje odgovora u međuspremnik", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Uloga", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 1ca9e1f31..7f6946e8e 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Clicca qui per selezionare i documenti.", "click here.": "clicca qui.", "Click on the user role button to change a user's role.": "Clicca sul pulsante del ruolo utente per modificare il ruolo di un utente.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clone", "Close": "Chiudi", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reimposta archivio vettoriale", "Response AutoCopy to Clipboard": "Copia automatica della risposta negli appunti", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Ruolo", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 9c0286f38..840dc7760 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "ドキュメントを選択するにはここをクリックしてください。", "click here.": "ここをクリックしてください。", "Click on the user role button to change a user's role.": "ユーザーの役割を変更するには、ユーザー役割ボタンをクリックしてください。", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "クローン", "Close": "閉じる", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ベクトルストレージをリセット", "Response AutoCopy to Clipboard": "クリップボードへの応答の自動コピー", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "役割", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index d0cc29b7a..4edadd254 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "დოკუმენტების ასარჩევად, დააკლიკე აქ", "click here.": "დააკლიკე აქ", "Click on the user role button to change a user's role.": "დააკლიკეთ მომხმარებლის როლის ღილაკს რომ შეცვალოთ მომხმარების როლი", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "კლონი", "Close": "დახურვა", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ვექტორული მეხსიერების გადატვირთვა", "Response AutoCopy to Clipboard": "პასუხის ავტომატური კოპირება ბუფერში", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "როლი", "Rosé Pine": "ვარდისფერი ფიჭვის ხე", "Rosé Pine Dawn": "ვარდისფერი ფიჭვის გარიჟრაჟი", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 616841a34..f2e9d8ae0 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "문서를 선택하려면 여기를 클릭하세요.", "click here.": "여기를 클릭하세요.", "Click on the user role button to change a user's role.": "사용자 역할 버튼을 클릭하여 사용자의 역할을 변경하세요.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "복제", "Close": "닫기", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "업로드 디렉토리 초기화", "Reset Vector Storage": "벡터 스토리지 초기화", "Response AutoCopy to Clipboard": "응답을 클립보드에 자동 복사", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "역할", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index ba2dbe71a..a91ef0fb6 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Spauskite čia norėdami pasirinkti dokumentus.", "click here.": "paspauskite čia.", "Click on the user role button to change a user's role.": "Paspauskite ant naudotojo rolės mygtuko tam, kad pakeisti naudotojo rolę.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "Uždaryti", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reinicializuoti vektorių atmintį", "Response AutoCopy to Clipboard": "Automatiškai nukopijuoti atsakymą", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rolė", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 7f252d01a..39a40ee74 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Klikk her for å velge dokumenter.", "click here.": "klikk her.", "Click on the user role button to change a user's role.": "Klikk på brukerrolle-knappen for å endre en brukers rolle.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Lukk", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Tilbakestill vektorlagring", "Response AutoCopy to Clipboard": "Respons auto-kopi til utklippstavle", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rolle", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 7452486a3..c4fe663cf 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Klik hier om documenten te selecteren", "click here.": "klik hier.", "Click on the user role button to change a user's role.": "Klik op de gebruikersrol knop om de rol van een gebruiker te wijzigen.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Kloon", "Close": "Sluiten", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reset Vector Opslag", "Response AutoCopy to Clipboard": "Antwoord Automatisch Kopiëren naar Klembord", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index df68fd93e..83a953e8e 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "ਡਾਕੂਮੈਂਟ ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।", "click here.": "ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।", "Click on the user role button to change a user's role.": "ਉਪਭੋਗਤਾ ਦੀ ਭੂਮਿਕਾ ਬਦਲਣ ਲਈ ਉਪਭੋਗਤਾ ਭੂਮਿਕਾ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "ਕਲੋਨ", "Close": "ਬੰਦ ਕਰੋ", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ਵੈਕਟਰ ਸਟੋਰੇਜ ਨੂੰ ਰੀਸੈਟ ਕਰੋ", "Response AutoCopy to Clipboard": "ਜਵਾਬ ਆਟੋ ਕਾਪੀ ਕਲਿੱਪਬੋਰਡ 'ਤੇ", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "ਭੂਮਿਕਾ", "Rosé Pine": "ਰੋਜ਼ ਪਾਈਨ", "Rosé Pine Dawn": "ਰੋਜ਼ ਪਾਈਨ ਡਾਨ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index f129c4947..bf1030c5a 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Kliknij tutaj, aby wybrać dokumenty.", "click here.": "kliknij tutaj.", "Click on the user role button to change a user's role.": "Kliknij przycisk roli użytkownika, aby zmienić rolę użytkownika.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Zamknij", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Resetuj przechowywanie wektorów", "Response AutoCopy to Clipboard": "Automatyczne kopiowanie odpowiedzi do schowka", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rola", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index edd8d7ae0..8c87c70cb 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Clique aqui para selecionar documentos.", "click here.": "clique aqui.", "Click on the user role button to change a user's role.": "Clique no botão de função do usuário para alterar a função de um usuário.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clone", "Close": "Fechar", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Redefinir Armazenamento de Vetor", "Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Função", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 1ef6697c6..c05e13cbe 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Clique aqui para selecionar documentos.", "click here.": "clique aqui.", "Click on the user role button to change a user's role.": "Clique no botão de função do utilizador para alterar a função de um utilizador.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clonar", "Close": "Fechar", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "Limpar Pasta de Carregamento", "Reset Vector Storage": "Redefinir Armazenamento de Vetor", "Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Função", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index f9bbf2c4a..93c111930 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Нажмите здесь чтобы выберите документы.", "click here.": "нажмите здесь.", "Click on the user role button to change a user's role.": "Нажмите кнопку роли пользователя чтобы изменить роль пользователя.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клон", "Close": "Закрывать", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Сбросить векторное хранилище", "Response AutoCopy to Clipboard": "Автоматическое копирование ответа в буфер обмена", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Роль", "Rosé Pine": "Розовое сосновое дерево", "Rosé Pine Dawn": "Розовое сосновое дерево рассвет", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index bd48bd270..f775ce0a0 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Кликните овде да изаберете документе.", "click here.": "кликните овде.", "Click on the user role button to change a user's role.": "Кликните на дугме за улогу корисника да промените улогу корисника.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клон", "Close": "Затвори", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Ресетуј складиште вектора", "Response AutoCopy to Clipboard": "Самостално копирање одговора у оставу", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Улога", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index e9706e1c0..87f57635f 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Klicka här för att välja dokument.", "click here.": "klicka här.", "Click on the user role button to change a user's role.": "Klicka på knappen för användarroll för att ändra en användares roll.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Stäng", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "Återställ uppladdningskatalog", "Reset Vector Storage": "Återställ vektorlager", "Response AutoCopy to Clipboard": "Svara AutoCopy till urklipp", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Roll", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index 2227ebe91..26ca39bef 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "", "click here.": "", "Click on the user role button to change a user's role.": "", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "", "Rosé Pine": "", "Rosé Pine Dawn": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index f1b927e0c..4223b28e7 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Belgeleri seçmek için buraya tıklayın.", "click here.": "buraya tıklayın.", "Click on the user role button to change a user's role.": "Bir kullanıcının rolünü değiştirmek için kullanıcı rolü düğmesine tıklayın.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Kapat", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Vektör Depolamayı Sıfırla", "Response AutoCopy to Clipboard": "Yanıtı Panoya Otomatik Kopyala", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 38d346c4b..ba09bd20a 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Натисніть тут, щоб обрати документи.", "click here.": "клацніть тут.", "Click on the user role button to change a user's role.": "Натисніть кнопку ролі користувача, щоб змінити роль користувача.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Відмовлено в дозволі на запис до буфера обміну. Будь ласка, перевірте налаштування вашого браузера, щоб надати необхідний доступ.", "Clone": "Клонувати", "Close": "Закрити", "Code formatted successfully": "Код успішно відформатовано", @@ -446,7 +445,6 @@ "Reset Upload Directory": "Скинути каталог завантажень", "Reset Vector Storage": "Скинути векторне сховище", "Response AutoCopy to Clipboard": "Автокопіювання відповіді в буфер обміну", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Сповіщення про відповіді не можуть бути активовані, оскільки вам було відмовлено в доступі до веб-сайту. Будь ласка, відвідайте налаштування вашого браузера, щоб надати необхідний доступ.", "Role": "Роль", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 1245f7318..33848b478 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "Bấm vào đây để chọn tài liệu.", "click here.": "bấm vào đây.", "Click on the user role button to change a user's role.": "Bấm vào nút trong cột VAI TRÒ để thay đổi quyền của người sử dụng.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Nhân bản", "Close": "Đóng", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "Xóa toàn bộ thư mục Upload", "Reset Vector Storage": "Cài đặt lại Vector Storage", "Response AutoCopy to Clipboard": "Tự động Sao chép Phản hồi vào clipboard", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Vai trò", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 59104d9de..c55819f13 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "单击选择文档", "click here.": "点击这里。", "Click on the user role button to change a user's role.": "点击角色前方的组别按钮以更改用户所属权限组。", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "复制", "Close": "关闭", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "重置上传目录", "Reset Vector Storage": "重置向量存储", "Response AutoCopy to Clipboard": "自动复制回复到剪贴板", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "权限组", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 86a7eca86..72ca5c791 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -107,7 +107,6 @@ "Click here to select documents.": "點選這裡選擇文件。", "click here.": "點選這裡。", "Click on the user role button to change a user's role.": "點選使用者角色按鈕以更改使用者的角色。", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "複製", "Close": "關閉", "Code formatted successfully": "", @@ -446,7 +445,6 @@ "Reset Upload Directory": "重設上傳目錄", "Reset Vector Storage": "重設向量儲存空間", "Response AutoCopy to Clipboard": "自動複製回答到剪貼簿", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "角色", "Rosé Pine": "玫瑰松", "Rosé Pine Dawn": "黎明玫瑰松", From 5e9e1108a3fe9c9e0284c0c8ac9329df50c1883b Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Mon, 24 Jun 2024 18:21:29 +0200 Subject: [PATCH 234/287] fix errors --- src/lib/components/chat/Settings/General.svelte | 4 ++-- src/lib/components/chat/Settings/Interface.svelte | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/components/chat/Settings/General.svelte b/src/lib/components/chat/Settings/General.svelte index ee6a88fc8..94275d76d 100644 --- a/src/lib/components/chat/Settings/General.svelte +++ b/src/lib/components/chat/Settings/General.svelte @@ -33,8 +33,8 @@ } else { toast.error( $i18n.t( -+ '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.' + ) ); } }; diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index 23a9b55f1..5af33888a 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -112,8 +112,8 @@ } else { toast.error( $i18n.t( -+ '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.' + ) ); } }; From 8dc97358732042a8226a5be4b8b356cc0ba8f724 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Mon, 24 Jun 2024 18:24:21 +0200 Subject: [PATCH 235/287] start parser i18n --- src/lib/i18n/locales/ar-BH/translation.json | 2 ++ src/lib/i18n/locales/bg-BG/translation.json | 2 ++ src/lib/i18n/locales/bn-BD/translation.json | 2 ++ src/lib/i18n/locales/ca-ES/translation.json | 2 ++ src/lib/i18n/locales/ceb-PH/translation.json | 2 ++ src/lib/i18n/locales/de-DE/translation.json | 2 ++ src/lib/i18n/locales/dg-DG/translation.json | 2 ++ src/lib/i18n/locales/en-GB/translation.json | 2 ++ src/lib/i18n/locales/en-US/translation.json | 2 ++ src/lib/i18n/locales/es-ES/translation.json | 2 ++ src/lib/i18n/locales/fa-IR/translation.json | 2 ++ src/lib/i18n/locales/fi-FI/translation.json | 2 ++ src/lib/i18n/locales/fr-CA/translation.json | 2 ++ src/lib/i18n/locales/fr-FR/translation.json | 2 ++ src/lib/i18n/locales/he-IL/translation.json | 2 ++ src/lib/i18n/locales/hi-IN/translation.json | 2 ++ src/lib/i18n/locales/hr-HR/translation.json | 2 ++ src/lib/i18n/locales/it-IT/translation.json | 2 ++ src/lib/i18n/locales/ja-JP/translation.json | 2 ++ src/lib/i18n/locales/ka-GE/translation.json | 2 ++ src/lib/i18n/locales/ko-KR/translation.json | 2 ++ src/lib/i18n/locales/lt-LT/translation.json | 2 ++ src/lib/i18n/locales/nb-NO/translation.json | 2 ++ src/lib/i18n/locales/nl-NL/translation.json | 2 ++ src/lib/i18n/locales/pa-IN/translation.json | 2 ++ src/lib/i18n/locales/pl-PL/translation.json | 2 ++ src/lib/i18n/locales/pt-BR/translation.json | 2 ++ src/lib/i18n/locales/pt-PT/translation.json | 2 ++ src/lib/i18n/locales/ru-RU/translation.json | 2 ++ src/lib/i18n/locales/sr-RS/translation.json | 2 ++ src/lib/i18n/locales/sv-SE/translation.json | 2 ++ src/lib/i18n/locales/tk-TW/translation.json | 2 ++ src/lib/i18n/locales/tr-TR/translation.json | 2 ++ src/lib/i18n/locales/uk-UA/translation.json | 2 ++ src/lib/i18n/locales/vi-VN/translation.json | 2 ++ src/lib/i18n/locales/zh-CN/translation.json | 2 ++ src/lib/i18n/locales/zh-TW/translation.json | 2 ++ 37 files changed, 74 insertions(+) diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 58f6ef9e8..7cd0a076e 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "انقر هنا لاختيار المستندات", "click here.": "أضغط هنا", "Click on the user role button to change a user's role.": "أضغط على أسم الصلاحيات لتغيرها للمستخدم", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "استنساخ", "Close": "أغلق", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "إعادة تعيين تخزين المتجهات", "Response AutoCopy to Clipboard": "النسخ التلقائي للاستجابة إلى الحافظة", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "منصب", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index c3d6fdbab..1bcadcc2d 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Натиснете тук, за да изберете документи.", "click here.": "натиснете тук.", "Click on the user role button to change a user's role.": "Натиснете върху бутона за промяна на ролята на потребителя.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клонинг", "Close": "Затвори", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Ресет Vector Storage", "Response AutoCopy to Clipboard": "Аувтоматично копиране на отговор в клипборда", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Роля", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index f7b85b32d..7ed34bd98 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "ডকুমেন্টগুলো নির্বাচন করার জন্য এখানে ক্লিক করুন", "click here.": "এখানে ক্লিক করুন", "Click on the user role button to change a user's role.": "ইউজারের পদবি পরিবর্তন করার জন্য ইউজারের পদবি বাটনে ক্লিক করুন", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "ক্লোন", "Close": "বন্ধ", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ভেক্টর স্টোরেজ রিসেট করুন", "Response AutoCopy to Clipboard": "রেসপন্সগুলো স্বয়ংক্রিভাবে ক্লিপবোর্ডে কপি হবে", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "পদবি", "Rosé Pine": "রোজ পাইন", "Rosé Pine Dawn": "ভোরের রোজ পাইন", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 62c0879f3..746ca43e5 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Clica aquí per seleccionar documents.", "click here.": "clica aquí.", "Click on the user role button to change a user's role.": "Clica sobre el botó de rol d'usuari per canviar el rol d'un usuari.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clonar", "Close": "Tancar", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "Restableix el directori de pujades", "Reset Vector Storage": "Restableix l'emmagatzematge de vectors", "Response AutoCopy to Clipboard": "Copiar la resposta automàticament al porta-retalls", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Albada Rosé Pine", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 340c57c55..9d5ae4b1a 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Pag-klik dinhi aron mapili ang mga dokumento.", "click here.": "I-klik dinhi.", "Click on the user role button to change a user's role.": "I-klik ang User Role button aron usbon ang role sa user.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "Suod nga", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "I-reset ang pagtipig sa vector", "Response AutoCopy to Clipboard": "Awtomatikong kopya sa tubag sa clipboard", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Papel", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Aube Pine Rosé", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index a1b26114b..1e6546d2d 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Klicke hier um Dokumente auszuwählen", "click here.": "hier klicken.", "Click on the user role button to change a user's role.": "Klicke auf die Benutzerrollenschaltfläche, um die Rolle eines Benutzers zu ändern.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klonen", "Close": "Schließe", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "Uploadverzeichnis löschen", "Reset Vector Storage": "Vektorspeicher zurücksetzen", "Response AutoCopy to Clipboard": "Antwort automatisch in die Zwischenablage kopieren", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rolle", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index df4c37782..df1a1e7a6 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Click to select documents", "click here.": "click here. Such click.", "Click on the user role button to change a user's role.": "Click user role button to change role.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "Close", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reset Vector Storage", "Response AutoCopy to Clipboard": "Copy Bark Auto Bark", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Role", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 26ca39bef..2227ebe91 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "", "click here.": "", "Click on the user role button to change a user's role.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "", "Rosé Pine": "", "Rosé Pine Dawn": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 26ca39bef..2227ebe91 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "", "click here.": "", "Click on the user role button to change a user's role.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "", "Rosé Pine": "", "Rosé Pine Dawn": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 84e08fd94..6a4083fe9 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Presiona aquí para seleccionar documentos", "click here.": "Presiona aquí.", "Click on the user role button to change a user's role.": "Presiona en el botón de roles del usuario para cambiar su rol.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clon", "Close": "Cerrar", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Restablecer almacenamiento vectorial", "Response AutoCopy to Clipboard": "Copiar respuesta automáticamente al portapapeles", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 38bba427e..336d0f31a 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "برای انتخاب اسناد اینجا را کلیک کنید.", "click here.": "اینجا کلیک کنید.", "Click on the user role button to change a user's role.": "برای تغییر نقش کاربر، روی دکمه نقش کاربر کلیک کنید.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "کلون", "Close": "بسته", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "بازنشانی ذخیره سازی برداری", "Response AutoCopy to Clipboard": "کپی خودکار پاسخ به کلیپ بورد", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "نقش", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 29b592da8..d88438721 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Klikkaa tästä valitaksesi asiakirjoja.", "click here.": "klikkaa tästä.", "Click on the user role button to change a user's role.": "Klikkaa käyttäjän roolipainiketta vaihtaaksesi käyttäjän roolia.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klooni", "Close": "Sulje", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Tyhjennä vektorivarasto", "Response AutoCopy to Clipboard": "Vastauksen automaattikopiointi leikepöydälle", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rooli", "Rosé Pine": "Rosee-mänty", "Rosé Pine Dawn": "Aamuinen Rosee-mänty", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 6465cdf48..d7073e212 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Cliquez ici pour sélectionner des documents.", "click here.": "cliquez ici.", "Click on the user role button to change a user's role.": "Cliquez sur le bouton de rôle d'utilisateur pour changer le rôle d'un utilisateur.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Cloner", "Close": "Fermer", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Réinitialiser le stockage vectoriel", "Response AutoCopy to Clipboard": "Copie automatique de la réponse vers le presse-papiers", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rôle", "Rosé Pine": "Pin Rosé", "Rosé Pine Dawn": "Aube Pin Rosé", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 891907945..9d66c0aff 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Cliquez ici pour sélectionner des documents.", "click here.": "cliquez ici.", "Click on the user role button to change a user's role.": "Cliquez sur le bouton de rôle d'utilisateur pour changer le rôle d'un utilisateur.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clone", "Close": "Fermer", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Réinitialiser le Stockage de Vecteur", "Response AutoCopy to Clipboard": "Copie Automatique de la Réponse dans le Presse-papiers", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rôle", "Rosé Pine": "Pin Rosé", "Rosé Pine Dawn": "Aube Pin Rosé", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index 618b81f0e..078bc787d 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "לחץ כאן לבחירת מסמכים.", "click here.": "לחץ כאן.", "Click on the user role button to change a user's role.": "לחץ על כפתור תפקיד המשתמש כדי לשנות את תפקיד המשתמש.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "שיבוט", "Close": "סגור", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "איפוס אחסון וקטורים", "Response AutoCopy to Clipboard": "העתקה אוטומטית של תגובה ללוח", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "תפקיד", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 910143d78..1d8c57af5 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "दस्तावेज़ चुनने के लिए यहां क्लिक करें।", "click here.": "यहाँ क्लिक करें।", "Click on the user role button to change a user's role.": "उपयोगकर्ता की भूमिका बदलने के लिए उपयोगकर्ता भूमिका बटन पर क्लिक करें।", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "क्लोन", "Close": "बंद करना", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "वेक्टर संग्रहण रीसेट करें", "Response AutoCopy to Clipboard": "क्लिपबोर्ड पर प्रतिक्रिया ऑटोकॉपी", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "भूमिका", "Rosé Pine": "रोसे पिन", "Rosé Pine Dawn": "रोसे पिन डेन", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index fe5978280..0da584f2d 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Kliknite ovdje da odaberete dokumente.", "click here.": "kliknite ovdje.", "Click on the user role button to change a user's role.": "Kliknite na gumb uloge korisnika za promjenu uloge korisnika.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Kloniraj", "Close": "Zatvori", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "Poništi upload direktorij", "Reset Vector Storage": "Resetiraj pohranu vektora", "Response AutoCopy to Clipboard": "Automatsko kopiranje odgovora u međuspremnik", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Uloga", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 7f6946e8e..1ca9e1f31 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Clicca qui per selezionare i documenti.", "click here.": "clicca qui.", "Click on the user role button to change a user's role.": "Clicca sul pulsante del ruolo utente per modificare il ruolo di un utente.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clone", "Close": "Chiudi", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reimposta archivio vettoriale", "Response AutoCopy to Clipboard": "Copia automatica della risposta negli appunti", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Ruolo", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 840dc7760..9c0286f38 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "ドキュメントを選択するにはここをクリックしてください。", "click here.": "ここをクリックしてください。", "Click on the user role button to change a user's role.": "ユーザーの役割を変更するには、ユーザー役割ボタンをクリックしてください。", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "クローン", "Close": "閉じる", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ベクトルストレージをリセット", "Response AutoCopy to Clipboard": "クリップボードへの応答の自動コピー", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "役割", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 4edadd254..d0cc29b7a 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "დოკუმენტების ასარჩევად, დააკლიკე აქ", "click here.": "დააკლიკე აქ", "Click on the user role button to change a user's role.": "დააკლიკეთ მომხმარებლის როლის ღილაკს რომ შეცვალოთ მომხმარების როლი", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "კლონი", "Close": "დახურვა", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ვექტორული მეხსიერების გადატვირთვა", "Response AutoCopy to Clipboard": "პასუხის ავტომატური კოპირება ბუფერში", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "როლი", "Rosé Pine": "ვარდისფერი ფიჭვის ხე", "Rosé Pine Dawn": "ვარდისფერი ფიჭვის გარიჟრაჟი", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index f2e9d8ae0..616841a34 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "문서를 선택하려면 여기를 클릭하세요.", "click here.": "여기를 클릭하세요.", "Click on the user role button to change a user's role.": "사용자 역할 버튼을 클릭하여 사용자의 역할을 변경하세요.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "복제", "Close": "닫기", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "업로드 디렉토리 초기화", "Reset Vector Storage": "벡터 스토리지 초기화", "Response AutoCopy to Clipboard": "응답을 클립보드에 자동 복사", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "역할", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index a91ef0fb6..ba2dbe71a 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Spauskite čia norėdami pasirinkti dokumentus.", "click here.": "paspauskite čia.", "Click on the user role button to change a user's role.": "Paspauskite ant naudotojo rolės mygtuko tam, kad pakeisti naudotojo rolę.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "Uždaryti", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reinicializuoti vektorių atmintį", "Response AutoCopy to Clipboard": "Automatiškai nukopijuoti atsakymą", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rolė", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 39a40ee74..7f252d01a 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Klikk her for å velge dokumenter.", "click here.": "klikk her.", "Click on the user role button to change a user's role.": "Klikk på brukerrolle-knappen for å endre en brukers rolle.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Lukk", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Tilbakestill vektorlagring", "Response AutoCopy to Clipboard": "Respons auto-kopi til utklippstavle", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rolle", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index c4fe663cf..7452486a3 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Klik hier om documenten te selecteren", "click here.": "klik hier.", "Click on the user role button to change a user's role.": "Klik op de gebruikersrol knop om de rol van een gebruiker te wijzigen.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Kloon", "Close": "Sluiten", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Reset Vector Opslag", "Response AutoCopy to Clipboard": "Antwoord Automatisch Kopiëren naar Klembord", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index 83a953e8e..df68fd93e 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "ਡਾਕੂਮੈਂਟ ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।", "click here.": "ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।", "Click on the user role button to change a user's role.": "ਉਪਭੋਗਤਾ ਦੀ ਭੂਮਿਕਾ ਬਦਲਣ ਲਈ ਉਪਭੋਗਤਾ ਭੂਮਿਕਾ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "ਕਲੋਨ", "Close": "ਬੰਦ ਕਰੋ", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "ਵੈਕਟਰ ਸਟੋਰੇਜ ਨੂੰ ਰੀਸੈਟ ਕਰੋ", "Response AutoCopy to Clipboard": "ਜਵਾਬ ਆਟੋ ਕਾਪੀ ਕਲਿੱਪਬੋਰਡ 'ਤੇ", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "ਭੂਮਿਕਾ", "Rosé Pine": "ਰੋਜ਼ ਪਾਈਨ", "Rosé Pine Dawn": "ਰੋਜ਼ ਪਾਈਨ ਡਾਨ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index bf1030c5a..f129c4947 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Kliknij tutaj, aby wybrać dokumenty.", "click here.": "kliknij tutaj.", "Click on the user role button to change a user's role.": "Kliknij przycisk roli użytkownika, aby zmienić rolę użytkownika.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Zamknij", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Resetuj przechowywanie wektorów", "Response AutoCopy to Clipboard": "Automatyczne kopiowanie odpowiedzi do schowka", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rola", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 8c87c70cb..edd8d7ae0 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Clique aqui para selecionar documentos.", "click here.": "clique aqui.", "Click on the user role button to change a user's role.": "Clique no botão de função do usuário para alterar a função de um usuário.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clone", "Close": "Fechar", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Redefinir Armazenamento de Vetor", "Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Função", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index c05e13cbe..1ef6697c6 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Clique aqui para selecionar documentos.", "click here.": "clique aqui.", "Click on the user role button to change a user's role.": "Clique no botão de função do utilizador para alterar a função de um utilizador.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Clonar", "Close": "Fechar", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "Limpar Pasta de Carregamento", "Reset Vector Storage": "Redefinir Armazenamento de Vetor", "Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Função", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 93c111930..f9bbf2c4a 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Нажмите здесь чтобы выберите документы.", "click here.": "нажмите здесь.", "Click on the user role button to change a user's role.": "Нажмите кнопку роли пользователя чтобы изменить роль пользователя.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клон", "Close": "Закрывать", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Сбросить векторное хранилище", "Response AutoCopy to Clipboard": "Автоматическое копирование ответа в буфер обмена", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Роль", "Rosé Pine": "Розовое сосновое дерево", "Rosé Pine Dawn": "Розовое сосновое дерево рассвет", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index f775ce0a0..bd48bd270 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Кликните овде да изаберете документе.", "click here.": "кликните овде.", "Click on the user role button to change a user's role.": "Кликните на дугме за улогу корисника да промените улогу корисника.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Клон", "Close": "Затвори", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Ресетуј складиште вектора", "Response AutoCopy to Clipboard": "Самостално копирање одговора у оставу", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Улога", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 87f57635f..e9706e1c0 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Klicka här för att välja dokument.", "click here.": "klicka här.", "Click on the user role button to change a user's role.": "Klicka på knappen för användarroll för att ändra en användares roll.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Stäng", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "Återställ uppladdningskatalog", "Reset Vector Storage": "Återställ vektorlager", "Response AutoCopy to Clipboard": "Svara AutoCopy till urklipp", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Roll", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index 26ca39bef..2227ebe91 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "", "click here.": "", "Click on the user role button to change a user's role.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "", "Close": "", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "", "Rosé Pine": "", "Rosé Pine Dawn": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index 4223b28e7..f1b927e0c 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Belgeleri seçmek için buraya tıklayın.", "click here.": "buraya tıklayın.", "Click on the user role button to change a user's role.": "Bir kullanıcının rolünü değiştirmek için kullanıcı rolü düğmesine tıklayın.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Klon", "Close": "Kapat", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "", "Reset Vector Storage": "Vektör Depolamayı Sıfırla", "Response AutoCopy to Clipboard": "Yanıtı Panoya Otomatik Kopyala", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index ba09bd20a..38d346c4b 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Натисніть тут, щоб обрати документи.", "click here.": "клацніть тут.", "Click on the user role button to change a user's role.": "Натисніть кнопку ролі користувача, щоб змінити роль користувача.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Відмовлено в дозволі на запис до буфера обміну. Будь ласка, перевірте налаштування вашого браузера, щоб надати необхідний доступ.", "Clone": "Клонувати", "Close": "Закрити", "Code formatted successfully": "Код успішно відформатовано", @@ -445,6 +446,7 @@ "Reset Upload Directory": "Скинути каталог завантажень", "Reset Vector Storage": "Скинути векторне сховище", "Response AutoCopy to Clipboard": "Автокопіювання відповіді в буфер обміну", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Сповіщення про відповіді не можуть бути активовані, оскільки вам було відмовлено в доступі до веб-сайту. Будь ласка, відвідайте налаштування вашого браузера, щоб надати необхідний доступ.", "Role": "Роль", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 33848b478..1245f7318 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "Bấm vào đây để chọn tài liệu.", "click here.": "bấm vào đây.", "Click on the user role button to change a user's role.": "Bấm vào nút trong cột VAI TRÒ để thay đổi quyền của người sử dụng.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "Nhân bản", "Close": "Đóng", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "Xóa toàn bộ thư mục Upload", "Reset Vector Storage": "Cài đặt lại Vector Storage", "Response AutoCopy to Clipboard": "Tự động Sao chép Phản hồi vào clipboard", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "Vai trò", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index c55819f13..59104d9de 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "单击选择文档", "click here.": "点击这里。", "Click on the user role button to change a user's role.": "点击角色前方的组别按钮以更改用户所属权限组。", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "复制", "Close": "关闭", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "重置上传目录", "Reset Vector Storage": "重置向量存储", "Response AutoCopy to Clipboard": "自动复制回复到剪贴板", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "权限组", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 72ca5c791..86a7eca86 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -107,6 +107,7 @@ "Click here to select documents.": "點選這裡選擇文件。", "click here.": "點選這裡。", "Click on the user role button to change a user's role.": "點選使用者角色按鈕以更改使用者的角色。", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", "Clone": "複製", "Close": "關閉", "Code formatted successfully": "", @@ -445,6 +446,7 @@ "Reset Upload Directory": "重設上傳目錄", "Reset Vector Storage": "重設向量儲存空間", "Response AutoCopy to Clipboard": "自動複製回答到剪貼簿", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", "Role": "角色", "Rosé Pine": "玫瑰松", "Rosé Pine Dawn": "黎明玫瑰松", From fbbffc43865e27d4ec145b7f40a5c1b200fc9d09 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Mon, 24 Jun 2024 19:04:31 +0200 Subject: [PATCH 236/287] Add key adn translation --- src/lib/components/admin/Settings/Audio.svelte | 2 +- src/lib/components/chat/Messages/ResponseMessage.svelte | 2 +- src/lib/i18n/locales/ar-BH/translation.json | 2 ++ src/lib/i18n/locales/bg-BG/translation.json | 2 ++ src/lib/i18n/locales/bn-BD/translation.json | 2 ++ src/lib/i18n/locales/ca-ES/translation.json | 2 ++ src/lib/i18n/locales/ceb-PH/translation.json | 2 ++ src/lib/i18n/locales/de-DE/translation.json | 2 ++ src/lib/i18n/locales/dg-DG/translation.json | 2 ++ src/lib/i18n/locales/en-GB/translation.json | 2 ++ src/lib/i18n/locales/en-US/translation.json | 2 ++ src/lib/i18n/locales/es-ES/translation.json | 2 ++ src/lib/i18n/locales/fa-IR/translation.json | 2 ++ src/lib/i18n/locales/fi-FI/translation.json | 2 ++ src/lib/i18n/locales/fr-CA/translation.json | 2 ++ src/lib/i18n/locales/fr-FR/translation.json | 2 ++ src/lib/i18n/locales/he-IL/translation.json | 2 ++ src/lib/i18n/locales/hi-IN/translation.json | 2 ++ src/lib/i18n/locales/hr-HR/translation.json | 2 ++ src/lib/i18n/locales/it-IT/translation.json | 2 ++ src/lib/i18n/locales/ja-JP/translation.json | 2 ++ src/lib/i18n/locales/ka-GE/translation.json | 2 ++ src/lib/i18n/locales/ko-KR/translation.json | 2 ++ src/lib/i18n/locales/lt-LT/translation.json | 2 ++ src/lib/i18n/locales/nb-NO/translation.json | 2 ++ src/lib/i18n/locales/nl-NL/translation.json | 2 ++ src/lib/i18n/locales/pa-IN/translation.json | 2 ++ src/lib/i18n/locales/pl-PL/translation.json | 2 ++ src/lib/i18n/locales/pt-BR/translation.json | 2 ++ src/lib/i18n/locales/pt-PT/translation.json | 2 ++ src/lib/i18n/locales/ru-RU/translation.json | 2 ++ src/lib/i18n/locales/sr-RS/translation.json | 2 ++ src/lib/i18n/locales/sv-SE/translation.json | 2 ++ src/lib/i18n/locales/tk-TW/translation.json | 2 ++ src/lib/i18n/locales/tr-TR/translation.json | 2 ++ src/lib/i18n/locales/uk-UA/translation.json | 2 ++ src/lib/i18n/locales/vi-VN/translation.json | 2 ++ src/lib/i18n/locales/zh-CN/translation.json | 2 ++ src/lib/i18n/locales/zh-TW/translation.json | 2 ++ 39 files changed, 76 insertions(+), 2 deletions(-) diff --git a/src/lib/components/admin/Settings/Audio.svelte b/src/lib/components/admin/Settings/Audio.svelte index d38402aa0..1ca97bff8 100644 --- a/src/lib/components/admin/Settings/Audio.svelte +++ b/src/lib/components/admin/Settings/Audio.svelte @@ -72,7 +72,7 @@ }); if (res) { - toast.success('Audio settings updated successfully'); + toast.success($i18n.t('Audio settings updated successfully')); config.set(await getBackendConfig()); } diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index b1c91edcc..a006fd1ca 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -305,7 +305,7 @@ }, 100); } } else { - toast.error('No content to speak'); + toast.error($i18n.t('No content to speak')); } } }; diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 7cd0a076e..c4d314e1b 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -62,6 +62,7 @@ "Attach file": "أرفق ملف", "Attention to detail": "انتبه للتفاصيل", "Audio": "صوتي", + "Audio settings updated successfully": "", "August": "أغسطس", "Auto-playback response": "استجابة التشغيل التلقائي", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 الرابط الرئيسي", @@ -360,6 +361,7 @@ "Name your model": "قم بتسمية النموذج الخاص بك", "New Chat": "دردشة جديدة", "New Password": "كلمة المرور الجديدة", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "لا توجد نتايج", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 1bcadcc2d..f0215abc2 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -62,6 +62,7 @@ "Attach file": "Прикачване на файл", "Attention to detail": "Внимание към детайлите", "Audio": "Аудио", + "Audio settings updated successfully": "", "August": "Август", "Auto-playback response": "Аувтоматично възпроизвеждане на Отговора", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Базов URL", @@ -360,6 +361,7 @@ "Name your model": "Дайте име на вашия модел", "New Chat": "Нов чат", "New Password": "Нова парола", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Няма намерени резултати", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 7ed34bd98..595f8429a 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -62,6 +62,7 @@ "Attach file": "ফাইল যুক্ত করুন", "Attention to detail": "বিস্তারিত বিশেষতা", "Audio": "অডিও", + "Audio settings updated successfully": "", "August": "আগস্ট", "Auto-playback response": "রেসপন্স অটো-প্লেব্যাক", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 বেজ ইউআরএল", @@ -360,6 +361,7 @@ "Name your model": "আপনার মডেলের নাম দিন", "New Chat": "নতুন চ্যাট", "New Password": "নতুন পাসওয়ার্ড", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "কোন ফলাফল পাওয়া যায়নি", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 746ca43e5..3221e9484 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -62,6 +62,7 @@ "Attach file": "Adjuntar arxiu", "Attention to detail": "Atenció al detall", "Audio": "Àudio", + "Audio settings updated successfully": "", "August": "Agost", "Auto-playback response": "Reproduir la resposta automàticament", "AUTOMATIC1111 Base URL": "URL Base d'AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Posa un nom al teu model", "New Chat": "Nou xat", "New Password": "Nova contrasenya", + "No content to speak": "", "No documents found": "No s'han trobat documents", "No file selected": "", "No results found": "No s'han trobat resultats", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 9d5ae4b1a..e6b666241 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -62,6 +62,7 @@ "Attach file": "Ilakip ang usa ka file", "Attention to detail": "Pagtagad sa mga detalye", "Audio": "Audio", + "Audio settings updated successfully": "", "August": "", "Auto-playback response": "Autoplay nga tubag", "AUTOMATIC1111 Base URL": "Base URL AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "", "New Chat": "Bag-ong diskusyon", "New Password": "Bag-ong Password", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index 1e6546d2d..b897f2986 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -62,6 +62,7 @@ "Attach file": "Datei anhängen", "Attention to detail": "Auge fürs Detail", "Audio": "Audio", + "Audio settings updated successfully": "", "August": "August", "Auto-playback response": "Automatische Wiedergabe der Antwort", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Basis URL", @@ -360,6 +361,7 @@ "Name your model": "Benennen Sie Ihr Modell", "New Chat": "Neuer Chat", "New Password": "Neues Passwort", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Keine Ergebnisse gefunden", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index df1a1e7a6..795703250 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -62,6 +62,7 @@ "Attach file": "Attach file", "Attention to detail": "", "Audio": "Audio", + "Audio settings updated successfully": "", "August": "", "Auto-playback response": "Auto-playback response", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL", @@ -360,6 +361,7 @@ "Name your model": "", "New Chat": "New Bark", "New Password": "New Barkword", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 2227ebe91..7950868b1 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -62,6 +62,7 @@ "Attach file": "", "Attention to detail": "", "Audio": "", + "Audio settings updated successfully": "", "August": "", "Auto-playback response": "", "AUTOMATIC1111 Base URL": "", @@ -360,6 +361,7 @@ "Name your model": "", "New Chat": "", "New Password": "", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 2227ebe91..7950868b1 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -62,6 +62,7 @@ "Attach file": "", "Attention to detail": "", "Audio": "", + "Audio settings updated successfully": "", "August": "", "Auto-playback response": "", "AUTOMATIC1111 Base URL": "", @@ -360,6 +361,7 @@ "Name your model": "", "New Chat": "", "New Password": "", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 6a4083fe9..375a14d21 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -62,6 +62,7 @@ "Attach file": "Adjuntar archivo", "Attention to detail": "Detalle preciso", "Audio": "Audio", + "Audio settings updated successfully": "", "August": "Agosto", "Auto-playback response": "Respuesta de reproducción automática", "AUTOMATIC1111 Base URL": "Dirección URL de AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Asigne un nombre a su modelo", "New Chat": "Nuevo Chat", "New Password": "Nueva Contraseña", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "No se han encontrado resultados", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 336d0f31a..61f47373e 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -62,6 +62,7 @@ "Attach file": "پیوست فایل", "Attention to detail": "دقیق", "Audio": "صدا", + "Audio settings updated successfully": "", "August": "آگوست", "Auto-playback response": "پخش خودکار پاسخ ", "AUTOMATIC1111 Base URL": "پایه URL AUTOMATIC1111 ", @@ -360,6 +361,7 @@ "Name your model": "نام مدل خود را", "New Chat": "گپ جدید", "New Password": "رمز عبور جدید", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "نتیجه\u200cای یافت نشد", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index d88438721..15689b0b2 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -62,6 +62,7 @@ "Attach file": "Liitä tiedosto", "Attention to detail": "Huomio yksityiskohtiin", "Audio": "Ääni", + "Audio settings updated successfully": "", "August": "elokuu", "Auto-playback response": "Soita vastaus automaattisesti", "AUTOMATIC1111 Base URL": "AUTOMATIC1111-perus-URL", @@ -360,6 +361,7 @@ "Name your model": "Mallin nimeäminen", "New Chat": "Uusi keskustelu", "New Password": "Uusi salasana", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Ei tuloksia", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index d7073e212..6a3306f16 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -62,6 +62,7 @@ "Attach file": "Joindre un fichier", "Attention to detail": "Attention aux détails", "Audio": "Audio", + "Audio settings updated successfully": "", "August": "Août", "Auto-playback response": "Réponse en lecture automatique", "AUTOMATIC1111 Base URL": "URL de base AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Nommez votre modèle", "New Chat": "Nouvelle discussion", "New Password": "Nouveau mot de passe", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Aucun résultat trouvé", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 9d66c0aff..2b7b7d8a3 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -62,6 +62,7 @@ "Attach file": "Joindre un fichier", "Attention to detail": "Attention aux détails", "Audio": "Audio", + "Audio settings updated successfully": "", "August": "Août", "Auto-playback response": "Réponse en lecture automatique", "AUTOMATIC1111 Base URL": "URL de base AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Nommez votre modèle", "New Chat": "Nouveau chat", "New Password": "Nouveau mot de passe", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Aucun résultat", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index 078bc787d..97998880e 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -62,6 +62,7 @@ "Attach file": "צרף קובץ", "Attention to detail": "תשומת לב לפרטים", "Audio": "אודיו", + "Audio settings updated successfully": "", "August": "אוגוסט", "Auto-playback response": "תגובת השמעה אוטומטית", "AUTOMATIC1111 Base URL": "כתובת URL בסיסית של AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "תן שם לדגם שלך", "New Chat": "צ'אט חדש", "New Password": "סיסמה חדשה", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "לא נמצאו תוצאות", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 1d8c57af5..3040a0890 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -62,6 +62,7 @@ "Attach file": "फ़ाइल atta", "Attention to detail": "विस्तार पर ध्यान", "Audio": "ऑडियो", + "Audio settings updated successfully": "", "August": "अगस्त", "Auto-playback response": "ऑटो-प्लेबैक प्रतिक्रिया", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 बेस यूआरएल", @@ -360,6 +361,7 @@ "Name your model": "अपने मॉडल को नाम दें", "New Chat": "नई चैट", "New Password": "नया पासवर्ड", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "कोई परिणाम नहीं मिला", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 0da584f2d..529d80e5c 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -62,6 +62,7 @@ "Attach file": "Priloži datoteku", "Attention to detail": "Pažnja na detalje", "Audio": "Audio", + "Audio settings updated successfully": "", "August": "Kolovoz", "Auto-playback response": "Automatska reprodukcija odgovora", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 osnovni URL", @@ -360,6 +361,7 @@ "Name your model": "Dodijelite naziv modelu", "New Chat": "Novi razgovor", "New Password": "Nova lozinka", + "No content to speak": "", "No documents found": "Dokumenti nisu pronađeni", "No file selected": "", "No results found": "Nema rezultata", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 1ca9e1f31..ee9813386 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -62,6 +62,7 @@ "Attach file": "Allega file", "Attention to detail": "Attenzione ai dettagli", "Audio": "Audio", + "Audio settings updated successfully": "", "August": "Agosto", "Auto-playback response": "Riproduzione automatica della risposta", "AUTOMATIC1111 Base URL": "URL base AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Assegna un nome al tuo modello", "New Chat": "Nuova chat", "New Password": "Nuova password", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Nessun risultato trovato", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 9c0286f38..4c98186cc 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -62,6 +62,7 @@ "Attach file": "ファイルを添付する", "Attention to detail": "詳細に注意する", "Audio": "オーディオ", + "Audio settings updated successfully": "", "August": "8月", "Auto-playback response": "応答の自動再生", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 ベース URL", @@ -360,6 +361,7 @@ "Name your model": "モデルに名前を付ける", "New Chat": "新しいチャット", "New Password": "新しいパスワード", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "結果が見つかりません", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index d0cc29b7a..5a1087fd7 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -62,6 +62,7 @@ "Attach file": "ფაილის ჩაწერა", "Attention to detail": "დეტალური მიმართვა", "Audio": "ხმოვანი", + "Audio settings updated successfully": "", "August": "აგვისტო", "Auto-playback response": "ავტომატური დაკვრის პასუხი", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 საბაზისო მისამართი", @@ -360,6 +361,7 @@ "Name your model": "დაასახელეთ თქვენი მოდელი", "New Chat": "ახალი მიმოწერა", "New Password": "ახალი პაროლი", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "ჩვენ ვერ პოულობით ნაპოვნი ჩაწერები", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 616841a34..44e86a9e5 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -62,6 +62,7 @@ "Attach file": "파일 첨부", "Attention to detail": "세부 사항에 대한 주의", "Audio": "오디오", + "Audio settings updated successfully": "", "August": "8월", "Auto-playback response": "응답 자동 재생", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 기본 URL", @@ -360,6 +361,7 @@ "Name your model": "모델 이름 지정", "New Chat": "새 채팅", "New Password": "새 비밀번호", + "No content to speak": "", "No documents found": "문서 없음", "No file selected": "", "No results found": "결과 없음", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index ba2dbe71a..aefd70d75 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -62,6 +62,7 @@ "Attach file": "Pridėti failą", "Attention to detail": "Dėmesys detalėms", "Audio": "Audio įrašas", + "Audio settings updated successfully": "", "August": "Rugpjūtis", "Auto-playback response": "Automatinis atsakymo skaitymas", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 bazės nuoroda", @@ -360,6 +361,7 @@ "Name your model": "", "New Chat": "Naujas pokalbis", "New Password": "Naujas slaptažodis", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Rezultatų nerasta", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 7f252d01a..4b0154266 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -62,6 +62,7 @@ "Attach file": "Legg ved fil", "Attention to detail": "Oppmerksomhet på detaljer", "Audio": "Lyd", + "Audio settings updated successfully": "", "August": "August", "Auto-playback response": "Automatisk avspilling av svar", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Grunn-URL", @@ -360,6 +361,7 @@ "Name your model": "Gi modellen din et navn", "New Chat": "Ny chat", "New Password": "Nytt passord", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Ingen resultater funnet", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 7452486a3..14c39296b 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -62,6 +62,7 @@ "Attach file": "Voeg een bestand toe", "Attention to detail": "Attention to detail", "Audio": "Audio", + "Audio settings updated successfully": "", "August": "Augustus", "Auto-playback response": "Automatisch afspelen van antwoord", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL", @@ -360,6 +361,7 @@ "Name your model": "Geef uw model een naam", "New Chat": "Nieuwe Chat", "New Password": "Nieuw Wachtwoord", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Geen resultaten gevonden", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index df68fd93e..15373b616 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -62,6 +62,7 @@ "Attach file": "ਫਾਈਲ ਜੋੜੋ", "Attention to detail": "ਵੇਰਵੇ 'ਤੇ ਧਿਆਨ", "Audio": "ਆਡੀਓ", + "Audio settings updated successfully": "", "August": "ਅਗਸਤ", "Auto-playback response": "ਆਟੋ-ਪਲੇਬੈਕ ਜਵਾਬ", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 ਬੇਸ URL", @@ -360,6 +361,7 @@ "Name your model": "ਆਪਣੇ ਮਾਡਲ ਦਾ ਨਾਮ ਦੱਸੋ", "New Chat": "ਨਵੀਂ ਗੱਲਬਾਤ", "New Password": "ਨਵਾਂ ਪਾਸਵਰਡ", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index f129c4947..544cb4533 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -62,6 +62,7 @@ "Attach file": "Dołącz plik", "Attention to detail": "Dbałość o szczegóły", "Audio": "Dźwięk", + "Audio settings updated successfully": "", "August": "Sierpień", "Auto-playback response": "Odtwarzanie automatyczne odpowiedzi", "AUTOMATIC1111 Base URL": "Podstawowy adres URL AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Nazwij swój model", "New Chat": "Nowy czat", "New Password": "Nowe hasło", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Nie znaleziono rezultatów", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index edd8d7ae0..0b6ba1e2f 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -62,6 +62,7 @@ "Attach file": "Anexar arquivo", "Attention to detail": "Detalhado", "Audio": "Áudio", + "Audio settings updated successfully": "", "August": "Agosto", "Auto-playback response": "Reprodução automática da resposta", "AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Nomeie seu modelo", "New Chat": "Novo Bate-papo", "New Password": "Nova Senha", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Nenhum resultado encontrado", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 1ef6697c6..a4e81a3a2 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -62,6 +62,7 @@ "Attach file": "Anexar ficheiro", "Attention to detail": "Detalhado", "Audio": "Áudio", + "Audio settings updated successfully": "", "August": "Agosto", "Auto-playback response": "Reprodução automática da resposta", "AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Atribua um nome ao seu modelo", "New Chat": "Nova Conversa", "New Password": "Nova Senha", + "No content to speak": "", "No documents found": "Não foram encontrados documentos", "No file selected": "", "No results found": "Não foram encontrados resultados", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index f9bbf2c4a..1a2b4a33f 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -62,6 +62,7 @@ "Attach file": "Прикрепить файл", "Attention to detail": "детализированный", "Audio": "Аудио", + "Audio settings updated successfully": "", "August": "Август", "Auto-playback response": "Автоматическое воспроизведение ответа", "AUTOMATIC1111 Base URL": "Базовый адрес URL AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Присвойте модели имя", "New Chat": "Новый чат", "New Password": "Новый пароль", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Результатов не найдено", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index bd48bd270..ab0e4b1c5 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -62,6 +62,7 @@ "Attach file": "Приложи датотеку", "Attention to detail": "Пажња на детаље", "Audio": "Звук", + "Audio settings updated successfully": "", "August": "Август", "Auto-playback response": "Самостално пуштање одговора", "AUTOMATIC1111 Base URL": "Основна адреса за AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Наведи свој модел", "New Chat": "Ново ћаскање", "New Password": "Нова лозинка", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Нема резултата", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index e9706e1c0..87090ce21 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -62,6 +62,7 @@ "Attach file": "Bifoga fil", "Attention to detail": "Detaljerad uppmärksamhet", "Audio": "Ljud", + "Audio settings updated successfully": "", "August": "augusti", "Auto-playback response": "Automatisk uppspelning", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 bas-URL", @@ -360,6 +361,7 @@ "Name your model": "Namnge din modell", "New Chat": "Ny chatt", "New Password": "Nytt lösenord", + "No content to speak": "", "No documents found": "Inga dokument hittades", "No file selected": "", "No results found": "Inga resultat hittades", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index 2227ebe91..7950868b1 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -62,6 +62,7 @@ "Attach file": "", "Attention to detail": "", "Audio": "", + "Audio settings updated successfully": "", "August": "", "Auto-playback response": "", "AUTOMATIC1111 Base URL": "", @@ -360,6 +361,7 @@ "Name your model": "", "New Chat": "", "New Password": "", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index f1b927e0c..3eef433a2 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -62,6 +62,7 @@ "Attach file": "Dosya ekle", "Attention to detail": "Ayrıntılara dikkat", "Audio": "Ses", + "Audio settings updated successfully": "", "August": "Ağustos", "Auto-playback response": "Yanıtı otomatik oynatma", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Temel URL", @@ -360,6 +361,7 @@ "Name your model": "Modelinizi Adlandırın", "New Chat": "Yeni Sohbet", "New Password": "Yeni Parola", + "No content to speak": "", "No documents found": "", "No file selected": "", "No results found": "Sonuç bulunamadı", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 38d346c4b..5609544e9 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -62,6 +62,7 @@ "Attach file": "Прикріпити файл", "Attention to detail": "Увага до деталей", "Audio": "Аудіо", + "Audio settings updated successfully": "Налаштування звуку успішно оновлено", "August": "Серпень", "Auto-playback response": "Автоматичне відтворення відповіді", "AUTOMATIC1111 Base URL": "URL-адреса AUTOMATIC1111", @@ -360,6 +361,7 @@ "Name your model": "Назвіть свою модель", "New Chat": "Новий чат", "New Password": "Новий пароль", + "No content to speak": "Нема чого говорити", "No documents found": "Документів не знайдено", "No file selected": "Файл не обрано", "No results found": "Не знайдено жодного результату", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 1245f7318..46ed1f452 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -62,6 +62,7 @@ "Attach file": "Đính kèm file", "Attention to detail": "Có sự chú ý đến chi tiết của vấn đề", "Audio": "Âm thanh", + "Audio settings updated successfully": "", "August": "Tháng 8", "Auto-playback response": "Tự động phát lại phản hồi (Auto-playback)", "AUTOMATIC1111 Base URL": "Đường dẫn kết nối tới AUTOMATIC1111 (Base URL)", @@ -360,6 +361,7 @@ "Name your model": "Tên model", "New Chat": "Tạo chat mới", "New Password": "Mật khẩu mới", + "No content to speak": "", "No documents found": "Không tìm thấy tài liệu nào", "No file selected": "", "No results found": "Không tìm thấy kết quả", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 59104d9de..e1843a767 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -62,6 +62,7 @@ "Attach file": "添加文件", "Attention to detail": "注重细节", "Audio": "语音", + "Audio settings updated successfully": "", "August": "八月", "Auto-playback response": "自动念出回复内容", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 基础地址", @@ -360,6 +361,7 @@ "Name your model": "为您的模型命名", "New Chat": "新对话", "New Password": "新密码", + "No content to speak": "", "No documents found": "未找到文档", "No file selected": "", "No results found": "未找到结果", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 86a7eca86..a06a49669 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -62,6 +62,7 @@ "Attach file": "附加檔案", "Attention to detail": "細節精確", "Audio": "音訊", + "Audio settings updated successfully": "", "August": "8 月", "Auto-playback response": "自動播放回答", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 基本 URL", @@ -360,6 +361,7 @@ "Name your model": "請輸入模型名稱", "New Chat": "新增聊天", "New Password": "新密碼", + "No content to speak": "", "No documents found": "找不到文件", "No file selected": "", "No results found": "沒有找到結果", From 6bad71adcaf32187e790bc2d96599d67eb4050b8 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 10:37:57 -0700 Subject: [PATCH 237/287] fix --- backend/apps/webui/main.py | 7 +++++++ backend/apps/webui/utils.py | 13 +++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index f092da7ad..8255cd393 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -116,6 +116,13 @@ async def get_pipe_models(): else: function_module = app.state.FUNCTIONS[pipe.id] + if hasattr(function_module, "valves") and hasattr(function_module, "Valves"): + print(f"Getting valves for {pipe.id}") + 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 if hasattr(function_module, "type"): if function_module.type == "manifold": diff --git a/backend/apps/webui/utils.py b/backend/apps/webui/utils.py index 8bcda539e..545120835 100644 --- a/backend/apps/webui/utils.py +++ b/backend/apps/webui/utils.py @@ -16,12 +16,16 @@ def extract_frontmatter(file_path): try: with open(file_path, "r", encoding="utf-8") as file: + first_line = file.readline() + if first_line.strip() != '"""': + # The file doesn't start with triple quotes + return {} + + frontmatter_started = True + for line in file: if '"""' in line: - if not frontmatter_started: - frontmatter_started = True - continue # skip the line with the opening triple quotes - else: + if frontmatter_started: frontmatter_ended = True break @@ -30,6 +34,7 @@ def extract_frontmatter(file_path): if match: key, value = match.groups() frontmatter[key.strip()] = value.strip() + except FileNotFoundError: print(f"Error: The file {file_path} does not exist.") return {} From e0e9fcaa24397900aafb5366fdca1d5f3580f5f9 Mon Sep 17 00:00:00 2001 From: SimonOriginal Date: Mon, 24 Jun 2024 19:38:26 +0200 Subject: [PATCH 238/287] Add keys i18n --- src/lib/i18n/locales/ar-BH/translation.json | 6 ++++++ src/lib/i18n/locales/bg-BG/translation.json | 6 ++++++ src/lib/i18n/locales/bn-BD/translation.json | 6 ++++++ src/lib/i18n/locales/ca-ES/translation.json | 6 ++++++ src/lib/i18n/locales/ceb-PH/translation.json | 6 ++++++ src/lib/i18n/locales/de-DE/translation.json | 6 ++++++ src/lib/i18n/locales/dg-DG/translation.json | 6 ++++++ src/lib/i18n/locales/en-GB/translation.json | 6 ++++++ src/lib/i18n/locales/en-US/translation.json | 6 ++++++ src/lib/i18n/locales/es-ES/translation.json | 6 ++++++ src/lib/i18n/locales/fa-IR/translation.json | 6 ++++++ src/lib/i18n/locales/fi-FI/translation.json | 6 ++++++ src/lib/i18n/locales/fr-CA/translation.json | 6 ++++++ src/lib/i18n/locales/fr-FR/translation.json | 6 ++++++ src/lib/i18n/locales/he-IL/translation.json | 6 ++++++ src/lib/i18n/locales/hi-IN/translation.json | 6 ++++++ src/lib/i18n/locales/hr-HR/translation.json | 6 ++++++ src/lib/i18n/locales/it-IT/translation.json | 6 ++++++ src/lib/i18n/locales/ja-JP/translation.json | 6 ++++++ src/lib/i18n/locales/ka-GE/translation.json | 6 ++++++ src/lib/i18n/locales/ko-KR/translation.json | 6 ++++++ src/lib/i18n/locales/lt-LT/translation.json | 6 ++++++ src/lib/i18n/locales/nb-NO/translation.json | 6 ++++++ src/lib/i18n/locales/nl-NL/translation.json | 6 ++++++ src/lib/i18n/locales/pa-IN/translation.json | 6 ++++++ src/lib/i18n/locales/pl-PL/translation.json | 6 ++++++ src/lib/i18n/locales/pt-BR/translation.json | 6 ++++++ src/lib/i18n/locales/pt-PT/translation.json | 6 ++++++ src/lib/i18n/locales/ru-RU/translation.json | 6 ++++++ src/lib/i18n/locales/sr-RS/translation.json | 6 ++++++ src/lib/i18n/locales/sv-SE/translation.json | 6 ++++++ src/lib/i18n/locales/tk-TW/translation.json | 6 ++++++ src/lib/i18n/locales/tr-TR/translation.json | 6 ++++++ src/lib/i18n/locales/uk-UA/translation.json | 6 ++++++ src/lib/i18n/locales/vi-VN/translation.json | 6 ++++++ src/lib/i18n/locales/zh-CN/translation.json | 6 ++++++ src/lib/i18n/locales/zh-TW/translation.json | 6 ++++++ src/routes/(app)/workspace/functions/create/+page.svelte | 2 +- src/routes/(app)/workspace/functions/edit/+page.svelte | 2 +- src/routes/(app)/workspace/models/create/+page.svelte | 2 +- src/routes/(app)/workspace/models/edit/+page.svelte | 2 +- src/routes/(app)/workspace/tools/create/+page.svelte | 2 +- src/routes/(app)/workspace/tools/edit/+page.svelte | 2 +- 43 files changed, 228 insertions(+), 6 deletions(-) diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index c4d314e1b..fdb43d68a 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:", "Frequency Penalty": "عقوبة التردد", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "عام", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "لم يتم العثور على النموذج {{modelId}}.", "Model {{modelName}} is not vision capable": "نموذج {{modelName}} غير قادر على الرؤية", "Model {{name}} is now {{status}}": "نموذج {{name}} هو الآن {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "تم اكتشاف مسار نظام الملفات النموذجي. الاسم المختصر للنموذج مطلوب للتحديث، ولا يمكن الاستمرار.", "Model ID": "رقم الموديل", "Model not selected": "لم تختار موديل", "Model Params": "معلمات النموذج", + "Model updated successfully": "", "Model Whitelisting": "القائمة البيضاء للموديل", "Model(s) Whitelisted": "القائمة البيضاء الموديل", "Modelfile Content": "محتوى الملف النموذجي", @@ -580,8 +584,10 @@ "Toggle settings": "فتح وأغلاق الاعدادات", "Toggle sidebar": "فتح وأغلاق الشريط الجانبي", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index f0215abc2..fe7d7c4bd 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Форматирайте вашите променливи, като използвате квадратни скоби, както следва:", "Frequency Penalty": "Наказание за честота", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Основни", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Моделът {{modelId}} не е намерен", "Model {{modelName}} is not vision capable": "Моделът {{modelName}} не може да се вижда", "Model {{name}} is now {{status}}": "Моделът {{name}} сега е {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Открит е път до файловата система на модела. За актуализацията се изисква съкратено име на модела, не може да продължи.", "Model ID": "ИД на модел", "Model not selected": "Не е избран модел", "Model Params": "Модел Params", + "Model updated successfully": "", "Model Whitelisting": "Модел Whitelisting", "Model(s) Whitelisted": "Модели Whitelisted", "Modelfile Content": "Съдържание на модфайл", @@ -576,8 +580,10 @@ "Toggle settings": "Toggle settings", "Toggle sidebar": "Toggle sidebar", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 595f8429a..e964b5af9 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "আপনার ভেরিয়বলগুলো এভাবে স্কয়ার ব্রাকেটের মাধ্যমে সাজান", "Frequency Penalty": "ফ্রিকোয়েন্সি পেনাল্টি", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "সাধারণ", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "{{modelId}} মডেল পাওয়া যায়নি", "Model {{modelName}} is not vision capable": "মডেল {{modelName}} দৃষ্টি সক্ষম নয়", "Model {{name}} is now {{status}}": "মডেল {{name}} এখন {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "মডেল ফাইলসিস্টেম পাথ পাওয়া গেছে। আপডেটের জন্য মডেলের শর্টনেম আবশ্যক, এগিয়ে যাওয়া যাচ্ছে না।", "Model ID": "মডেল ID", "Model not selected": "মডেল নির্বাচন করা হয়নি", "Model Params": "মডেল প্যারাম", + "Model updated successfully": "", "Model Whitelisting": "মডেল হোয়াইটলিস্টিং", "Model(s) Whitelisted": "হোয়াইটলিস্টেড মডেল(সমূহ)", "Modelfile Content": "মডেলফাইল কনটেন্ট", @@ -576,8 +580,10 @@ "Toggle settings": "সেটিংস টোগল", "Toggle sidebar": "সাইডবার টোগল", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 3221e9484..64af65a6b 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -262,7 +262,9 @@ "Form": "Formulari", "Format your variables using square brackets like this:": "Formata les teves variables utilitzant claudàtors així:", "Frequency Penalty": "Penalització per freqüència", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "Funcions", "Functions imported successfully": "", "General": "General", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "No s'ha trobat el model {{modelId}}", "Model {{modelName}} is not vision capable": "El model {{modelName}} no és capaç de visió", "Model {{name}} is now {{status}}": "El model {{name}} ara és {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "S'ha detectat el camí del sistema de fitxers del model. És necessari un nom curt del model per actualitzar, no es pot continuar.", "Model ID": "Identificador del model", "Model not selected": "Model no seleccionat", "Model Params": "Paràmetres del model", + "Model updated successfully": "", "Model Whitelisting": "Llista blanca de models", "Model(s) Whitelisted": "Model(s) a la llista blanca", "Modelfile Content": "Contingut del Modelfile", @@ -577,8 +581,10 @@ "Toggle settings": "Alterna configuracions", "Toggle sidebar": "Alterna la barra lateral", "Tokens To Keep On Context Refresh (num_keep)": "Tokens a mantenir en l'actualització del context (num_keep)", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "Eines", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index e6b666241..645c6550f 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "I-format ang imong mga variable gamit ang square brackets sama niini:", "Frequency Penalty": "", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Heneral", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modelo {{modelId}} wala makit-an", "Model {{modelName}} is not vision capable": "", "Model {{name}} is now {{status}}": "", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "", "Model ID": "", "Model not selected": "Wala gipili ang modelo", "Model Params": "", + "Model updated successfully": "", "Model Whitelisting": "Whitelist sa modelo", "Model(s) Whitelisted": "Gi-whitelist nga (mga) modelo", "Modelfile Content": "Mga sulod sa template file", @@ -576,8 +580,10 @@ "Toggle settings": "I-toggle ang mga setting", "Toggle sidebar": "I-toggle ang sidebar", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Ibabaw nga P", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index b897f2986..4b22614bb 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatiere deine Variablen mit eckigen Klammern wie folgt:", "Frequency Penalty": "Frequenz-Strafe", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Allgemein", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modell {{modelId}} nicht gefunden", "Model {{modelName}} is not vision capable": "Das Modell {{modelName}} ist nicht sehfähig", "Model {{name}} is now {{status}}": "Modell {{name}} ist jetzt {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Modell-Dateisystempfad erkannt. Modellkurzname ist für das Update erforderlich, Fortsetzung nicht möglich.", "Model ID": "Modell-ID", "Model not selected": "Modell nicht ausgewählt", "Model Params": "Modell-Params", + "Model updated successfully": "", "Model Whitelisting": "Modell-Whitelisting", "Model(s) Whitelisted": "Modell(e) auf der Whitelist", "Modelfile Content": "Modelfile Content", @@ -576,8 +580,10 @@ "Toggle settings": "Einstellungen umschalten", "Toggle sidebar": "Seitenleiste umschalten", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 795703250..25e2375ea 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Format variables using square brackets like wow:", "Frequency Penalty": "", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Woweral", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Model {{modelId}} not found", "Model {{modelName}} is not vision capable": "", "Model {{name}} is now {{status}}": "", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Model filesystem bark detected. Model shortname is required for update, cannot continue.", "Model ID": "", "Model not selected": "Model not selected", "Model Params": "", + "Model updated successfully": "", "Model Whitelisting": "Wowdel Whitelisting", "Model(s) Whitelisted": "Wowdel(s) Whitelisted", "Modelfile Content": "Modelfile Content", @@ -578,8 +582,10 @@ "Toggle settings": "Toggle settings much toggle", "Toggle sidebar": "Toggle sidebar much toggle", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K very top", "Top P": "Top P very top", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 7950868b1..61386101e 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "", "Model {{modelName}} is not vision capable": "", "Model {{name}} is now {{status}}": "", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "", "Model ID": "", "Model not selected": "", "Model Params": "", + "Model updated successfully": "", "Model Whitelisting": "", "Model(s) Whitelisted": "", "Modelfile Content": "", @@ -576,8 +580,10 @@ "Toggle settings": "", "Toggle sidebar": "", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "", "Top P": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 7950868b1..61386101e 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "", "Model {{modelName}} is not vision capable": "", "Model {{name}} is now {{status}}": "", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "", "Model ID": "", "Model not selected": "", "Model Params": "", + "Model updated successfully": "", "Model Whitelisting": "", "Model(s) Whitelisted": "", "Modelfile Content": "", @@ -576,8 +580,10 @@ "Toggle settings": "", "Toggle sidebar": "", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "", "Top P": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 375a14d21..a9c773c46 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatea tus variables usando corchetes de la siguiente manera:", "Frequency Penalty": "Penalización de frecuencia", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "General", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "El modelo {{modelId}} no fue encontrado", "Model {{modelName}} is not vision capable": "El modelo {{modelName}} no es capaz de ver", "Model {{name}} is now {{status}}": "El modelo {{name}} ahora es {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Se detectó la ruta del sistema de archivos del modelo. Se requiere el nombre corto del modelo para la actualización, no se puede continuar.", "Model ID": "ID del modelo", "Model not selected": "Modelo no seleccionado", "Model Params": "Parámetros del modelo", + "Model updated successfully": "", "Model Whitelisting": "Listado de Modelos habilitados", "Model(s) Whitelisted": "Modelo(s) habilitados", "Modelfile Content": "Contenido del Modelfile", @@ -577,8 +581,10 @@ "Toggle settings": "Alternar configuración", "Toggle sidebar": "Alternar barra lateral", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index 61f47373e..4662e84a5 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "متغیرهای خود را با استفاده از براکت مربع به شکل زیر قالب بندی کنید:", "Frequency Penalty": "مجازات فرکانس", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "عمومی", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "مدل {{modelId}} یافت نشد", "Model {{modelName}} is not vision capable": "مدل {{modelName}} قادر به بینایی نیست", "Model {{name}} is now {{status}}": "مدل {{name}} در حال حاضر {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "مسیر فایل سیستم مدل یافت شد. برای بروزرسانی نیاز است نام کوتاه مدل وجود داشته باشد.", "Model ID": "شناسه مدل", "Model not selected": "مدل انتخاب نشده", "Model Params": "مدل پارامز", + "Model updated successfully": "", "Model Whitelisting": "لیست سفید مدل", "Model(s) Whitelisted": "مدل در لیست سفید ثبت شد", "Modelfile Content": "محتویات فایل مدل", @@ -576,8 +580,10 @@ "Toggle settings": "نمایش/عدم نمایش تنظیمات", "Toggle sidebar": "نمایش/عدم نمایش نوار کناری", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 15689b0b2..d2bdf4889 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Muotoile muuttujat hakasulkeilla näin:", "Frequency Penalty": "Taajuussakko", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Yleinen", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Mallia {{modelId}} ei löytynyt", "Model {{modelName}} is not vision capable": "Malli {{modelName}} ei kykene näkökykyyn", "Model {{name}} is now {{status}}": "Malli {{name}} on nyt {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Mallin tiedostojärjestelmäpolku havaittu. Mallin lyhytnimi vaaditaan päivitykseen, ei voi jatkaa.", "Model ID": "Mallin tunnus", "Model not selected": "Mallia ei valittu", "Model Params": "Mallin parametrit", + "Model updated successfully": "", "Model Whitelisting": "Mallin sallimislista", "Model(s) Whitelisted": "Malli(t) sallittu", "Modelfile Content": "Mallitiedoston sisältö", @@ -576,8 +580,10 @@ "Toggle settings": "Kytke asetukset", "Toggle sidebar": "Kytke sivupalkki", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 6a3306f16..6a9acf5a5 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Frequency Penalty": "Pénalité de fréquence", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Général", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modèle {{modelId}} non trouvé", "Model {{modelName}} is not vision capable": "Le modèle {{modelName}} n’est pas capable de vision", "Model {{name}} is now {{status}}": "Le modèle {{nom}} est maintenant {{statut}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Le chemin du système de fichiers du modèle a été détecté. Le nom court du modèle est nécessaire pour la mise à jour, impossible de continuer.", "Model ID": "ID de modèle", "Model not selected": "Modèle non sélectionné", "Model Params": "Paramètres modèles", + "Model updated successfully": "", "Model Whitelisting": "Liste blanche de modèle", "Model(s) Whitelisted": "Modèle(s) sur liste blanche", "Modelfile Content": "Contenu du fichier de modèle", @@ -577,8 +581,10 @@ "Toggle settings": "Basculer les paramètres", "Toggle sidebar": "Basculer la barre latérale", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 2b7b7d8a3..06dfc3e03 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Frequency Penalty": "Pénalité de fréquence", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Général", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modèle {{modelId}} non trouvé", "Model {{modelName}} is not vision capable": "Modèle {{modelName}} n'est pas capable de voir", "Model {{name}} is now {{status}}": "Le modèle {{name}} est maintenant {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Chemin du système de fichier du modèle détecté. Le nom court du modèle est requis pour la mise à jour, ne peut pas continuer.", "Model ID": "ID du Modèle", "Model not selected": "Modèle non sélectionné", "Model Params": "Paramètres du Modèle", + "Model updated successfully": "", "Model Whitelisting": "Liste Blanche de Modèle", "Model(s) Whitelisted": "Modèle(s) sur Liste Blanche", "Modelfile Content": "Contenu du Fichier de Modèle", @@ -577,8 +581,10 @@ "Toggle settings": "Basculer les paramètres", "Toggle sidebar": "Basculer la barre latérale", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index 97998880e..cedaf5263 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "עצב את המשתנים שלך באמצעות סוגריים מרובעים כך:", "Frequency Penalty": "עונש תדירות", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "כללי", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "המודל {{modelId}} לא נמצא", "Model {{modelName}} is not vision capable": "דגם {{modelName}} אינו בעל יכולת ראייה", "Model {{name}} is now {{status}}": "דגם {{name}} הוא כעת {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "נתיב מערכת הקבצים של המודל זוהה. נדרש שם קצר של המודל לעדכון, לא ניתן להמשיך.", "Model ID": "מזהה דגם", "Model not selected": "לא נבחר מודל", "Model Params": "פרמס מודל", + "Model updated successfully": "", "Model Whitelisting": "רישום לבן של מודלים", "Model(s) Whitelisted": "מודלים שנכללו ברשימה הלבנה", "Modelfile Content": "תוכן קובץ מודל", @@ -577,8 +581,10 @@ "Toggle settings": "החלפת מצב של הגדרות", "Toggle sidebar": "החלפת מצב של סרגל הצד", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index 3040a0890..13253f042 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "वर्गाकार कोष्ठकों का उपयोग करके अपने चरों को इस प्रकार प्रारूपित करें :", "Frequency Penalty": "फ्रीक्वेंसी पेनल्टी", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "सामान्य", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "मॉडल {{modelId}} नहीं मिला", "Model {{modelName}} is not vision capable": "मॉडल {{modelName}} दृष्टि सक्षम नहीं है", "Model {{name}} is now {{status}}": "मॉडल {{name}} अब {{status}} है", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "मॉडल फ़ाइल सिस्टम पथ का पता चला. अद्यतन के लिए मॉडल संक्षिप्त नाम आवश्यक है, जारी नहीं रखा जा सकता।", "Model ID": "मॉडल आईडी", "Model not selected": "मॉडल चयनित नहीं है", "Model Params": "मॉडल Params", + "Model updated successfully": "", "Model Whitelisting": "मॉडल श्वेतसूचीकरण करें", "Model(s) Whitelisted": "मॉडल श्वेतसूची में है", "Modelfile Content": "मॉडल फ़ाइल सामग्री", @@ -576,8 +580,10 @@ "Toggle settings": "सेटिंग्स टॉगल करें", "Toggle sidebar": "साइडबार टॉगल करें", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "शीर्ष K", "Top P": "शीर्ष P", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 529d80e5c..e8247d9cf 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatirajte svoje varijable pomoću uglatih zagrada ovako:", "Frequency Penalty": "Kazna za učestalost", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Općenito", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Model {{modelId}} nije pronađen", "Model {{modelName}} is not vision capable": "Model {{modelName}} ne čita vizualne impute", "Model {{name}} is now {{status}}": "Model {{name}} sada je {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Otkriven put datotečnog sustava modela. Kratko ime modela je potrebno za ažuriranje, nije moguće nastaviti.", "Model ID": "ID modela", "Model not selected": "Model nije odabran", "Model Params": "Model parametri", + "Model updated successfully": "", "Model Whitelisting": "Model - Bijela lista", "Model(s) Whitelisted": "Model(i) na bijeloj listi", "Modelfile Content": "Sadržaj datoteke modela", @@ -577,8 +581,10 @@ "Toggle settings": "Prebaci postavke", "Toggle sidebar": "Prebaci bočnu traku", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "Alati", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index ee9813386..0364d7b9c 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatta le tue variabili usando parentesi quadre come questa:", "Frequency Penalty": "Penalità di frequenza", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Generale", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modello {{modelId}} non trovato", "Model {{modelName}} is not vision capable": "Il modello {{modelName}} non è in grado di vedere", "Model {{name}} is now {{status}}": "Il modello {{name}} è ora {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Percorso del filesystem del modello rilevato. Il nome breve del modello è richiesto per l'aggiornamento, impossibile continuare.", "Model ID": "ID modello", "Model not selected": "Modello non selezionato", "Model Params": "Parametri del modello", + "Model updated successfully": "", "Model Whitelisting": "Whitelisting del modello", "Model(s) Whitelisted": "Modello/i in whitelist", "Modelfile Content": "Contenuto del file modello", @@ -577,8 +581,10 @@ "Toggle settings": "Attiva/disattiva impostazioni", "Toggle sidebar": "Attiva/disattiva barra laterale", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 4c98186cc..a38cb5418 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "次のように角括弧を使用して変数をフォーマットします。", "Frequency Penalty": "周波数ペナルティ", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "一般", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "モデル {{modelId}} が見つかりません", "Model {{modelName}} is not vision capable": "モデル {{modelName}} は視覚に対応していません", "Model {{name}} is now {{status}}": "モデル {{name}} は {{status}} になりました。", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "モデルファイルシステムパスが検出されました。モデルの短縮名が必要です。更新できません。", "Model ID": "モデルID", "Model not selected": "モデルが選択されていません", "Model Params": "モデルパラメータ", + "Model updated successfully": "", "Model Whitelisting": "モデルホワイトリスト", "Model(s) Whitelisted": "ホワイトリストに登録されたモデル", "Modelfile Content": "モデルファイルの内容", @@ -575,8 +579,10 @@ "Toggle settings": "設定を切り替え", "Toggle sidebar": "サイドバーを切り替え", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "トップ K", "Top P": "トップ P", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index 5a1087fd7..381762ebf 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "დააფორმატეთ თქვენი ცვლადები კვადრატული ფრჩხილების გამოყენებით:", "Frequency Penalty": "სიხშირის ჯარიმა", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "ზოგადი", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "მოდელი {{modelId}} ვერ მოიძებნა", "Model {{modelName}} is not vision capable": "Model {{modelName}} is not vision capable", "Model {{name}} is now {{status}}": "Model {{name}} is now {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "აღმოჩენილია მოდელის ფაილური სისტემის გზა. განახლებისთვის საჭიროა მოდელის მოკლე სახელი, გაგრძელება შეუძლებელია.", "Model ID": "მოდელის ID", "Model not selected": "მოდელი არ არის არჩეული", "Model Params": "მოდელის პარამები", + "Model updated successfully": "", "Model Whitelisting": "მოდელის თეთრ სიაში შეყვანა", "Model(s) Whitelisted": "მოდელ(ებ)ი თეთრ სიაშია", "Modelfile Content": "მოდელური ფაილის კონტენტი", @@ -576,8 +580,10 @@ "Toggle settings": "პარამეტრების გადართვა", "Toggle sidebar": "გვერდითი ზოლის გადართვა", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "ტოპ K", "Top P": "ტოპ P", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 44e86a9e5..a5f36c5e9 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "다음과 같이 대괄호를 사용하여 변수를 형식화하세요:", "Frequency Penalty": "프리퀀시 페널티", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "일반", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "{{modelId}} 모델을 찾을 수 없습니다.", "Model {{modelName}} is not vision capable": "{{modelName}} 모델은 비전을 사용할 수 없습니다.", "Model {{name}} is now {{status}}": "{{name}} 모델은 이제 {{status}} 상태입니다.", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "모델 파일 시스템 경로가 감지되었습니다. 업데이트하려면 모델 단축 이름이 필요하며 계속할 수 없습니다.", "Model ID": "모델 ID", "Model not selected": "모델이 선택되지 않았습니다.", "Model Params": "모델 파라미터", + "Model updated successfully": "", "Model Whitelisting": "허용 모델 명시", "Model(s) Whitelisted": "허용 모델", "Modelfile Content": "Modelfile 내용", @@ -576,8 +580,10 @@ "Toggle settings": "설정 전환", "Toggle sidebar": "사이드바 전환", "Tokens To Keep On Context Refresh (num_keep)": "컨텍스트 새로 고침 시 유지할 토큰 수(num_keep)", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "도구", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index aefd70d75..7d91a5f1a 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatuokite kintamuosius su kvadratiniais skliausteliais:", "Frequency Penalty": "", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Bendri", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modelis {{modelId}} nerastas", "Model {{modelName}} is not vision capable": "", "Model {{name}} is now {{status}}": "", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Modelio failų sistemos kelias aptiktas. Reikalingas trumpas modelio pavadinimas atnaujinimui.", "Model ID": "", "Model not selected": "Modelis nepasirinktas", "Model Params": "", + "Model updated successfully": "", "Model Whitelisting": "Modeliu baltasis sąrašas", "Model(s) Whitelisted": "Modelis baltąjame sąraše", "Modelfile Content": "Modelio failo turinys", @@ -578,8 +582,10 @@ "Toggle settings": "Atverti/užverti parametrus", "Toggle sidebar": "Atverti/užverti šoninį meniu", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 4b0154266..dd3864bae 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatér variablene dine med hakeparenteser som dette:", "Frequency Penalty": "Frekvensstraff", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Generelt", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modellen {{modelId}} ble ikke funnet", "Model {{modelName}} is not vision capable": "Modellen {{modelName}} er ikke visjonsdyktig", "Model {{name}} is now {{status}}": "Modellen {{name}} er nå {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Modellens filsystemsti oppdaget. Modellens kortnavn er påkrevd for oppdatering, kan ikke fortsette.", "Model ID": "Modell-ID", "Model not selected": "Modell ikke valgt", "Model Params": "Modellparametere", + "Model updated successfully": "", "Model Whitelisting": "Modell hvitlisting", "Model(s) Whitelisted": "Modell(er) hvitlistet", "Modelfile Content": "Modellfilinnhold", @@ -576,8 +580,10 @@ "Toggle settings": "Veksle innstillinger", "Toggle sidebar": "Veksle sidefelt", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 14c39296b..912df7936 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatteer je variabelen met vierkante haken zoals dit:", "Frequency Penalty": "Frequentie Straf", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Algemeen", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Model {{modelId}} niet gevonden", "Model {{modelName}} is not vision capable": "Model {{modelName}} is niet geschikt voor visie", "Model {{name}} is now {{status}}": "Model {{name}} is nu {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Model filesystem path gedetecteerd. Model shortname is vereist voor update, kan niet doorgaan.", "Model ID": "Model-ID", "Model not selected": "Model niet geselecteerd", "Model Params": "Model Params", + "Model updated successfully": "", "Model Whitelisting": "Model Whitelisting", "Model(s) Whitelisted": "Model(len) zijn ge-whitelist", "Modelfile Content": "Modelfile Inhoud", @@ -576,8 +580,10 @@ "Toggle settings": "Wissel instellingen", "Toggle sidebar": "Wissel sidebar", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index 15373b616..49e1aed32 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "ਤੁਹਾਡੀਆਂ ਵੈਰੀਏਬਲਾਂ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਵਰਤੋਂ: [ ]", "Frequency Penalty": "ਬਾਰੰਬਾਰਤਾ ਜੁਰਮਾਨਾ", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "ਆਮ", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "ਮਾਡਲ {{modelId}} ਨਹੀਂ ਮਿਲਿਆ", "Model {{modelName}} is not vision capable": "ਮਾਡਲ {{modelName}} ਦ੍ਰਿਸ਼ਟੀ ਸਮਰੱਥ ਨਹੀਂ ਹੈ", "Model {{name}} is now {{status}}": "ਮਾਡਲ {{name}} ਹੁਣ {{status}} ਹੈ", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "ਮਾਡਲ ਫਾਈਲਸਿਸਟਮ ਪੱਥ ਪਾਇਆ ਗਿਆ। ਅੱਪਡੇਟ ਲਈ ਮਾਡਲ ਸ਼ੌਰਟਨੇਮ ਦੀ ਲੋੜ ਹੈ, ਜਾਰੀ ਨਹੀਂ ਰੱਖ ਸਕਦੇ।", "Model ID": "ਮਾਡਲ ID", "Model not selected": "ਮਾਡਲ ਚੁਣਿਆ ਨਹੀਂ ਗਿਆ", "Model Params": "ਮਾਡਲ ਪਰਮਜ਼", + "Model updated successfully": "", "Model Whitelisting": "ਮਾਡਲ ਵ੍ਹਾਈਟਲਿਸਟਿੰਗ", "Model(s) Whitelisted": "ਮਾਡਲ(ਜ਼) ਵ੍ਹਾਈਟਲਿਸਟ ਕੀਤਾ ਗਿਆ", "Modelfile Content": "ਮਾਡਲਫਾਈਲ ਸਮੱਗਰੀ", @@ -576,8 +580,10 @@ "Toggle settings": "ਸੈਟਿੰਗਾਂ ਟੌਗਲ ਕਰੋ", "Toggle sidebar": "ਸਾਈਡਬਾਰ ਟੌਗਲ ਕਰੋ", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "ਸਿਖਰ K", "Top P": "ਸਿਖਰ P", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 544cb4533..661b0cea4 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatuj swoje zmienne, używając nawiasów kwadratowych, np.", "Frequency Penalty": "Kara za częstotliwość", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Ogólne", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Model {{modelId}} nie został znaleziony", "Model {{modelName}} is not vision capable": "Model {{modelName}} nie jest w stanie zobaczyć", "Model {{name}} is now {{status}}": "Model {{name}} to teraz {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Wykryto ścieżkę systemu plików modelu. Wymagana jest krótka nazwa modelu do aktualizacji, nie można kontynuować.", "Model ID": "Identyfikator modelu", "Model not selected": "Model nie został wybrany", "Model Params": "Parametry modelu", + "Model updated successfully": "", "Model Whitelisting": "Whitelisting modelu", "Model(s) Whitelisted": "Model(e) dodane do listy białej", "Modelfile Content": "Zawartość pliku modelu", @@ -578,8 +582,10 @@ "Toggle settings": "Przełącz ustawienia", "Toggle sidebar": "Przełącz panel boczny", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Najlepsze K", "Top P": "Najlepsze P", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 0b6ba1e2f..d5cc6dbd3 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes como este:", "Frequency Penalty": "Penalidade de Frequência", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Geral", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modelo {{modelId}} não encontrado", "Model {{modelName}} is not vision capable": "O modelo {{modelName}} não é capaz de visão", "Model {{name}} is now {{status}}": "O modelo {{name}} agora é {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Otkrivena putanja datoteke modela. Skraćeno ime modela je potrebno za ažuriranje, ne može se nastaviti.", "Model ID": "ID do modelo", "Model not selected": "Modelo não selecionado", "Model Params": "Params Modelo", + "Model updated successfully": "", "Model Whitelisting": "Lista de Permissões de Modelo", "Model(s) Whitelisted": "Modelo(s) na Lista de Permissões", "Modelfile Content": "Conteúdo do Arquivo de Modelo", @@ -577,8 +581,10 @@ "Toggle settings": "Alternar configurações", "Toggle sidebar": "Alternar barra lateral", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index a4e81a3a2..73f01d9dc 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formate as suas variáveis usando parenteses rectos como este:", "Frequency Penalty": "Penalidade de Frequência", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Geral", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modelo {{modelId}} não foi encontrado", "Model {{modelName}} is not vision capable": "O modelo {{modelName}} não é capaz de visão", "Model {{name}} is now {{status}}": "Modelo {{name}} agora é {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Dtectado caminho do sistema de ficheiros do modelo. É necessário o nome curto do modelo para atualização, não é possível continuar.", "Model ID": "ID do modelo", "Model not selected": "Modelo não selecionado", "Model Params": "Params Modelo", + "Model updated successfully": "", "Model Whitelisting": "Lista de Permissões do Modelo", "Model(s) Whitelisted": "Modelo(s) na Lista de Permissões", "Modelfile Content": "Conteúdo do Ficheiro do Modelo", @@ -577,8 +581,10 @@ "Toggle settings": "Alternar configurações", "Toggle sidebar": "Alternar barra lateral", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 1a2b4a33f..7260610a0 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Форматируйте ваши переменные, используя квадратные скобки, как здесь:", "Frequency Penalty": "Штраф за частоту", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Общее", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Модель {{modelId}} не найдена", "Model {{modelName}} is not vision capable": "Модель {{modelName}} не поддерживает зрение", "Model {{name}} is now {{status}}": "Модель {{name}} теперь {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Модель файловой системы обнаружена. Требуется имя тега модели для обновления, не удается продолжить.", "Model ID": "Идентификатор модели", "Model not selected": "Модель не выбрана", "Model Params": "Параметры модели", + "Model updated successfully": "", "Model Whitelisting": "Включение модели в белый список", "Model(s) Whitelisted": "Модель(и) включены в белый список", "Modelfile Content": "Содержимое файла модели", @@ -578,8 +582,10 @@ "Toggle settings": "Переключить настройки", "Toggle sidebar": "Переключить боковую панель", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index ab0e4b1c5..04a150e1f 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Форматирајте ваше променљиве користећи угластe заграде овако:", "Frequency Penalty": "Фреквентна казна", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Опште", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Модел {{modelId}} није пронађен", "Model {{modelName}} is not vision capable": "Модел {{моделНаме}} није способан за вид", "Model {{name}} is now {{status}}": "Модел {{наме}} је сада {{статус}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Откривена путања система датотека модела. За ажурирање је потребан кратак назив модела, не може се наставити.", "Model ID": "ИД модела", "Model not selected": "Модел није изабран", "Model Params": "Модел Парамс", + "Model updated successfully": "", "Model Whitelisting": "Бели списак модела", "Model(s) Whitelisted": "Модел(и) на белом списку", "Modelfile Content": "Садржај модел-датотеке", @@ -577,8 +581,10 @@ "Toggle settings": "Пребаци подешавања", "Toggle sidebar": "Пребаци бочну траку", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Топ К", "Top P": "Топ П", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 87090ce21..84eb23209 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Formatera dina variabler med hakparenteser så här:", "Frequency Penalty": "Straff för frekvens", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Allmän", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Modell {{modelId}} hittades inte", "Model {{modelName}} is not vision capable": "Modellen {{modelName}} är inte synkapabel", "Model {{name}} is now {{status}}": "Modellen {{name}} är nu {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Modellens filsystemväg upptäckt. Modellens kortnamn krävs för uppdatering, kan inte fortsätta.", "Model ID": "Modell-ID", "Model not selected": "Modell inte vald", "Model Params": "Modell Params", + "Model updated successfully": "", "Model Whitelisting": "Modellens vitlista", "Model(s) Whitelisted": "Vitlistade modeller", "Modelfile Content": "Modelfilens innehåll", @@ -576,8 +580,10 @@ "Toggle settings": "Växla inställningar", "Toggle sidebar": "Växla sidofält", "Tokens To Keep On Context Refresh (num_keep)": "Tokens att behålla vid kontextuppdatering (num_keep)", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "Verktyg", "Top K": "Topp K", "Top P": "Topp P", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index 7950868b1..61386101e 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "", "Model {{modelName}} is not vision capable": "", "Model {{name}} is now {{status}}": "", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "", "Model ID": "", "Model not selected": "", "Model Params": "", + "Model updated successfully": "", "Model Whitelisting": "", "Model(s) Whitelisted": "", "Modelfile Content": "", @@ -576,8 +580,10 @@ "Toggle settings": "", "Toggle sidebar": "", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "", "Top P": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index 3eef433a2..b780b5393 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Değişkenlerinizi şu şekilde kare parantezlerle biçimlendirin:", "Frequency Penalty": "Frekans Cezası", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Genel", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "{{modelId}} bulunamadı", "Model {{modelName}} is not vision capable": "Model {{modelName}} görüntü yeteneğine sahip değil", "Model {{name}} is now {{status}}": "{{name}} modeli artık {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Model dosya sistemi yolu algılandı. Güncelleme için model kısa adı gerekli, devam edilemiyor.", "Model ID": "Model ID", "Model not selected": "Model seçilmedi", "Model Params": "Model Parametreleri", + "Model updated successfully": "", "Model Whitelisting": "Model Beyaz Listeye Alma", "Model(s) Whitelisted": "Model(ler) Beyaz Listeye Alındı", "Modelfile Content": "Model Dosyası İçeriği", @@ -576,8 +580,10 @@ "Toggle settings": "Ayarları Aç/Kapat", "Toggle sidebar": "Kenar Çubuğunu Aç/Kapat", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 5609544e9..bb07cafd4 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -262,7 +262,9 @@ "Form": "Форма", "Format your variables using square brackets like this:": "Форматуйте свої змінні квадратними дужками так:", "Frequency Penalty": "Штраф за частоту", + "Function created successfully": "", "Function deleted successfully": "Функцію успішно видалено", + "Function updated successfully": "", "Functions": "Функції", "Functions imported successfully": "Функції успішно імпортовано", "General": "Загальні", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Модель {{modelId}} не знайдено", "Model {{modelName}} is not vision capable": "Модель {{modelName}} не здатна бачити", "Model {{name}} is now {{status}}": "Модель {{name}} тепер має {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Виявлено шлях до файлової системи моделі. Для оновлення потрібно вказати коротке ім'я моделі, не вдасться продовжити.", "Model ID": "ID моделі", "Model not selected": "Модель не вибрана", "Model Params": "Параметри моделі", + "Model updated successfully": "", "Model Whitelisting": "Модель білого списку", "Model(s) Whitelisted": "Модель(і) білого списку", "Modelfile Content": "Вміст файлу моделі", @@ -578,8 +582,10 @@ "Toggle settings": "Переключити налаштування", "Toggle sidebar": "Переключити бокову панель", "Tokens To Keep On Context Refresh (num_keep)": "Токени для збереження при оновленні контексту (num_keep)", + "Tool created successfully": "", "Tool deleted successfully": "Інструмент успішно видалено", "Tool imported successfully": "Інструмент успішно імпортовано", + "Tool updated successfully": "", "Tools": "Інструменти", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 46ed1f452..d23340bc5 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -262,7 +262,9 @@ "Form": "", "Format your variables using square brackets like this:": "Định dạng các biến của bạn bằng cách sử dụng dấu ngoặc vuông như thế này:", "Frequency Penalty": "Hình phạt tần số", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "", "Functions imported successfully": "", "General": "Cài đặt chung", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "Không tìm thấy Mô hình {{modelId}}", "Model {{modelName}} is not vision capable": "Model {{modelName}} không có khả năng nhìn", "Model {{name}} is now {{status}}": "Model {{name}} bây giờ là {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Đường dẫn hệ thống tệp mô hình được phát hiện. Tên viết tắt mô hình là bắt buộc để cập nhật, không thể tiếp tục.", "Model ID": "ID mẫu", "Model not selected": "Chưa chọn Mô hình", "Model Params": "Mô hình Params", + "Model updated successfully": "", "Model Whitelisting": "Whitelist mô hình", "Model(s) Whitelisted": "các mô hình được cho vào danh sách Whitelist", "Modelfile Content": "Nội dung Tệp Mô hình", @@ -575,8 +579,10 @@ "Toggle settings": "Bật/tắt cài đặt", "Toggle sidebar": "Bật/tắt thanh bên", "Tokens To Keep On Context Refresh (num_keep)": "", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index e1843a767..7474f29d9 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -262,7 +262,9 @@ "Form": "手动创建", "Format your variables using square brackets like this:": "使用这样的方括号格式化你的变量:", "Frequency Penalty": "频率惩罚", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "功能", "Functions imported successfully": "", "General": "通用", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "未找到模型 {{modelId}}", "Model {{modelName}} is not vision capable": "模型 {{modelName}} 不支持视觉功能", "Model {{name}} is now {{status}}": "模型 {{name}} 现在是 {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "检测到模型文件系统路径,无法继续进行。更新操作需要提供模型简称。", "Model ID": "模型 ID", "Model not selected": "未选择模型", "Model Params": "模型参数", + "Model updated successfully": "", "Model Whitelisting": "白名单模型", "Model(s) Whitelisted": "模型已加入白名单", "Modelfile Content": "模型文件内容", @@ -575,8 +579,10 @@ "Toggle settings": "切换设置", "Toggle sidebar": "切换侧边栏", "Tokens To Keep On Context Refresh (num_keep)": "在语境刷新时需保留的 Tokens", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "工具", "Top K": "Top K", "Top P": "Top P", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index a06a49669..f3e4c985c 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -262,7 +262,9 @@ "Form": "表單", "Format your variables using square brackets like this:": "像這樣使用方括號來格式化您的變數:", "Frequency Penalty": "頻率懲罰", + "Function created successfully": "", "Function deleted successfully": "", + "Function updated successfully": "", "Functions": "功能", "Functions imported successfully": "", "General": "常用", @@ -347,10 +349,12 @@ "Model {{modelId}} not found": "找不到 {{modelId}} 模型", "Model {{modelName}} is not vision capable": "{{modelName}} 模型不適用於視覺", "Model {{name}} is now {{status}}": "{{name}} 模型現在是 {{status}}", + "Model created successfully!": "", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "已偵測到模型檔案系統路徑。需要更新模型簡稱,無法繼續。", "Model ID": "模型 ID", "Model not selected": "未選擇模型", "Model Params": "模型參數", + "Model updated successfully": "", "Model Whitelisting": "白名單模型", "Model(s) Whitelisted": "模型已加入白名單", "Modelfile Content": "Modelfile 內容", @@ -575,8 +579,10 @@ "Toggle settings": "切換設定", "Toggle sidebar": "切換側邊欄", "Tokens To Keep On Context Refresh (num_keep)": "上下文重新整理時保留的 Token 數量(num_keep)", + "Tool created successfully": "", "Tool deleted successfully": "", "Tool imported successfully": "", + "Tool updated successfully": "", "Tools": "工具", "Top K": "Top K", "Top P": "Top P", diff --git a/src/routes/(app)/workspace/functions/create/+page.svelte b/src/routes/(app)/workspace/functions/create/+page.svelte index 0f73cf94e..48157be3d 100644 --- a/src/routes/(app)/workspace/functions/create/+page.svelte +++ b/src/routes/(app)/workspace/functions/create/+page.svelte @@ -25,7 +25,7 @@ }); if (res) { - toast.success('Function created successfully'); + toast.success($i18n.t('Function created successfully')); functions.set(await getFunctions(localStorage.token)); models.set(await getModels(localStorage.token)); diff --git a/src/routes/(app)/workspace/functions/edit/+page.svelte b/src/routes/(app)/workspace/functions/edit/+page.svelte index 21fc5acb6..687195fcb 100644 --- a/src/routes/(app)/workspace/functions/edit/+page.svelte +++ b/src/routes/(app)/workspace/functions/edit/+page.svelte @@ -26,7 +26,7 @@ }); if (res) { - toast.success('Function updated successfully'); + toast.success($i18n.t('Function updated successfully')); functions.set(await getFunctions(localStorage.token)); models.set(await getModels(localStorage.token)); } diff --git a/src/routes/(app)/workspace/models/create/+page.svelte b/src/routes/(app)/workspace/models/create/+page.svelte index b870dec58..479e83cee 100644 --- a/src/routes/(app)/workspace/models/create/+page.svelte +++ b/src/routes/(app)/workspace/models/create/+page.svelte @@ -136,7 +136,7 @@ if (res) { await models.set(await getModels(localStorage.token)); - toast.success('Model created successfully!'); + toast.success($i18n.t('Model created successfully!')); await goto('/workspace/models'); } } diff --git a/src/routes/(app)/workspace/models/edit/+page.svelte b/src/routes/(app)/workspace/models/edit/+page.svelte index ef2ed0558..128501eb7 100644 --- a/src/routes/(app)/workspace/models/edit/+page.svelte +++ b/src/routes/(app)/workspace/models/edit/+page.svelte @@ -107,7 +107,7 @@ if (res) { await models.set(await getModels(localStorage.token)); - toast.success('Model updated successfully'); + toast.success($i18n.t('Model updated successfully')); await goto('/workspace/models'); } diff --git a/src/routes/(app)/workspace/tools/create/+page.svelte b/src/routes/(app)/workspace/tools/create/+page.svelte index c785c74cd..f3699ea07 100644 --- a/src/routes/(app)/workspace/tools/create/+page.svelte +++ b/src/routes/(app)/workspace/tools/create/+page.svelte @@ -23,7 +23,7 @@ }); if (res) { - toast.success('Tool created successfully'); + toast.success($i18n.t('Tool created successfully')); tools.set(await getTools(localStorage.token)); await goto('/workspace/tools'); diff --git a/src/routes/(app)/workspace/tools/edit/+page.svelte b/src/routes/(app)/workspace/tools/edit/+page.svelte index b8ca32507..2103dae8f 100644 --- a/src/routes/(app)/workspace/tools/edit/+page.svelte +++ b/src/routes/(app)/workspace/tools/edit/+page.svelte @@ -23,7 +23,7 @@ }); if (res) { - toast.success('Tool updated successfully'); + toast.success($i18n.t('Tool updated successfully')); tools.set(await getTools(localStorage.token)); // await goto('/workspace/tools'); From 74a4f642fd891a889f3395c131acd2af384c99da Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 10:47:40 -0700 Subject: [PATCH 239/287] refac: valves save --- src/lib/components/workspace/Functions.svelte | 12 ++++++++++-- .../components/workspace/common/ValvesModal.svelte | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index dbb050b0d..faad68214 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -4,7 +4,7 @@ const { saveAs } = fileSaver; import { WEBUI_NAME, functions, models } from '$lib/stores'; - import { onMount, getContext } from 'svelte'; + import { onMount, getContext, tick } from 'svelte'; import { createNewPrompt, deletePromptByCommand, getPrompts } from '$lib/apis/prompts'; import { goto } from '$app/navigation'; @@ -387,7 +387,15 @@
- + { + await tick(); + models.set(await getModels(localStorage.token)); + }} +/> Date: Mon, 24 Jun 2024 19:49:29 +0200 Subject: [PATCH 240/287] Add translation --- src/lib/i18n/locales/uk-UA/translation.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index bb07cafd4..af6592ca5 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -262,9 +262,9 @@ "Form": "Форма", "Format your variables using square brackets like this:": "Форматуйте свої змінні квадратними дужками так:", "Frequency Penalty": "Штраф за частоту", - "Function created successfully": "", + "Function created successfully": "Функцію успішно створено", "Function deleted successfully": "Функцію успішно видалено", - "Function updated successfully": "", + "Function updated successfully": "Функцію успішно оновлено", "Functions": "Функції", "Functions imported successfully": "Функції успішно імпортовано", "General": "Загальні", @@ -349,12 +349,12 @@ "Model {{modelId}} not found": "Модель {{modelId}} не знайдено", "Model {{modelName}} is not vision capable": "Модель {{modelName}} не здатна бачити", "Model {{name}} is now {{status}}": "Модель {{name}} тепер має {{status}}", - "Model created successfully!": "", + "Model created successfully!": "Модель створено успішно!", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Виявлено шлях до файлової системи моделі. Для оновлення потрібно вказати коротке ім'я моделі, не вдасться продовжити.", "Model ID": "ID моделі", "Model not selected": "Модель не вибрана", "Model Params": "Параметри моделі", - "Model updated successfully": "", + "Model updated successfully": "Модель успішно оновлено", "Model Whitelisting": "Модель білого списку", "Model(s) Whitelisted": "Модель(і) білого списку", "Modelfile Content": "Вміст файлу моделі", @@ -582,10 +582,10 @@ "Toggle settings": "Переключити налаштування", "Toggle sidebar": "Переключити бокову панель", "Tokens To Keep On Context Refresh (num_keep)": "Токени для збереження при оновленні контексту (num_keep)", - "Tool created successfully": "", + "Tool created successfully": "Інструмент успішно створено", "Tool deleted successfully": "Інструмент успішно видалено", "Tool imported successfully": "Інструмент успішно імпортовано", - "Tool updated successfully": "", + "Tool updated successfully": "Інструмент успішно оновлено", "Tools": "Інструменти", "Top K": "Top K", "Top P": "Top P", From 1c4e7f03245f6994d66f0200fde1fdbaed2429d2 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 11:17:18 -0700 Subject: [PATCH 241/287] refac --- backend/apps/webui/main.py | 159 ++++++++++++++++++++++++++++++++ backend/main.py | 180 +++---------------------------------- 2 files changed, 169 insertions(+), 170 deletions(-) diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index 8255cd393..260d305f0 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -1,5 +1,6 @@ from fastapi import FastAPI, Depends from fastapi.routing import APIRoute +from fastapi.responses import StreamingResponse from fastapi.middleware.cors import CORSMiddleware from apps.webui.routers import ( auths, @@ -17,6 +18,7 @@ from apps.webui.routers import ( ) from apps.webui.models.functions import Functions from apps.webui.utils import load_function_module_by_id +from utils.misc import stream_message_template from config import ( WEBUI_BUILD_HASH, @@ -37,6 +39,14 @@ from config import ( AppConfig, ) +import inspect +import uuid +import time +import json + +from typing import Iterator, Generator +from pydantic import BaseModel + app = FastAPI() origins = ["*"] @@ -166,3 +176,152 @@ async def get_pipe_models(): ) return pipe_models + + +async def generate_function_chat_completion(form_data, user): + 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, + } + + 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 = {**params, "__user__": __user__} + + if form_data["stream"]: + + async def stream_content(): + try: + if inspect.iscoroutinefunction(pipe): + res = await pipe(**params) + else: + res = pipe(**params) + except Exception as e: + print(f"Error: {e}") + yield f"data: {json.dumps({'error': {'detail':str(e)}})}\n\n" + return + + if isinstance(res, str): + message = stream_message_template(form_data["model"], res) + yield f"data: {json.dumps(message)}\n\n" + + if isinstance(res, Iterator): + for line in res: + if isinstance(line, BaseModel): + line = line.model_dump_json() + line = f"data: {line}" + try: + line = line.decode("utf-8") + except: + pass + + if line.startswith("data:"): + yield f"{line}\n\n" + else: + line = stream_message_template(form_data["model"], line) + yield f"data: {json.dumps(line)}\n\n" + + if isinstance(res, str) or isinstance(res, Generator): + finish_message = { + "id": f"{form_data['model']}-{str(uuid.uuid4())}", + "object": "chat.completion.chunk", + "created": int(time.time()), + "model": form_data["model"], + "choices": [ + { + "index": 0, + "delta": {}, + "logprobs": None, + "finish_reason": "stop", + } + ], + } + + yield f"data: {json.dumps(finish_message)}\n\n" + yield f"data: [DONE]" + + return StreamingResponse(stream_content(), media_type="text/event-stream") + else: + + try: + if inspect.iscoroutinefunction(pipe): + res = await pipe(**params) + else: + res = pipe(**params) + except Exception as e: + print(f"Error: {e}") + return {"error": {"detail": str(e)}} + + if inspect.iscoroutinefunction(pipe): + res = await pipe(**params) + else: + res = pipe(**params) + + if isinstance(res, dict): + return res + elif isinstance(res, BaseModel): + return res.model_dump() + else: + message = "" + if isinstance(res, str): + message = res + if isinstance(res, Generator): + for stream in res: + message = f"{message}{stream}" + + return { + "id": f"{form_data['model']}-{str(uuid.uuid4())}", + "object": "chat.completion", + "created": int(time.time()), + "model": form_data["model"], + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": message, + }, + "logprobs": None, + "finish_reason": "stop", + } + ], + } + + return await job() diff --git a/backend/main.py b/backend/main.py index 12e2d937e..426805276 100644 --- a/backend/main.py +++ b/backend/main.py @@ -43,7 +43,11 @@ from apps.openai.main import ( from apps.audio.main import app as audio_app from apps.images.main import app as images_app from apps.rag.main import app as rag_app -from apps.webui.main import app as webui_app, get_pipe_models +from apps.webui.main import ( + app as webui_app, + get_pipe_models, + generate_function_chat_completion, +) from pydantic import BaseModel @@ -228,10 +232,7 @@ async def get_function_call_response( response = None try: - if model["owned_by"] == "ollama": - response = await generate_ollama_chat_completion(payload, user=user) - else: - response = await generate_openai_chat_completion(payload, user=user) + response = await generate_chat_completions(form_data=payload, user=user) content = None @@ -900,159 +901,7 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u pipe = model.get("pipe") if pipe: - - 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 webui_app.state.FUNCTIONS: - function_module, function_type, frontmatter = ( - load_function_module_by_id(pipe_id) - ) - webui_app.state.FUNCTIONS[pipe_id] = function_module - else: - function_module = webui_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, - } - - 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 = {**params, "__user__": __user__} - - if form_data["stream"]: - - async def stream_content(): - try: - if inspect.iscoroutinefunction(pipe): - res = await pipe(**params) - else: - res = pipe(**params) - except Exception as e: - print(f"Error: {e}") - yield f"data: {json.dumps({'error': {'detail':str(e)}})}\n\n" - return - - if isinstance(res, str): - message = stream_message_template(form_data["model"], res) - yield f"data: {json.dumps(message)}\n\n" - - if isinstance(res, Iterator): - for line in res: - if isinstance(line, BaseModel): - line = line.model_dump_json() - line = f"data: {line}" - try: - line = line.decode("utf-8") - except: - pass - - if line.startswith("data:"): - yield f"{line}\n\n" - else: - line = stream_message_template(form_data["model"], line) - yield f"data: {json.dumps(line)}\n\n" - - if isinstance(res, str) or isinstance(res, Generator): - finish_message = { - "id": f"{form_data['model']}-{str(uuid.uuid4())}", - "object": "chat.completion.chunk", - "created": int(time.time()), - "model": form_data["model"], - "choices": [ - { - "index": 0, - "delta": {}, - "logprobs": None, - "finish_reason": "stop", - } - ], - } - - yield f"data: {json.dumps(finish_message)}\n\n" - yield f"data: [DONE]" - - return StreamingResponse( - stream_content(), media_type="text/event-stream" - ) - else: - - try: - if inspect.iscoroutinefunction(pipe): - res = await pipe(**params) - else: - res = pipe(**params) - except Exception as e: - print(f"Error: {e}") - return {"error": {"detail": str(e)}} - - if inspect.iscoroutinefunction(pipe): - res = await pipe(**params) - else: - res = pipe(**params) - - if isinstance(res, dict): - return res - elif isinstance(res, BaseModel): - return res.model_dump() - else: - message = "" - if isinstance(res, str): - message = res - if isinstance(res, Generator): - for stream in res: - message = f"{message}{stream}" - - return { - "id": f"{form_data['model']}-{str(uuid.uuid4())}", - "object": "chat.completion", - "created": int(time.time()), - "model": form_data["model"], - "choices": [ - { - "index": 0, - "message": { - "role": "assistant", - "content": message, - }, - "logprobs": None, - "finish_reason": "stop", - } - ], - } - - return await job() + return await generate_function_chat_completion(form_data, user=user) if model["owned_by"] == "ollama": return await generate_ollama_chat_completion(form_data, user=user) else: @@ -1334,10 +1183,7 @@ async def generate_title(form_data: dict, user=Depends(get_verified_user)): content={"detail": e.args[1]}, ) - if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion(payload, user=user) - else: - return await generate_openai_chat_completion(payload, user=user) + return await generate_chat_completions(form_data=payload, user=user) @app.post("/api/task/query/completions") @@ -1397,10 +1243,7 @@ async def generate_search_query(form_data: dict, user=Depends(get_verified_user) content={"detail": e.args[1]}, ) - if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion(payload, user=user) - else: - return await generate_openai_chat_completion(payload, user=user) + return await generate_chat_completions(form_data=payload, user=user) @app.post("/api/task/emoji/completions") @@ -1464,10 +1307,7 @@ Message: """{{prompt}}""" content={"detail": e.args[1]}, ) - if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion(payload, user=user) - else: - return await generate_openai_chat_completion(payload, user=user) + return await generate_chat_completions(form_data=payload, user=user) @app.post("/api/task/tools/completions") From f6082579c917eac7ec0338f4309ecd4fe7db042f Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 11:29:21 -0700 Subject: [PATCH 242/287] fix: wakelock --- src/routes/+layout.svelte | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index c4cbc9cfd..23ca65b2f 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -60,10 +60,13 @@ console.log(err); } - wakeLock.addEventListener('release', () => { - // the wake lock has been released - console.log('Wake Lock released'); - }); + if (wakeLock) { + // Add a listener to release the wake lock when the page is unloaded + wakeLock.addEventListener('release', () => { + // the wake lock has been released + console.log('Wake Lock released'); + }); + } }; if ('wakeLock' in navigator) { From 345b3491a7b6f9a279f9d08c312a22153be8f969 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 12:21:19 -0700 Subject: [PATCH 243/287] fix: i18n --- src/routes/(app)/workspace/functions/create/+page.svelte | 4 +++- src/routes/(app)/workspace/functions/edit/+page.svelte | 4 +++- src/routes/(app)/workspace/tools/create/+page.svelte | 4 +++- src/routes/(app)/workspace/tools/edit/+page.svelte | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/routes/(app)/workspace/functions/create/+page.svelte b/src/routes/(app)/workspace/functions/create/+page.svelte index 48157be3d..033bdc22f 100644 --- a/src/routes/(app)/workspace/functions/create/+page.svelte +++ b/src/routes/(app)/workspace/functions/create/+page.svelte @@ -1,6 +1,6 @@ + + + + {$i18n.t('Playground')} | {$WEBUI_NAME} + + + +
+
+
+
+ +
+
{$i18n.t('Playground')}
+
+
+ +
+ +
+ +
+
diff --git a/src/routes/(app)/playground/+page.svelte b/src/routes/(app)/playground/+page.svelte index 32e6e25be..3147c8d0e 100644 --- a/src/routes/(app)/playground/+page.svelte +++ b/src/routes/(app)/playground/+page.svelte @@ -1,15 +1,5 @@ -
-
- -
-
+ From d361404a60d1ecc0823c14d26f988ccc1d556a35 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 13:33:03 -0700 Subject: [PATCH 248/287] refac --- backend/apps/webui/routers/memories.py | 3 ++- backend/data/config.json | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/apps/webui/routers/memories.py b/backend/apps/webui/routers/memories.py index 3832fe9a1..e9ae96173 100644 --- a/backend/apps/webui/routers/memories.py +++ b/backend/apps/webui/routers/memories.py @@ -101,6 +101,7 @@ async def update_memory_by_id( class QueryMemoryForm(BaseModel): content: str + k: Optional[int] = 1 @router.post("/query") @@ -112,7 +113,7 @@ async def query_memory( results = collection.query( query_embeddings=[query_embedding], - n_results=1, # how many results to return + n_results=form_data.k, # how many results to return ) return results diff --git a/backend/data/config.json b/backend/data/config.json index 6c0ad2b9f..f02eb8348 100644 --- a/backend/data/config.json +++ b/backend/data/config.json @@ -17,6 +17,7 @@ }, { "title": ["Show me a code snippet", "of a website's sticky header"], + ], "content": "Show me a code snippet of a website's sticky header in CSS and JavaScript." }, { From 68b3cce0fdc7226a0bcf785181740440eade1196 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 14:00:08 -0700 Subject: [PATCH 249/287] fix: query memory --- src/lib/components/chat/Chat.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 4e7fac921..282ed2375 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -529,8 +529,8 @@ }); if (res) { if (res.documents[0].length > 0) { - userContext = res.documents.reduce((acc, doc, index) => { - const createdAtTimestamp = res.metadatas[index][0].created_at; + userContext = res.documents[0].reduce((acc, doc, index) => { + const createdAtTimestamp = res.metadatas[0][index].created_at; const createdAtDate = new Date(createdAtTimestamp * 1000) .toISOString() .split('T')[0]; From 0f4f01cee9551ba995bcdf6019f0d45b0e836138 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 14:00:48 -0700 Subject: [PATCH 250/287] fix --- src/lib/components/chat/Chat.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 282ed2375..53376a656 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -534,7 +534,7 @@ const createdAtDate = new Date(createdAtTimestamp * 1000) .toISOString() .split('T')[0]; - acc.push(`${index + 1}. [${createdAtDate}]. ${doc[0]}`); + acc.push(`${index + 1}. [${createdAtDate}]. ${doc}`); return acc; }, []); } From 284ab648b636d7324600229bf887e3b7482951a1 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 15:21:42 -0700 Subject: [PATCH 251/287] fix --- src/lib/components/chat/Chat.svelte | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 53376a656..cad42111d 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -534,9 +534,8 @@ const createdAtDate = new Date(createdAtTimestamp * 1000) .toISOString() .split('T')[0]; - acc.push(`${index + 1}. [${createdAtDate}]. ${doc}`); - return acc; - }, []); + return `${acc}${index + 1}. [${createdAtDate}]. ${doc}\n`; + }, ''); } console.log(userContext); From 9504c9c9b4770017049b51b1db3d250f99068715 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 15:32:49 -0700 Subject: [PATCH 252/287] fix --- src/lib/components/chat/Chat.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index cad42111d..1f8fd9827 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -591,7 +591,7 @@ : undefined )}${ responseMessage?.userContext ?? null - ? `\n\nUser Context:\n${(responseMessage?.userContext ?? []).join('\n')}` + ? `\n\nUser Context:\n${responseMessage?.userContext ?? ''}` : '' }` } @@ -932,7 +932,7 @@ : undefined )}${ responseMessage?.userContext ?? null - ? `\n\nUser Context:\n${(responseMessage?.userContext ?? []).join('\n')}` + ? `\n\nUser Context:\n${responseMessage?.userContext ?? ''}` : '' }` } From 503d16f49c530a17142cbd97b2e06ac1bd10124b Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 16:06:15 -0700 Subject: [PATCH 253/287] chore: 333 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Jannes Höke <3945220+jh0ker@users.noreply.github.com> --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c4e4ebd5..b544a87d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-webui", - "version": "0.3.5", + "version": "0.3.6.dev1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "open-webui", - "version": "0.3.5", + "version": "0.3.6.dev1", "dependencies": { "@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-python": "^6.1.6", diff --git a/package.json b/package.json index f46b88175..c829c6092 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "0.3.5", + "version": "0.3.6.dev1", "private": true, "scripts": { "dev": "npm run pyodide:fetch && vite dev --host", From bf4dcc10af953022e17f523e8b894fad057fdeab Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 17:39:43 -0700 Subject: [PATCH 254/287] fix: modal esc --- src/lib/components/common/Modal.svelte | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lib/components/common/Modal.svelte b/src/lib/components/common/Modal.svelte index 1cb6b64dc..d1d99bff3 100644 --- a/src/lib/components/common/Modal.svelte +++ b/src/lib/components/common/Modal.svelte @@ -23,12 +23,17 @@ }; const handleKeyDown = (event: KeyboardEvent) => { - if (event.key === 'Escape') { + if (event.key === 'Escape' && isTopModal()) { console.log('Escape'); show = false; } }; + const isTopModal = () => { + const modals = document.getElementsByClassName('modal'); + return modals.length && modals[modals.length - 1] === modalElement; + }; + onMount(() => { mounted = true; }); @@ -38,8 +43,8 @@ window.addEventListener('keydown', handleKeyDown); document.body.style.overflow = 'hidden'; } else if (modalElement) { - document.body.removeChild(modalElement); window.removeEventListener('keydown', handleKeyDown); + document.body.removeChild(modalElement); document.body.style.overflow = 'unset'; } @@ -49,7 +54,7 @@
{ show = false; From a40d0ec3cb97997be079bde57cfc846903e145ff Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 24 Jun 2024 17:53:07 -0700 Subject: [PATCH 255/287] chore: requirements --- backend/requirements.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backend/requirements.txt b/backend/requirements.txt index 90f6548e7..690425613 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -24,6 +24,10 @@ boto3==1.34.110 argon2-cffi==23.1.0 APScheduler==3.10.4 + +# AI libraries +openai +anthropic google-generativeai==0.5.4 langchain==0.2.0 From 263d4bf49643e391b296082aa207e8e436c49075 Mon Sep 17 00:00:00 2001 From: rdavis Date: Mon, 24 Jun 2024 22:50:35 -0500 Subject: [PATCH 256/287] Added delete confirmation dialogs for Prompts, Tools, and Functions. --- src/lib/components/workspace/Functions.svelte | 22 +++++++++++++++++-- src/lib/components/workspace/Prompts.svelte | 21 ++++++++++++++++-- src/lib/components/workspace/Tools.svelte | 19 +++++++++++++++- 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index b3572a087..b73338d01 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -27,6 +27,7 @@ import ValvesModal from './common/ValvesModal.svelte'; import ManifestModal from './common/ManifestModal.svelte'; import Heart from '../icons/Heart.svelte'; + import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte'; const i18n = getContext('i18n'); @@ -40,6 +41,10 @@ let showValvesModal = false; let selectedFunction = null; + + let showDeleteConfirm = false; + let deleteFunction = null; + const shareHandler = async (tool) => { console.log(tool); }; @@ -245,8 +250,9 @@ exportHandler={() => { exportHandler(func); }} - deleteHandler={async () => { - deleteHandler(func); + deleteHandler={async () => { + deleteFunction = func; + showDeleteConfirm = true; }} onClose={() => {}} > @@ -386,6 +392,18 @@
+ { + deleteHandler(deleteFunction); + }} +> +
+ {$i18n.t('This will delete')} {deleteFunction.name}. +
+
+ { toast.success($i18n.t('Redirecting you to OpenWebUI Community')); @@ -154,8 +158,9 @@ exportHandler={() => { exportHandler(prompt); }} - deleteHandler={async () => { - deleteHandler(prompt); + deleteHandler={async () => { + deletePrompt = prompt; + showDeleteConfirm = true; }} onClose={() => {}} > @@ -301,3 +306,15 @@
+ + { + deleteHandler(deletePrompt); + }} +> +
+ {$i18n.t('This will delete')} {deletePrompt.command}. +
+
diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index c98c013fb..043f6473e 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -23,6 +23,7 @@ import ValvesModal from './common/ValvesModal.svelte'; import ManifestModal from './common/ManifestModal.svelte'; import Heart from '../icons/Heart.svelte'; + import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte'; const i18n = getContext('i18n'); @@ -36,6 +37,9 @@ let showValvesModal = false; let selectedTool = null; + let showDeleteConfirm = false; + let deleteTool = null; + const shareHandler = async (tool) => { console.log(tool); }; @@ -240,7 +244,8 @@ exportHandler(tool); }} deleteHandler={async () => { - deleteHandler(tool); + deleteTool = tool; + showDeleteConfirm = true; }} onClose={() => {}} > @@ -370,6 +375,18 @@
+ { + deleteHandler(deleteTool); + }} +> +
+ {$i18n.t('This will delete')} {deleteTool.name}. +
+
+ From d5b91fb0847379d8fb67cf0e1c305a4504aec84b Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Tue, 25 Jun 2024 14:00:02 +0800 Subject: [PATCH 257/287] feat: hide all API keys by default in admin settings --- .../components/admin/Settings/Audio.svelte | 116 +++++++- .../admin/Settings/Connections.svelte | 46 ++- .../admin/Settings/Documents.svelte | 99 +++++-- .../components/admin/Settings/Images.svelte | 57 +++- .../admin/Settings/WebSearch.svelte | 271 ++++++++++++++++-- src/lib/i18n/locales/ar-BH/translation.json | 1 - src/lib/i18n/locales/bg-BG/translation.json | 1 - src/lib/i18n/locales/bn-BD/translation.json | 1 - src/lib/i18n/locales/ca-ES/translation.json | 1 - src/lib/i18n/locales/ceb-PH/translation.json | 1 - src/lib/i18n/locales/de-DE/translation.json | 1 - src/lib/i18n/locales/dg-DG/translation.json | 1 - src/lib/i18n/locales/en-GB/translation.json | 1 - src/lib/i18n/locales/en-US/translation.json | 1 - src/lib/i18n/locales/es-ES/translation.json | 1 - src/lib/i18n/locales/fa-IR/translation.json | 1 - src/lib/i18n/locales/fi-FI/translation.json | 1 - src/lib/i18n/locales/fr-CA/translation.json | 1 - src/lib/i18n/locales/fr-FR/translation.json | 1 - src/lib/i18n/locales/he-IL/translation.json | 1 - src/lib/i18n/locales/hi-IN/translation.json | 1 - src/lib/i18n/locales/hr-HR/translation.json | 1 - src/lib/i18n/locales/it-IT/translation.json | 1 - src/lib/i18n/locales/ja-JP/translation.json | 1 - src/lib/i18n/locales/ka-GE/translation.json | 1 - src/lib/i18n/locales/ko-KR/translation.json | 1 - src/lib/i18n/locales/lt-LT/translation.json | 1 - src/lib/i18n/locales/nb-NO/translation.json | 1 - src/lib/i18n/locales/nl-NL/translation.json | 1 - src/lib/i18n/locales/pa-IN/translation.json | 1 - src/lib/i18n/locales/pl-PL/translation.json | 1 - src/lib/i18n/locales/pt-BR/translation.json | 1 - src/lib/i18n/locales/pt-PT/translation.json | 1 - src/lib/i18n/locales/ru-RU/translation.json | 1 - src/lib/i18n/locales/sr-RS/translation.json | 1 - src/lib/i18n/locales/sv-SE/translation.json | 1 - src/lib/i18n/locales/tk-TW/translation.json | 1 - src/lib/i18n/locales/tr-TR/translation.json | 1 - src/lib/i18n/locales/uk-UA/translation.json | 1 - src/lib/i18n/locales/vi-VN/translation.json | 1 - src/lib/i18n/locales/zh-CN/translation.json | 1 - src/lib/i18n/locales/zh-TW/translation.json | 1 - 42 files changed, 525 insertions(+), 101 deletions(-) diff --git a/src/lib/components/admin/Settings/Audio.svelte b/src/lib/components/admin/Settings/Audio.svelte index 1ca97bff8..45413e100 100644 --- a/src/lib/components/admin/Settings/Audio.svelte +++ b/src/lib/components/admin/Settings/Audio.svelte @@ -18,11 +18,13 @@ let TTS_ENGINE = ''; let TTS_MODEL = ''; let TTS_VOICE = ''; + let showTTSKey = false; let STT_OPENAI_API_BASE_URL = ''; let STT_OPENAI_API_KEY = ''; let STT_ENGINE = ''; let STT_MODEL = ''; + let showSTTKey = false; let voices = []; let models = []; @@ -137,18 +139,60 @@
- +
+ + +
@@ -198,7 +242,7 @@ }} > - +
@@ -207,18 +251,60 @@
- +
+ + +
{/if} diff --git a/src/lib/components/admin/Settings/Connections.svelte b/src/lib/components/admin/Settings/Connections.svelte index 909a07581..5a45ef1d4 100644 --- a/src/lib/components/admin/Settings/Connections.svelte +++ b/src/lib/components/admin/Settings/Connections.svelte @@ -1,6 +1,7 @@ + +
+ + +
From 4d5e161a3e0305faef2c6b1c6d30afe7004bd22e Mon Sep 17 00:00:00 2001 From: rdavis Date: Tue, 25 Jun 2024 08:28:43 -0500 Subject: [PATCH 259/287] Updated Functions and Tools to use existing selected* Variable Applied formatting --- src/lib/components/workspace/Functions.svelte | 10 ++++------ src/lib/components/workspace/Prompts.svelte | 2 +- src/lib/components/workspace/Tools.svelte | 7 +++---- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index b73338d01..78f925391 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -41,9 +41,7 @@ let showValvesModal = false; let selectedFunction = null; - let showDeleteConfirm = false; - let deleteFunction = null; const shareHandler = async (tool) => { console.log(tool); @@ -250,8 +248,8 @@ exportHandler={() => { exportHandler(func); }} - deleteHandler={async () => { - deleteFunction = func; + deleteHandler={async () => { + selectedFunction = func; showDeleteConfirm = true; }} onClose={() => {}} @@ -396,11 +394,11 @@ bind:show={showDeleteConfirm} title={$i18n.t('Delete function?')} on:confirm={() => { - deleteHandler(deleteFunction); + deleteHandler(selectedFunction); }} >
- {$i18n.t('This will delete')} {deleteFunction.name}. + {$i18n.t('This will delete')} {selectedFunction.name}.
diff --git a/src/lib/components/workspace/Prompts.svelte b/src/lib/components/workspace/Prompts.svelte index ee87a75ae..e50911347 100644 --- a/src/lib/components/workspace/Prompts.svelte +++ b/src/lib/components/workspace/Prompts.svelte @@ -158,7 +158,7 @@ exportHandler={() => { exportHandler(prompt); }} - deleteHandler={async () => { + deleteHandler={async () => { deletePrompt = prompt; showDeleteConfirm = true; }} diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index 043f6473e..5920b34f5 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -38,7 +38,6 @@ let selectedTool = null; let showDeleteConfirm = false; - let deleteTool = null; const shareHandler = async (tool) => { console.log(tool); @@ -244,7 +243,7 @@ exportHandler(tool); }} deleteHandler={async () => { - deleteTool = tool; + selectedTool = tool; showDeleteConfirm = true; }} onClose={() => {}} @@ -379,11 +378,11 @@ bind:show={showDeleteConfirm} title={$i18n.t('Delete tool?')} on:confirm={() => { - deleteHandler(deleteTool); + deleteHandler(selectedTool); }} >
- {$i18n.t('This will delete')} {deleteTool.name}. + {$i18n.t('This will delete')} {selectedTool.name}.
From c14714700181c4b40e6fc464f8eccdf6e8696771 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 25 Jun 2024 08:00:32 -0700 Subject: [PATCH 260/287] chore: format --- backend/data/config.json | 1 - src/lib/components/admin/Settings/Images.svelte | 6 ++++-- src/lib/i18n/locales/zh-CN/translation.json | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/backend/data/config.json b/backend/data/config.json index f02eb8348..6c0ad2b9f 100644 --- a/backend/data/config.json +++ b/backend/data/config.json @@ -17,7 +17,6 @@ }, { "title": ["Show me a code snippet", "of a website's sticky header"], - ], "content": "Show me a code snippet of a website's sticky header in CSS and JavaScript." }, { diff --git a/src/lib/components/admin/Settings/Images.svelte b/src/lib/components/admin/Settings/Images.svelte index a6401031c..c220163b1 100644 --- a/src/lib/components/admin/Settings/Images.svelte +++ b/src/lib/components/admin/Settings/Images.svelte @@ -92,7 +92,9 @@ toast.success($i18n.t('Server connection verified')); } } else { - ({ AUTOMATIC1111_BASE_URL,AUTOMATIC1111_API_AUTH } = await getImageGenerationEngineUrls(localStorage.token)); + ({ AUTOMATIC1111_BASE_URL, AUTOMATIC1111_API_AUTH } = await getImageGenerationEngineUrls( + localStorage.token + )); } } }; @@ -293,7 +295,7 @@ href="https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/13993" target="_blank" > - {$i18n.t('(e.g. `sh webui.sh --api --api-auth username_password`)').replace('_',':')} + {$i18n.t('(e.g. `sh webui.sh --api --api-auth username_password`)').replace('_', ':')}
{:else if imageGenerationEngine === 'comfyui'} diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index c8d9dccb2..345e013bc 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -2,7 +2,7 @@ "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' 或 '-1' 表示无过期时间。", "(Beta)": "(测试版)", "(e.g. `sh webui.sh --api`)": "(例如 `sh webui.sh --api`)", - "(e.g. `sh webui.sh --api --api-auth username_password`)": "(例如 `sh webui.sh --api --api-auth username_password`)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "(例如 `sh webui.sh --api --api-auth username_password`)", "(latest)": "(最新版)", "{{ models }}": "{{ models }}", "{{ owner }}: You cannot delete a base model": "{{ owner }}:您不能删除基础模型", From 36e88d479be9a1fceb2db26532e31105a84370b4 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 25 Jun 2024 08:01:05 -0700 Subject: [PATCH 261/287] chore: format --- backend/apps/images/main.py | 26 ++++++++++---------- src/lib/i18n/locales/ar-BH/translation.json | 4 +++ src/lib/i18n/locales/bg-BG/translation.json | 4 +++ src/lib/i18n/locales/bn-BD/translation.json | 4 +++ src/lib/i18n/locales/ca-ES/translation.json | 4 +++ src/lib/i18n/locales/ceb-PH/translation.json | 4 +++ src/lib/i18n/locales/de-DE/translation.json | 4 +++ src/lib/i18n/locales/dg-DG/translation.json | 4 +++ src/lib/i18n/locales/en-GB/translation.json | 4 +++ src/lib/i18n/locales/en-US/translation.json | 4 +++ src/lib/i18n/locales/es-ES/translation.json | 4 +++ src/lib/i18n/locales/fa-IR/translation.json | 4 +++ src/lib/i18n/locales/fi-FI/translation.json | 4 +++ src/lib/i18n/locales/fr-CA/translation.json | 4 +++ src/lib/i18n/locales/fr-FR/translation.json | 4 +++ src/lib/i18n/locales/he-IL/translation.json | 4 +++ src/lib/i18n/locales/hi-IN/translation.json | 4 +++ src/lib/i18n/locales/hr-HR/translation.json | 4 +++ src/lib/i18n/locales/it-IT/translation.json | 4 +++ src/lib/i18n/locales/ja-JP/translation.json | 4 +++ src/lib/i18n/locales/ka-GE/translation.json | 4 +++ src/lib/i18n/locales/ko-KR/translation.json | 4 +++ src/lib/i18n/locales/lt-LT/translation.json | 4 +++ src/lib/i18n/locales/nb-NO/translation.json | 4 +++ src/lib/i18n/locales/nl-NL/translation.json | 4 +++ src/lib/i18n/locales/pa-IN/translation.json | 4 +++ src/lib/i18n/locales/pl-PL/translation.json | 4 +++ src/lib/i18n/locales/pt-BR/translation.json | 4 +++ src/lib/i18n/locales/pt-PT/translation.json | 4 +++ src/lib/i18n/locales/ru-RU/translation.json | 4 +++ src/lib/i18n/locales/sr-RS/translation.json | 4 +++ src/lib/i18n/locales/sv-SE/translation.json | 4 +++ src/lib/i18n/locales/tk-TW/translation.json | 4 +++ src/lib/i18n/locales/tr-TR/translation.json | 4 +++ src/lib/i18n/locales/uk-UA/translation.json | 4 +++ src/lib/i18n/locales/vi-VN/translation.json | 4 +++ src/lib/i18n/locales/zh-CN/translation.json | 4 +-- src/lib/i18n/locales/zh-TW/translation.json | 4 +++ 38 files changed, 159 insertions(+), 15 deletions(-) diff --git a/backend/apps/images/main.py b/backend/apps/images/main.py index a5690649a..6ec64d280 100644 --- a/backend/apps/images/main.py +++ b/backend/apps/images/main.py @@ -92,9 +92,9 @@ def get_automatic1111_api_auth(): if app.state.config.AUTOMATIC1111_API_AUTH == None: return "" else: - auth1111_byte_string = app.state.config.AUTOMATIC1111_API_AUTH.encode('utf-8') + auth1111_byte_string = app.state.config.AUTOMATIC1111_API_AUTH.encode("utf-8") auth1111_base64_encoded_bytes = base64.b64encode(auth1111_byte_string) - auth1111_base64_encoded_string = auth1111_base64_encoded_bytes.decode('utf-8') + auth1111_base64_encoded_string = auth1111_base64_encoded_bytes.decode("utf-8") return f"Basic {auth1111_base64_encoded_string}" @@ -138,7 +138,7 @@ async def get_engine_url(user=Depends(get_admin_user)): @app.post("/url/update") async def update_engine_url( - form_data: EngineUrlUpdateForm, user=Depends(get_admin_user) + form_data: EngineUrlUpdateForm, user=Depends(get_admin_user) ): if form_data.AUTOMATIC1111_BASE_URL == None: app.state.config.AUTOMATIC1111_BASE_URL = AUTOMATIC1111_BASE_URL @@ -189,7 +189,7 @@ async def get_openai_config(user=Depends(get_admin_user)): @app.post("/openai/config/update") async def update_openai_config( - form_data: OpenAIConfigUpdateForm, user=Depends(get_admin_user) + form_data: OpenAIConfigUpdateForm, user=Depends(get_admin_user) ): if form_data.key == "": raise HTTPException(status_code=400, detail=ERROR_MESSAGES.API_KEY_NOT_FOUND) @@ -215,7 +215,7 @@ async def get_image_size(user=Depends(get_admin_user)): @app.post("/size/update") async def update_image_size( - form_data: ImageSizeUpdateForm, user=Depends(get_admin_user) + form_data: ImageSizeUpdateForm, user=Depends(get_admin_user) ): pattern = r"^\d+x\d+$" # Regular expression pattern if re.match(pattern, form_data.size): @@ -242,7 +242,7 @@ async def get_image_size(user=Depends(get_admin_user)): @app.post("/steps/update") async def update_image_size( - form_data: ImageStepsUpdateForm, user=Depends(get_admin_user) + form_data: ImageStepsUpdateForm, user=Depends(get_admin_user) ): if form_data.steps >= 0: app.state.config.IMAGE_STEPS = form_data.steps @@ -280,7 +280,7 @@ def get_models(user=Depends(get_current_user)): else: r = requests.get( url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/sd-models", - headers={"authorization": get_automatic1111_api_auth()} + headers={"authorization": get_automatic1111_api_auth()}, ) models = r.json() return list( @@ -308,7 +308,7 @@ async def get_default_model(user=Depends(get_admin_user)): else: r = requests.get( url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/options", - headers={"authorization": get_automatic1111_api_auth()} + headers={"authorization": get_automatic1111_api_auth()}, ) options = r.json() return {"model": options["sd_model_checkpoint"]} @@ -329,7 +329,7 @@ def set_model_handler(model: str): api_auth = get_automatic1111_api_auth() r = requests.get( url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/options", - headers={"authorization": api_auth} + headers={"authorization": api_auth}, ) options = r.json() @@ -346,8 +346,8 @@ def set_model_handler(model: str): @app.post("/models/default/update") def update_default_model( - form_data: UpdateModelForm, - user=Depends(get_current_user), + form_data: UpdateModelForm, + user=Depends(get_current_user), ): return set_model_handler(form_data.model) @@ -423,8 +423,8 @@ def save_url_image(url): @app.post("/generations") def generate_image( - form_data: GenerateImageForm, - user=Depends(get_current_user), + form_data: GenerateImageForm, + user=Depends(get_current_user), ): width, height = tuple(map(int, app.state.config.IMAGE_SIZE.split("x"))) diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index d9c68c6cb..4b9a80566 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' أو '-1' لا توجد انتهاء", "(Beta)": "(تجريبي)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "( `sh webui.sh --api`مثال)", "(latest)": "(الأخير)", "{{ models }}": "{{ نماذج }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "أغسطس", "Auto-playback response": "استجابة التشغيل التلقائي", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 الرابط الرئيسي", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 الرابط مطلوب", "available!": "متاح", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.", "Enter {{role}} message here": "أدخل رسالة {{role}} هنا", "Enter a detail about yourself for your LLMs to recall": "ادخل معلومات عنك تريد أن يتذكرها الموديل", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "أدخل مفتاح واجهة برمجة تطبيقات البحث الشجاع", "Enter Chunk Overlap": "أدخل الChunk Overlap", "Enter Chunk Size": "أدخل Chunk الحجم", @@ -294,6 +297,7 @@ "Import Models": "استيراد النماذج", "Import Prompts": "مطالبات الاستيراد", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "قم بتضمين علامة `-api` عند تشغيل Stable-diffusion-webui", "Info": "معلومات", "Input commands": "إدخال الأوامر", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 9fdb2a4ce..be17f89c3 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' или '-1' за неограничен срок.", "(Beta)": "(Бета)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(например `sh webui.sh --api`)", "(latest)": "(последна)", "{{ models }}": "{{ модели }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Август", "Auto-playback response": "Аувтоматично възпроизвеждане на Отговора", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Базов URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Базов URL е задължителен.", "available!": "наличен!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.", "Enter {{role}} message here": "Въведете съобщение за {{role}} тук", "Enter a detail about yourself for your LLMs to recall": "Въведете подробности за себе си, за да се herinnerат вашите LLMs", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Въведете Brave Search API ключ", "Enter Chunk Overlap": "Въведете Chunk Overlap", "Enter Chunk Size": "Въведете Chunk Size", @@ -294,6 +297,7 @@ "Import Models": "Импортиране на модели", "Import Prompts": "Импортване на промптове", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Включете флага `--api`, когато стартирате stable-diffusion-webui", "Info": "Информация", "Input commands": "Въведете команди", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index b76409820..1228483ef 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' অথবা অনির্দিষ্টকাল মেয়াদের জন্য '-1' ", "(Beta)": "(পরিক্ষামূলক)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(যেমন `sh webui.sh --api`)", "(latest)": "(সর্বশেষ)", "{{ models }}": "{{ মডেল}}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "আগস্ট", "Auto-playback response": "রেসপন্স অটো-প্লেব্যাক", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 বেজ ইউআরএল", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 বেজ ইউআরএল আবশ্যক", "available!": "উপলব্ধ!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "আপনার সিএসভি ফাইলটিতে এই ক্রমে 4 টি কলাম অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন: নাম, ইমেল, পাসওয়ার্ড, ভূমিকা।.", "Enter {{role}} message here": "{{role}} মেসেজ এখানে লিখুন", "Enter a detail about yourself for your LLMs to recall": "আপনার এলএলএমগুলি স্মরণ করার জন্য নিজের সম্পর্কে একটি বিশদ লিখুন", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "সাহসী অনুসন্ধান API কী লিখুন", "Enter Chunk Overlap": "চাঙ্ক ওভারল্যাপ লিখুন", "Enter Chunk Size": "চাংক সাইজ লিখুন", @@ -294,6 +297,7 @@ "Import Models": "মডেল আমদানি করুন", "Import Prompts": "প্রম্পটগুলো ইমপোর্ট করুন", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui চালু করার সময় `--api` ফ্ল্যাগ সংযুক্ত করুন", "Info": "তথ্য", "Input commands": "ইনপুট কমান্ডস", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index df39ecab5..82e19c379 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' perquè no caduqui mai.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)", "(latest)": "(últim)", "{{ models }}": "{{ models }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Agost", "Auto-playback response": "Reproduir la resposta automàticament", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "URL Base d'AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "Es requereix l'URL Base d'AUTOMATIC1111.", "available!": "disponible!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que els teus fitxers CSV inclouen 4 columnes en aquest ordre: Nom, Correu electrònic, Contrasenya, Rol.", "Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}", "Enter a detail about yourself for your LLMs to recall": "Introdueix un detall sobre tu què els teus models de llenguatge puguin recordar", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Introdueix la clau API de Brave Search", "Enter Chunk Overlap": "Introdueix la mida de solapament de blocs", "Enter Chunk Size": "Introdueix la mida del bloc", @@ -294,6 +297,7 @@ "Import Models": "Importar models", "Import Prompts": "Importar indicacions", "Import Tools": "Importar eines", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Inclou `--api` quan executis stable-diffusion-webui", "Info": "Informació", "Input commands": "Entra comandes", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 805475e98..e597b8e14 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' para walay expiration.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(pananglitan `sh webui.sh --api`)", "(latest)": "", "{{ models }}": "", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "", "Auto-playback response": "Autoplay nga tubag", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "Base URL AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "Ang AUTOMATIC1111 base URL gikinahanglan.", "available!": "magamit!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Enter {{role}} message here": "Pagsulod sa mensahe {{role}} dinhi", "Enter a detail about yourself for your LLMs to recall": "", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "", "Enter Chunk Overlap": "Pagsulod sa block overlap", "Enter Chunk Size": "Isulod ang block size", @@ -294,6 +297,7 @@ "Import Models": "", "Import Prompts": "Import prompt", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Iapil ang `--api` nga bandila kung nagdagan nga stable-diffusion-webui", "Info": "", "Input commands": "Pagsulod sa input commands", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index b5b29042f..b6797d272 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' oder '-1' für kein Ablaufdatum.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(z.B. `sh webui.sh --api`)", "(latest)": "(neueste)", "{{ models }}": "{{ Modelle }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "August", "Auto-playback response": "Automatische Wiedergabe der Antwort", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Basis URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Basis URL wird benötigt", "available!": "verfügbar!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Stellen Sie sicher, dass Ihre CSV-Datei 4 Spalten in dieser Reihenfolge enthält: Name, E-Mail, Passwort, Rolle.", "Enter {{role}} message here": "Gib die {{role}} Nachricht hier ein", "Enter a detail about yourself for your LLMs to recall": "Geben Sie einen Detail über sich selbst ein, um für Ihre LLMs zu erinnern", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Geben Sie den API-Schlüssel für die Brave-Suche ein", "Enter Chunk Overlap": "Gib den Chunk Overlap ein", "Enter Chunk Size": "Gib die Chunk Size ein", @@ -294,6 +297,7 @@ "Import Models": "Modelle importieren", "Import Prompts": "Prompts importieren", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Füge das `--api`-Flag hinzu, wenn du stable-diffusion-webui nutzt", "Info": "Info", "Input commands": "Eingabebefehle", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 13a513da5..63cd8fdf3 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' or '-1' for no expire. Much permanent, very wow.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(such e.g. `sh webui.sh --api`)", "(latest)": "(much latest)", "{{ models }}": "", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "", "Auto-playback response": "Auto-playback response", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Base URL is required.", "available!": "available! So excite!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Enter {{role}} message here": "Enter {{role}} bork here", "Enter a detail about yourself for your LLMs to recall": "", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "", "Enter Chunk Overlap": "Enter Overlap of Chunks", "Enter Chunk Size": "Enter Size of Chunk", @@ -294,6 +297,7 @@ "Import Models": "", "Import Prompts": "Import Promptos", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Include `--api` flag when running stable-diffusion-webui", "Info": "", "Input commands": "Input commands", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index d3a869e83..a6e461da5 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "", "(Beta)": "", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "", "(latest)": "", "{{ models }}": "", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "", "Auto-playback response": "", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "", "AUTOMATIC1111 Base URL is required.": "", "available!": "", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Enter {{role}} message here": "", "Enter a detail about yourself for your LLMs to recall": "", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "", "Enter Chunk Overlap": "", "Enter Chunk Size": "", @@ -294,6 +297,7 @@ "Import Models": "", "Import Prompts": "", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "", "Info": "", "Input commands": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index d3a869e83..a6e461da5 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "", "(Beta)": "", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "", "(latest)": "", "{{ models }}": "", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "", "Auto-playback response": "", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "", "AUTOMATIC1111 Base URL is required.": "", "available!": "", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Enter {{role}} message here": "", "Enter a detail about yourself for your LLMs to recall": "", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "", "Enter Chunk Overlap": "", "Enter Chunk Size": "", @@ -294,6 +297,7 @@ "Import Models": "", "Import Prompts": "", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "", "Info": "", "Input commands": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 186e888a1..d1cea1d24 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' para evitar expiración.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(p.ej. `sh webui.sh --api`)", "(latest)": "(latest)", "{{ models }}": "{{ modelos }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Agosto", "Auto-playback response": "Respuesta de reproducción automática", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "Dirección URL de AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "La dirección URL de AUTOMATIC1111 es requerida.", "available!": "¡disponible!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Asegúrese de que su archivo CSV incluya 4 columnas en este orden: Nombre, Correo Electrónico, Contraseña, Rol.", "Enter {{role}} message here": "Ingrese el mensaje {{role}} aquí", "Enter a detail about yourself for your LLMs to recall": "Ingrese un detalle sobre usted para que sus LLMs recuerden", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Ingresa la clave de API de Brave Search", "Enter Chunk Overlap": "Ingresar superposición de fragmentos", "Enter Chunk Size": "Ingrese el tamaño del fragmento", @@ -294,6 +297,7 @@ "Import Models": "Importar modelos", "Import Prompts": "Importar Prompts", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Incluir el indicador `--api` al ejecutar stable-diffusion-webui", "Info": "Información", "Input commands": "Ingresar comandos", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index e87698310..1b3c9cc91 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' یا '-1' برای غیر فعال کردن انقضا.", "(Beta)": "(بتا)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)", "(latest)": "(آخرین)", "{{ models }}": "{{ مدل }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "آگوست", "Auto-playback response": "پخش خودکار پاسخ ", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "پایه URL AUTOMATIC1111 ", "AUTOMATIC1111 Base URL is required.": "به URL پایه AUTOMATIC1111 مورد نیاز است.", "available!": "در دسترس!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "اطمینان حاصل کنید که فایل CSV شما شامل چهار ستون در این ترتیب است: نام، ایمیل، رمز عبور، نقش.", "Enter {{role}} message here": "پیام {{role}} را اینجا وارد کنید", "Enter a detail about yourself for your LLMs to recall": "برای ذخیره سازی اطلاعات خود، یک توضیح کوتاه درباره خود را وارد کنید", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "کلید API جستجوی شجاع را وارد کنید", "Enter Chunk Overlap": "مقدار Chunk Overlap را وارد کنید", "Enter Chunk Size": "مقدار Chunk Size را وارد کنید", @@ -294,6 +297,7 @@ "Import Models": "واردات مدلها", "Import Prompts": "ایمپورت پرامپت\u200cها", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "فلگ `--api` را هنکام اجرای stable-diffusion-webui استفاده کنید.", "Info": "اطلاعات", "Input commands": "ورودی دستورات", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index 79d58a8b6..b30e96751 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' tai '-1' jottei vanhene.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(esim. `sh webui.sh --api`)", "(latest)": "(uusin)", "{{ models }}": "{{ mallit }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "elokuu", "Auto-playback response": "Soita vastaus automaattisesti", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111-perus-URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111-perus-URL vaaditaan.", "available!": "saatavilla!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Varmista, että CSV-tiedostossasi on 4 saraketta seuraavassa järjestyksessä: Nimi, Sähköposti, Salasana, Rooli.", "Enter {{role}} message here": "Kirjoita {{role}} viesti tähän", "Enter a detail about yourself for your LLMs to recall": "Kirjoita tieto itseestäsi LLM:ien muistamiseksi", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Anna Brave Search API -avain", "Enter Chunk Overlap": "Syötä osien päällekkäisyys", "Enter Chunk Size": "Syötä osien koko", @@ -294,6 +297,7 @@ "Import Models": "Mallien tuominen", "Import Prompts": "Tuo kehotteita", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Sisällytä `--api`-parametri suorittaessasi stable-diffusion-webui", "Info": "Info", "Input commands": "Syötä komennot", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index c77376ddb..7ccf1c7e2 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ou '-1' pour aucune expiration.", "(Beta)": "(Bêta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(par ex. `sh webui.sh --api`)", "(latest)": "(dernière)", "{{ models }}": "{{ modèles }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Août", "Auto-playback response": "Réponse en lecture automatique", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "URL de base AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "L'URL de base AUTOMATIC1111 est requise.", "available!": "disponible !", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assurez-vous que votre fichier CSV inclut 4 colonnes dans cet ordre : Nom, Email, Mot de passe, Rôle.", "Enter {{role}} message here": "Entrez le message {{role}} ici", "Enter a detail about yourself for your LLMs to recall": "Entrez un détail sur vous pour que vos LLMs puissent le rappeler", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Entrez la clé API de recherche brave", "Enter Chunk Overlap": "Entrez le chevauchement de bloc", "Enter Chunk Size": "Entrez la taille du bloc", @@ -294,6 +297,7 @@ "Import Models": "Importer des modèles", "Import Prompts": "Importer les prompts", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Inclure l'indicateur `--api` lors de l'exécution de stable-diffusion-webui", "Info": "L’info", "Input commands": "Entrez des commandes d'entrée", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 21094f09c..a52928d55 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ou '-1' pour aucune expiration.", "(Beta)": "(Bêta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(par ex. `sh webui.sh --api`)", "(latest)": "(plus récent)", "{{ models }}": "{{ models }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Août", "Auto-playback response": "Réponse en lecture automatique", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "URL de base AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "L'URL de base AUTOMATIC1111 est requise.", "available!": "disponible !", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que le fichier CSV contienne 4 colonnes dans cet ordre : Name (Nom), Email, Password (Mot de passe), Role (Rôle).", "Enter {{role}} message here": "Entrez le message {{role}} ici", "Enter a detail about yourself for your LLMs to recall": "Saisissez une donnée vous concernant pour que vos LLMs s'en souviennent", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Entrez la clé API Brave Search", "Enter Chunk Overlap": "Entrez le chevauchement de bloc", "Enter Chunk Size": "Entrez la taille du bloc", @@ -294,6 +297,7 @@ "Import Models": "Importer des Modèles", "Import Prompts": "Importer des Prompts", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Inclure le drapeau `--api` lors de l'exécution de stable-diffusion-webui", "Info": "Info", "Input commands": "Entrez les commandes d'entrée", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index da855f755..d9255a970 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' או '-1' ללא תפוגה.", "(Beta)": "(בטא)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(למשל `sh webui.sh --api`)", "(latest)": "(האחרון)", "{{ models }}": "{{ דגמים }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "אוגוסט", "Auto-playback response": "תגובת השמעה אוטומטית", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "כתובת URL בסיסית של AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "נדרשת כתובת URL בסיסית של AUTOMATIC1111", "available!": "זמין!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ודא שקובץ ה-CSV שלך כולל 4 עמודות בסדר הבא: שם, דוא\"ל, סיסמה, תפקיד.", "Enter {{role}} message here": "הזן הודעת {{role}} כאן", "Enter a detail about yourself for your LLMs to recall": "הזן פרטים על עצמך כדי שLLMs יזכור", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "הזן מפתח API של חיפוש אמיץ", "Enter Chunk Overlap": "הזן חפיפת נתונים", "Enter Chunk Size": "הזן גודל נתונים", @@ -294,6 +297,7 @@ "Import Models": "ייבוא דגמים", "Import Prompts": "יבוא פקודות", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "כלול את הדגל `--api` בעת הרצת stable-diffusion-webui", "Info": "מידע", "Input commands": "פקודות קלט", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index fd40d5498..cbb32f630 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' or '-1' बिना किसी समाप्ति के", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)", "(latest)": "(latest)", "{{ models }}": "{{ मॉडल }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "अगस्त", "Auto-playback response": "ऑटो-प्लेबैक प्रतिक्रिया", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 बेस यूआरएल", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 का बेस यूआरएल आवश्यक है।", "available!": "उपलब्ध!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "सुनिश्चित करें कि आपकी CSV फ़ाइल में इस क्रम में 4 कॉलम शामिल हैं: नाम, ईमेल, पासवर्ड, भूमिका।", "Enter {{role}} message here": "यहां {{role}} संदेश दर्ज करें", "Enter a detail about yourself for your LLMs to recall": "अपने एलएलएम को याद करने के लिए अपने बारे में एक विवरण दर्ज करें", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Brave सर्च एपीआई कुंजी डालें", "Enter Chunk Overlap": "चंक ओवरलैप दर्ज करें", "Enter Chunk Size": "खंड आकार दर्ज करें", @@ -294,6 +297,7 @@ "Import Models": "आयात मॉडल", "Import Prompts": "प्रॉम्प्ट आयात करें", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui चलाते समय `--api` ध्वज शामिल करें", "Info": "सूचना-विषयक", "Input commands": "इनपुट क命", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index f0ebde409..79f9b1aa0 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ili '-1' za bez isteka.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(npr. `sh webui.sh --api`)", "(latest)": "(najnovije)", "{{ models }}": "{{ modeli }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Kolovoz", "Auto-playback response": "Automatska reprodukcija odgovora", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 osnovni URL", "AUTOMATIC1111 Base URL is required.": "Potreban je AUTOMATIC1111 osnovni URL.", "available!": "dostupno!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Provjerite da vaša CSV datoteka uključuje 4 stupca u ovom redoslijedu: Name, Email, Password, Role.", "Enter {{role}} message here": "Unesite {{role}} poruku ovdje", "Enter a detail about yourself for your LLMs to recall": "Unesite pojedinosti o sebi da bi učitali memoriju u LLM", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Unesite Brave Search API ključ", "Enter Chunk Overlap": "Unesite preklapanje dijelova", "Enter Chunk Size": "Unesite veličinu dijela", @@ -294,6 +297,7 @@ "Import Models": "Uvoz modela", "Import Prompts": "Uvoz prompta", "Import Tools": "Uvoz alata", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Uključite zastavicu `--api` prilikom pokretanja stable-diffusion-webui", "Info": "Informacije", "Input commands": "Unos naredbi", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 60cc2e407..df3eb225a 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' per nessuna scadenza.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(p.e. `sh webui.sh --api`)", "(latest)": "(ultima)", "{{ models }}": "{{ modelli }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Agosto", "Auto-playback response": "Riproduzione automatica della risposta", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "URL base AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "L'URL base AUTOMATIC1111 è obbligatorio.", "available!": "disponibile!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assicurati che il tuo file CSV includa 4 colonne in questo ordine: Nome, Email, Password, Ruolo.", "Enter {{role}} message here": "Inserisci il messaggio per {{role}} qui", "Enter a detail about yourself for your LLMs to recall": "Inserisci un dettaglio su di te per che i LLM possano ricordare", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Inserisci la chiave API di Brave Search", "Enter Chunk Overlap": "Inserisci la sovrapposizione chunk", "Enter Chunk Size": "Inserisci la dimensione chunk", @@ -294,6 +297,7 @@ "Import Models": "Importazione di modelli", "Import Prompts": "Importa prompt", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Includi il flag `--api` quando esegui stable-diffusion-webui", "Info": "Informazioni", "Input commands": "Comandi di input", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 30f4897cd..1bc4af3da 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' または '-1' で無期限。", "(Beta)": "(ベータ版)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(例: `sh webui.sh --api`)", "(latest)": "(最新)", "{{ models }}": "{{ モデル }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "8月", "Auto-playback response": "応答の自動再生", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 ベース URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 ベース URL が必要です。", "available!": "利用可能!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSVファイルに4つの列が含まれていることを確認してください: Name, Email, Password, Role.", "Enter {{role}} message here": "{{role}} メッセージをここに入力してください", "Enter a detail about yourself for your LLMs to recall": "LLM が記憶するために、自分についての詳細を入力してください", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Brave Search APIキーの入力", "Enter Chunk Overlap": "チャンクオーバーラップを入力してください", "Enter Chunk Size": "チャンクサイズを入力してください", @@ -294,6 +297,7 @@ "Import Models": "モデルのインポート", "Import Prompts": "プロンプトをインポート", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webuiを実行する際に`--api`フラグを含める", "Info": "情報", "Input commands": "入力コマンド", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index fd668ce78..a7c00d4e2 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ან '-1' ვადის გასვლისთვის.", "(Beta)": "(ბეტა)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(მაგ. `sh webui.sh --api`)", "(latest)": "(უახლესი)", "{{ models }}": "{{ models }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "აგვისტო", "Auto-playback response": "ავტომატური დაკვრის პასუხი", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 საბაზისო მისამართი", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 საბაზისო მისამართი აუცილებელია", "available!": "ხელმისაწვდომია!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "გთხოვთ, უზრუნველყოთ, რომთქვევის CSV-ფაილი შეიცავს 4 ველი, ჩაწერილი ორივე ველი უდრის პირველი ველით.", "Enter {{role}} message here": "შეიყვანე {{role}} შეტყობინება აქ", "Enter a detail about yourself for your LLMs to recall": "შეიყვანე დეტალი ჩემთათვის, რომ ჩვენი LLMs-ს შეიძლოს აღაქვს", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "შეიყვანეთ Brave Search API გასაღები", "Enter Chunk Overlap": "შეიყვანეთ ნაწილის გადახურვა", "Enter Chunk Size": "შეიყვანე ბლოკის ზომა", @@ -294,6 +297,7 @@ "Import Models": "იმპორტის მოდელები", "Import Prompts": "მოთხოვნების იმპორტი", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "ჩართეთ `--api` დროშა stable-diffusion-webui-ის გაშვებისას", "Info": "ინფორმაცია", "Input commands": "შეყვანით ბრძანებებს", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 984b9bbb6..d477ab807 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "만료 없음은 '-1', 아니면 's', 'm', 'h', 'd', 'w' 중 하나를 사용하세요.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(예: `sh webui.sh --api`)", "(latest)": "(latest)", "{{ models }}": "{{ models }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "8월", "Auto-playback response": "응답 자동 재생", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 기본 URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 기본 URL 설정이 필요합니다.", "available!": "사용 가능!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV 파일에 이름, 이메일, 비밀번호, 역할 4개의 컬럼이 순서대로 포함되어 있는지 확인하세요.", "Enter {{role}} message here": "여기에 {{role}} 메시지 입력", "Enter a detail about yourself for your LLMs to recall": "자신에 대한 세부사항을 입력하여 LLM들이 기억할 수 있도록 하세요.", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Brave Search API Key 입력", "Enter Chunk Overlap": "청크 오버랩 입력", "Enter Chunk Size": "청크 크기 입력", @@ -294,6 +297,7 @@ "Import Models": "모델 가져오기", "Import Prompts": "프롬프트 가져오기", "Import Tools": "도구 가져오기", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui를 실행 시 `--api` 플래그 포함 필요", "Info": "정보", "Input commands": "입력 명령", diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index 9d9bcabcf..6338c48ad 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' arba '-1' kad neišteitų iš galiojimo.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(pvz. `sh webui.sh --api`)", "(latest)": "(naujausias)", "{{ models }}": "", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Rugpjūtis", "Auto-playback response": "Automatinis atsakymo skaitymas", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 bazės nuoroda", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 bazės nuoroda reikalinga.", "available!": "prieinama!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Įsitikinkite, kad CSV failas turi 4 kolonas šiuo eiliškumu: Name, Email, Password, Role.", "Enter {{role}} message here": "Įveskite {{role}} žinutę čia", "Enter a detail about yourself for your LLMs to recall": "", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "", "Enter Chunk Overlap": "Įveskite blokų persidengimą", "Enter Chunk Size": "Įveskite blokų dydį", @@ -294,6 +297,7 @@ "Import Models": "", "Import Prompts": "Importuoti užklausas", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Pridėti `--api` kai vykdomas stable-diffusion-webui", "Info": "", "Input commands": "Įvesties komandos", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index 8e57c4da5..0ad6d4724 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 't', 'd', 'u' eller '-1' for ingen utløp.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(f.eks. `sh webui.sh --api`)", "(latest)": "(siste)", "{{ models }}": "{{ modeller }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "August", "Auto-playback response": "Automatisk avspilling av svar", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Grunn-URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Grunn-URL kreves.", "available!": "tilgjengelig!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Sørg for at CSV-filen din inkluderer 4 kolonner i denne rekkefølgen: Navn, E-post, Passord, Rolle.", "Enter {{role}} message here": "Skriv inn {{role}} melding her", "Enter a detail about yourself for your LLMs to recall": "Skriv inn en detalj om deg selv som LLM-ene dine kan huske", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Skriv inn Brave Search API-nøkkel", "Enter Chunk Overlap": "Skriv inn Chunk Overlap", "Enter Chunk Size": "Skriv inn Chunk-størrelse", @@ -294,6 +297,7 @@ "Import Models": "Importer modeller", "Import Prompts": "Importer prompts", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Inkluder `--api`-flagget når du kjører stable-diffusion-webui", "Info": "Info", "Input commands": "Inntast kommandoer", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index b4de94d85..3cc5bcaba 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' of '-1' for geen vervaldatum.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)", "(latest)": "(nieuwste)", "{{ models }}": "{{ modellen }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Augustus", "Auto-playback response": "Automatisch afspelen van antwoord", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Basis URL is verplicht", "available!": "beschikbaar!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Zorg ervoor dat uw CSV-bestand de volgende vier kolommen in deze volgorde bevat: Naam, E-mail, Wachtwoord, Rol.", "Enter {{role}} message here": "Voeg {{role}} bericht hier toe", "Enter a detail about yourself for your LLMs to recall": "Voer een detail over jezelf in voor je LLMs om het her te onthouden", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Voer de Brave Search API-sleutel in", "Enter Chunk Overlap": "Voeg Chunk Overlap toe", "Enter Chunk Size": "Voeg Chunk Size toe", @@ -294,6 +297,7 @@ "Import Models": "Modellen importeren", "Import Prompts": "Importeer Prompts", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Voeg `--api` vlag toe bij het uitvoeren van stable-diffusion-webui", "Info": "Info", "Input commands": "Voer commando's in", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index 41f5128d7..12fe51544 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'ਸ', 'ਮ', 'ਘੰ', 'ਦ', 'ਹਫ਼ਤਾ' ਜਾਂ '-1' ਬਿਨਾ ਮਿਆਦ ਦੇ।", "(Beta)": "(ਬੀਟਾ)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(ਉਦਾਹਰਣ ਦੇ ਤੌਰ ਤੇ `sh webui.sh --api`)", "(latest)": "(ਤਾਜ਼ਾ)", "{{ models }}": "{{ ਮਾਡਲ }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "ਅਗਸਤ", "Auto-playback response": "ਆਟੋ-ਪਲੇਬੈਕ ਜਵਾਬ", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 ਬੇਸ URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 ਬੇਸ URL ਦੀ ਲੋੜ ਹੈ।", "available!": "ਉਪਲਬਧ ਹੈ!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਤੁਹਾਡੀ CSV ਫਾਈਲ ਵਿੱਚ ਇਸ ਕ੍ਰਮ ਵਿੱਚ 4 ਕਾਲਮ ਹਨ: ਨਾਮ, ਈਮੇਲ, ਪਾਸਵਰਡ, ਭੂਮਿਕਾ।", "Enter {{role}} message here": "{{role}} ਸੁਨੇਹਾ ਇੱਥੇ ਦਰਜ ਕਰੋ", "Enter a detail about yourself for your LLMs to recall": "ਤੁਹਾਡੇ LLMs ਨੂੰ ਸੁਨੇਹਾ ਕਰਨ ਲਈ ਸੁਨੇਹਾ ਇੱਥੇ ਦਰਜ ਕਰੋ", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "ਬਹਾਦਰ ਖੋਜ API ਕੁੰਜੀ ਦਾਖਲ ਕਰੋ", "Enter Chunk Overlap": "ਚੰਕ ਓਵਰਲੈਪ ਦਰਜ ਕਰੋ", "Enter Chunk Size": "ਚੰਕ ਆਕਾਰ ਦਰਜ ਕਰੋ", @@ -294,6 +297,7 @@ "Import Models": "ਮਾਡਲ ਆਯਾਤ ਕਰੋ", "Import Prompts": "ਪ੍ਰੰਪਟ ਆਯਾਤ ਕਰੋ", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "ਸਟੇਬਲ-ਡਿਫਿਊਸ਼ਨ-ਵੈਬਯੂਆਈ ਚਲਾਉਣ ਸਮੇਂ `--api` ਝੰਡਾ ਸ਼ਾਮਲ ਕਰੋ", "Info": "ਜਾਣਕਾਰੀ", "Input commands": "ਇਨਪੁਟ ਕਮਾਂਡਾਂ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 44baeba86..ff02de9a2 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' lub '-1' dla bez wygaśnięcia.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(np. `sh webui.sh --api`)", "(latest)": "(najnowszy)", "{{ models }}": "{{ modele }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Sierpień", "Auto-playback response": "Odtwarzanie automatyczne odpowiedzi", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "Podstawowy adres URL AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "Podstawowy adres URL AUTOMATIC1111 jest wymagany.", "available!": "dostępny!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Upewnij się, że twój plik CSV zawiera 4 kolumny w następującym porządku: Nazwa, Email, Hasło, Rola.", "Enter {{role}} message here": "Wprowadź wiadomość {{role}} tutaj", "Enter a detail about yourself for your LLMs to recall": "Wprowadź szczegóły o sobie, aby LLMs mogli pamiętać", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Wprowadź klucz API Brave Search", "Enter Chunk Overlap": "Wprowadź zakchodzenie bloku", "Enter Chunk Size": "Wprowadź rozmiar bloku", @@ -294,6 +297,7 @@ "Import Models": "Importowanie modeli", "Import Prompts": "Importuj prompty", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Dołącz flagę `--api` podczas uruchamiania stable-diffusion-webui", "Info": "Informacji", "Input commands": "Wprowadź komendy", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index 419c2119b..4fa72ac19 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ou '-1' para não expirar.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(por exemplo, `sh webui.sh --api`)", "(latest)": "(mais recente)", "{{ models }}": "{{ modelos }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Agosto", "Auto-playback response": "Reprodução automática da resposta", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "A URL Base do AUTOMATIC1111 é obrigatória.", "available!": "disponível!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Garanta que seu arquivo CSV inclua 4 colunas nesta ordem: Nome, E-mail, Senha, Função.", "Enter {{role}} message here": "Digite a mensagem de {{role}} aqui", "Enter a detail about yourself for your LLMs to recall": "Digite um detalhe sobre você para que seus LLMs possam lembrar", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Insira a chave da API do Brave Search", "Enter Chunk Overlap": "Digite a Sobreposição de Fragmento", "Enter Chunk Size": "Digite o Tamanho do Fragmento", @@ -294,6 +297,7 @@ "Import Models": "Modelos de Importação", "Import Prompts": "Importar Prompts", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Inclua a flag `--api` ao executar stable-diffusion-webui", "Info": "Informação", "Input commands": "Comandos de entrada", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index ca81b9501..ef62d4607 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' ou '-1' para nenhuma expiração.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(por exemplo, `sh webui.sh --api`)", "(latest)": "(mais recente)", "{{ models }}": "{{ modelos }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Agosto", "Auto-playback response": "Reprodução automática da resposta", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "O URL Base do AUTOMATIC1111 é obrigatório.", "available!": "disponível!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Confirme que o seu ficheiro CSV inclui 4 colunas nesta ordem: Nome, E-mail, Senha, Função.", "Enter {{role}} message here": "Escreva a mensagem de {{role}} aqui", "Enter a detail about yourself for your LLMs to recall": "Escreva um detalhe sobre você para que os seus LLMs possam lembrar-se", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Escreva a chave da API do Brave Search", "Enter Chunk Overlap": "Escreva a Sobreposição de Fragmento", "Enter Chunk Size": "Escreva o Tamanho do Fragmento", @@ -294,6 +297,7 @@ "Import Models": "Importar Modelos", "Import Prompts": "Importar Prompts", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Inclua a flag `--api` ao executar stable-diffusion-webui", "Info": "Informação", "Input commands": "Comandos de entrada", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 8664b78c4..cec8857ce 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' или '-1' для не истечение.", "(Beta)": "(бета)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(например: `sh webui.sh --api`)", "(latest)": "(последний)", "{{ models }}": "{{ модели }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Август", "Auto-playback response": "Автоматическое воспроизведение ответа", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "Базовый адрес URL AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Необходима базовый адрес URL.", "available!": "доступный!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Убедитесь, что ваш CSV-файл включает в себя 4 столбца в следующем порядке: Имя, Электронная почта, Пароль, Роль.", "Enter {{role}} message here": "Введите сообщение {{role}} здесь", "Enter a detail about yourself for your LLMs to recall": "Введите детали о себе, чтобы LLMs могли запомнить", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Введите ключ API поиска Brave", "Enter Chunk Overlap": "Введите перекрытие фрагмента", "Enter Chunk Size": "Введите размер фрагмента", @@ -294,6 +297,7 @@ "Import Models": "Импорт моделей", "Import Prompts": "Импорт подсказок", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Добавьте флаг `--api` при запуске stable-diffusion-webui", "Info": "Информация", "Input commands": "Введите команды", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index 26ec244d2..bd1b1f5f4 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "„s“, „m“, „h“, „d“, „w“ или „-1“ за без истека.", "(Beta)": "(бета)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(нпр. `sh webui.sh --api`)", "(latest)": "(најновије)", "{{ models }}": "{{ модели }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Август", "Auto-playback response": "Самостално пуштање одговора", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "Основна адреса за AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "Потребна је основна адреса за AUTOMATIC1111.", "available!": "доступно!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверите се да ваша CSV датотека укључује 4 колоне у овом редоследу: Име, Е-пошта, Лозинка, Улога.", "Enter {{role}} message here": "Унесите {{role}} поруку овде", "Enter a detail about yourself for your LLMs to recall": "Унесите детаље за себе да ће LLMs преузимати", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Унесите БРАВЕ Сеарцх АПИ кључ", "Enter Chunk Overlap": "Унесите преклапање делова", "Enter Chunk Size": "Унесите величину дела", @@ -294,6 +297,7 @@ "Import Models": "Увези моделе", "Import Prompts": "Увези упите", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Укључи `--api` заставицу при покретању stable-diffusion-webui", "Info": "Инфо", "Input commands": "Унеси наредбе", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index 50ba68cd8..dfb5b8b4d 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' eller '-1' för inget utgångsdatum", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(t.ex. `sh webui.sh --api`)", "(latest)": "(senaste)", "{{ models }}": "{{ modeller }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "augusti", "Auto-playback response": "Automatisk uppspelning", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 bas-URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 bas-URL krävs.", "available!": "tillgänglig!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Se till att din CSV-fil innehåller fyra kolumner i denna ordning: Name, Email, Password, Role.", "Enter {{role}} message here": "Skriv {{role}} meddelande här", "Enter a detail about yourself for your LLMs to recall": "Skriv en detalj om dig själv för att dina LLMs ska komma ihåg", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Ange API-nyckel för Brave Search", "Enter Chunk Overlap": "Ange chunköverlappning", "Enter Chunk Size": "Ange chunkstorlek", @@ -294,6 +297,7 @@ "Import Models": "Importera modeller", "Import Prompts": "Importera instruktioner", "Import Tools": "Importera verktyg", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Inkludera flaggan `--api` när du kör stable-diffusion-webui", "Info": "Information", "Input commands": "Indatakommandon", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index d3a869e83..a6e461da5 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "", "(Beta)": "", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "", "(latest)": "", "{{ models }}": "", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "", "Auto-playback response": "", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "", "AUTOMATIC1111 Base URL is required.": "", "available!": "", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Enter {{role}} message here": "", "Enter a detail about yourself for your LLMs to recall": "", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "", "Enter Chunk Overlap": "", "Enter Chunk Size": "", @@ -294,6 +297,7 @@ "Import Models": "", "Import Prompts": "", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "", "Info": "", "Input commands": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index a6b49afa8..aa613f762 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' veya süresiz için '-1'.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(örn. `sh webui.sh --api`)", "(latest)": "(en son)", "{{ models }}": "{{ models }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Ağustos", "Auto-playback response": "Yanıtı otomatik oynatma", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Temel URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Temel URL gereklidir.", "available!": "mevcut!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV dosyanızın şu sırayla 4 sütun içerdiğinden emin olun: İsim, E-posta, Şifre, Rol.", "Enter {{role}} message here": "Buraya {{role}} mesajını girin", "Enter a detail about yourself for your LLMs to recall": "LLM'lerinizin hatırlaması için kendiniz hakkında bir bilgi girin", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Brave Search API Anahtarını Girin", "Enter Chunk Overlap": "Chunk Örtüşmesini Girin", "Enter Chunk Size": "Chunk Boyutunu Girin", @@ -294,6 +297,7 @@ "Import Models": "Modelleri İçe Aktar", "Import Prompts": "Promptları İçe Aktar", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui çalıştırılırken `--api` bayrağını dahil edin", "Info": "Bilgi", "Input commands": "Giriş komutları", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index e259160a1..e6093f316 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' or '-1' для відсутності терміну дії.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)", "(latest)": "(остання)", "{{ models }}": "{{ models }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "Налаштування звуку успішно оновлено", "August": "Серпень", "Auto-playback response": "Автоматичне відтворення відповіді", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "URL-адреса AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "Необхідна URL-адреса AUTOMATIC1111.", "available!": "доступно!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Переконайтеся, що ваш CSV-файл містить 4 колонки в такому порядку: Ім'я, Email, Пароль, Роль.", "Enter {{role}} message here": "Введіть повідомлення {{role}} тут", "Enter a detail about yourself for your LLMs to recall": "Введіть відомості про себе для запам'ятовування вашими LLM.", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Введіть ключ API для пошуку Brave", "Enter Chunk Overlap": "Введіть перекриття фрагменту", "Enter Chunk Size": "Введіть розмір фрагменту", @@ -294,6 +297,7 @@ "Import Models": "Імпорт моделей", "Import Prompts": "Імпортувати промти", "Import Tools": "Імпортувати інструменти", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Включіть прапор `--api` при запуску stable-diffusion-webui", "Info": "Інфо", "Input commands": "Команди вводу", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index 9aeaaee0f..e78cbca76 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' hoặc '-1' không hết hạn.", "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(vd: `sh webui.sh --api`)", "(latest)": "(mới nhất)", "{{ models }}": "{{ mô hình }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "Tháng 8", "Auto-playback response": "Tự động phát lại phản hồi (Auto-playback)", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "Đường dẫn kết nối tới AUTOMATIC1111 (Base URL)", "AUTOMATIC1111 Base URL is required.": "Base URL của AUTOMATIC1111 là bắt buộc.", "available!": "có sẵn!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Đảm bảo tệp CSV của bạn bao gồm 4 cột theo thứ tự sau: Name, Email, Password, Role.", "Enter {{role}} message here": "Nhập yêu cầu của {{role}} ở đây", "Enter a detail about yourself for your LLMs to recall": "Nhập chi tiết về bản thân của bạn để LLMs có thể nhớ", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "Nhập API key cho Brave Search", "Enter Chunk Overlap": "Nhập Chunk chồng lấn (overlap)", "Enter Chunk Size": "Nhập Kích thước Chunk", @@ -294,6 +297,7 @@ "Import Models": "Nạp model", "Import Prompts": "Nạp các prompt lên hệ thống", "Import Tools": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Bao gồm flag `--api` khi chạy stable-diffusion-webui", "Info": "Thông tin", "Input commands": "Nhập các câu lệnh", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 345e013bc..47abfaa97 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -1,8 +1,8 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' 或 '-1' 表示无过期时间。", "(Beta)": "(测试版)", - "(e.g. `sh webui.sh --api`)": "(例如 `sh webui.sh --api`)", "(e.g. `sh webui.sh --api --api-auth username_password`)": "(例如 `sh webui.sh --api --api-auth username_password`)", + "(e.g. `sh webui.sh --api`)": "(例如 `sh webui.sh --api`)", "(latest)": "(最新版)", "{{ models }}": "{{ models }}", "{{ owner }}: You cannot delete a base model": "{{ owner }}:您不能删除基础模型", @@ -212,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮箱、密码、角色。", "Enter {{role}} message here": "在此处输入 {{role}} 信息", "Enter a detail about yourself for your LLMs to recall": "输入一个关于你自己的详细信息,方便你的大语言模型记住这些内容", + "Enter api auth string (e.g. username:password)": "输入api鉴权路径 (例如:username:password)", "Enter Brave Search API Key": "输入 Brave Search API 密钥", "Enter Chunk Overlap": "输入块重叠 (Chunk Overlap)", "Enter Chunk Size": "输入块大小 (Chunk Size)", @@ -230,7 +231,6 @@ "Enter stop sequence": "输入停止序列 (Stop Sequence)", "Enter Tavily API Key": "输入 Tavily API 密钥", "Enter Top K": "输入 Top K", - "Enter api auth string (e.g. username:password)": "输入api鉴权路径 (例如:username:password)", "Enter URL (e.g. http://127.0.0.1:7860/)": "输入地址 (例如:http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "输入地址 (例如:http://localhost:11434)", "Enter Your Email": "输入您的电子邮箱", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 7808ba96c..c801039e9 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -1,6 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' 或 '-1' 表示無期限。", "(Beta)": "(測試版)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(例如 `sh webui.sh --api`)", "(latest)": "(最新版)", "{{ models }}": "{{ models }}", @@ -65,6 +66,7 @@ "Audio settings updated successfully": "", "August": "8 月", "Auto-playback response": "自動播放回答", + "AUTOMATIC1111 Api Auth String": "", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 基本 URL", "AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基本 URL", "available!": "可用!", @@ -210,6 +212,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "請確保您的 CSV 檔案包含這四個欄位,並按照此順序:名稱、電子郵件、密碼、角色。", "Enter {{role}} message here": "在這裡輸入 {{role}} 訊息", "Enter a detail about yourself for your LLMs to recall": "輸入 LLM 記憶的詳細內容", + "Enter api auth string (e.g. username:password)": "", "Enter Brave Search API Key": "輸入 Brave 搜尋 API 金鑰", "Enter Chunk Overlap": "輸入區塊重疊", "Enter Chunk Size": "輸入區塊大小", @@ -294,6 +297,7 @@ "Import Models": "匯入模型", "Import Prompts": "匯入提示詞", "Import Tools": "匯入工具", + "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "在執行 stable-diffusion-webui 時加上 `--api` 標誌", "Info": "資訊", "Input commands": "輸入命令", From a92c5381fbf64895591bc957c46890a2a398a488 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Tue, 25 Jun 2024 08:51:52 -0700 Subject: [PATCH 262/287] chore: format --- .../components/admin/Settings/Images.svelte | 5 +++- .../admin/Settings/WebSearch.svelte | 30 +++++++++++++++---- .../components/common/SensitiveInput.svelte | 2 +- src/lib/i18n/locales/ar-BH/translation.json | 3 ++ src/lib/i18n/locales/bg-BG/translation.json | 3 ++ src/lib/i18n/locales/bn-BD/translation.json | 3 ++ src/lib/i18n/locales/ca-ES/translation.json | 3 ++ src/lib/i18n/locales/ceb-PH/translation.json | 3 ++ src/lib/i18n/locales/de-DE/translation.json | 3 ++ src/lib/i18n/locales/dg-DG/translation.json | 3 ++ src/lib/i18n/locales/en-GB/translation.json | 3 ++ src/lib/i18n/locales/en-US/translation.json | 3 ++ src/lib/i18n/locales/es-ES/translation.json | 3 ++ src/lib/i18n/locales/fa-IR/translation.json | 3 ++ src/lib/i18n/locales/fi-FI/translation.json | 3 ++ src/lib/i18n/locales/fr-CA/translation.json | 3 ++ src/lib/i18n/locales/fr-FR/translation.json | 3 ++ src/lib/i18n/locales/he-IL/translation.json | 3 ++ src/lib/i18n/locales/hi-IN/translation.json | 3 ++ src/lib/i18n/locales/hr-HR/translation.json | 3 ++ src/lib/i18n/locales/it-IT/translation.json | 3 ++ src/lib/i18n/locales/ja-JP/translation.json | 3 ++ src/lib/i18n/locales/ka-GE/translation.json | 3 ++ src/lib/i18n/locales/ko-KR/translation.json | 3 ++ src/lib/i18n/locales/lt-LT/translation.json | 3 ++ src/lib/i18n/locales/nb-NO/translation.json | 3 ++ src/lib/i18n/locales/nl-NL/translation.json | 3 ++ src/lib/i18n/locales/pa-IN/translation.json | 3 ++ src/lib/i18n/locales/pl-PL/translation.json | 3 ++ src/lib/i18n/locales/pt-BR/translation.json | 3 ++ src/lib/i18n/locales/pt-PT/translation.json | 3 ++ src/lib/i18n/locales/ru-RU/translation.json | 3 ++ src/lib/i18n/locales/sr-RS/translation.json | 3 ++ src/lib/i18n/locales/sv-SE/translation.json | 3 ++ src/lib/i18n/locales/tk-TW/translation.json | 3 ++ src/lib/i18n/locales/tr-TR/translation.json | 3 ++ src/lib/i18n/locales/uk-UA/translation.json | 3 ++ src/lib/i18n/locales/vi-VN/translation.json | 3 ++ src/lib/i18n/locales/zh-CN/translation.json | 3 ++ src/lib/i18n/locales/zh-TW/translation.json | 3 ++ 40 files changed, 140 insertions(+), 8 deletions(-) diff --git a/src/lib/components/admin/Settings/Images.svelte b/src/lib/components/admin/Settings/Images.svelte index ada0d0d08..f4782485b 100644 --- a/src/lib/components/admin/Settings/Images.svelte +++ b/src/lib/components/admin/Settings/Images.svelte @@ -279,7 +279,10 @@
{$i18n.t('AUTOMATIC1111 Api Auth String')}
- +
{$i18n.t('Include `--api-auth` flag when running stable-diffusion-webui')} diff --git a/src/lib/components/admin/Settings/WebSearch.svelte b/src/lib/components/admin/Settings/WebSearch.svelte index 4aa3379ec..7b4826705 100644 --- a/src/lib/components/admin/Settings/WebSearch.svelte +++ b/src/lib/components/admin/Settings/WebSearch.svelte @@ -116,7 +116,10 @@ {$i18n.t('Google PSE API Key')}
- +
@@ -141,7 +144,10 @@ {$i18n.t('Brave Search API Key')}
- +
{:else if webConfig.search.engine === 'serpstack'}
@@ -149,7 +155,10 @@ {$i18n.t('Serpstack API Key')}
- +
{:else if webConfig.search.engine === 'serper'}
@@ -157,7 +166,10 @@ {$i18n.t('Serper API Key')}
- +
{:else if webConfig.search.engine === 'serply'}
@@ -165,7 +177,10 @@ {$i18n.t('Serply API Key')}
- +
{:else if webConfig.search.engine === 'tavily'}
@@ -173,7 +188,10 @@ {$i18n.t('Tavily API Key')}
- +
{/if}
diff --git a/src/lib/components/common/SensitiveInput.svelte b/src/lib/components/common/SensitiveInput.svelte index c046e9db1..94bd0e4c1 100644 --- a/src/lib/components/common/SensitiveInput.svelte +++ b/src/lib/components/common/SensitiveInput.svelte @@ -1,6 +1,6 @@ {#if mounted} - { - saveHandler(e.detail); - }} - /> + {#key func?.content} + { + saveHandler(e.detail); + }} + /> + {/key} {/if} diff --git a/src/routes/(app)/workspace/tools/create/+page.svelte b/src/routes/(app)/workspace/tools/create/+page.svelte index daa6b7acd..a3e243c21 100644 --- a/src/routes/(app)/workspace/tools/create/+page.svelte +++ b/src/routes/(app)/workspace/tools/create/+page.svelte @@ -45,6 +45,10 @@ console.log(tool); }); + if (window.opener ?? false) { + window.opener.postMessage('loaded', '*'); + } + if (sessionStorage.tool) { tool = JSON.parse(sessionStorage.tool); sessionStorage.removeItem('tool'); @@ -58,14 +62,16 @@ {#if mounted} - { - saveHandler(e.detail); - }} - /> + {#key tool?.content} + { + saveHandler(e.detail); + }} + /> + {/key} {/if} From a5138b76210a12d245a8a4683aea7487a6258eb0 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 27 Jun 2024 03:24:16 -0700 Subject: [PATCH 275/287] doc: changelog --- CHANGELOG.md | 29 +++++++++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6756d105b..e6c160076 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,35 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.6] - 2024-06-27 + +### Added + +- **✨ "Functions" Feature**: You can now utilize "Functions" like filters (middleware) and pipe (model) functions directly within the WebUI. While largely compatible with Pipelines, these native functions can be executed easily within Open WebUI. Example use cases for filter functions include usage monitoring, real-time translation, moderation, and automemory. For pipe functions, the scope ranges from Cohere and Anthropic integration directly within Open WebUI, enabling "Valves" for per-user OpenAI API key usage, and much more. If you encounter issues, SAFE_MODE has been introduced. +- **📁 Files API**: Compatible with OpenAI, this feature allows for custom Retrieval-Augmented Generation (RAG) in conjunction with the Filter Function. More examples will be shared on our community platform and official documentation website. +- **🛠️ Tool Enhancements**: Tools now support citations and "Valves". Documentation will be available shortly. +- **🔗 Iframe Support via Files API**: Enables rendering HTML directly into your chat interface using functions and tools. Use cases include playing games like DOOM and Snake, displaying a weather applet, and implementing Anthropic "artifacts"-like features. Stay tuned for updates on our community platform and documentation. +- **🔑 AUTOMATIC1111_API_AUTH Support**: Support for automated API authentication. +- **🎨 Code Highlight Optimization**: Improved code highlighting features. +- **🔒 Experimental OAuth Support**: Check our docs for more details on this new feature. +- **🎙️ Voice Interruption Feature**: Reintroduced and now toggleable from Settings > Interface. +- **💤 Wakelock API**: Now in use to prevent screen dimming during important tasks. +- **🔐 API Key Privacy**: All API keys are now hidden by default for better security. +- **🔍 New Web Search Provider**: Added jina_search as a new option. +- **🌐 Enhanced Internationalization (i18n)**: Improved Korean translation and updated Chinese and Ukrainian translations. + +### Fixed + +- **🔧 Conversation Mode Issue**: Fixed the issue where Conversation Mode remained active after being removed from settings. +- **📏 Scroll Button Obstruction**: Resolved the issue where the scrollToBottom button container obstructed clicks on buttons beneath it. + +### Changed + +- **⏲️ AIOHTTP_CLIENT_TIMEOUT**: Now set to `None` by default for improved configuration flexibility. +- **📞 Voice Call Enhancements**: Improved by skipping code blocks and expressions during calls. +- **🚫 Error Message Handling**: Disabled the continuation of operations with error messages. +- **🗂️ Playground Relocation**: Moved the Playground from the workspace to the user menu for better user experience. + ## [0.3.5] - 2024-06-16 ### Added diff --git a/package-lock.json b/package-lock.json index b544a87d9..bd4bc6892 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-webui", - "version": "0.3.6.dev1", + "version": "0.3.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "open-webui", - "version": "0.3.6.dev1", + "version": "0.3.6", "dependencies": { "@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-python": "^6.1.6", diff --git a/package.json b/package.json index c829c6092..bb17cd4c8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "0.3.6.dev1", + "version": "0.3.6", "private": true, "scripts": { "dev": "npm run pyodide:fetch && vite dev --host", From bae87ec4ae5fe9f82b7a8d134f4b11f902ab3218 Mon Sep 17 00:00:00 2001 From: Ismael Date: Thu, 27 Jun 2024 07:08:03 -0400 Subject: [PATCH 276/287] Update translation.json Spanish translation updates --- src/lib/i18n/locales/es-ES/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 657515620..0e7f3699e 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -659,7 +659,7 @@ "You have shared this chat": "Usted ha compartido esta conversación", "You're a helpful assistant.": "Usted es un asistente útil.", "You're now logged in.": "Usted ahora está conectado.", - "Your account status is currently pending activation.": "", + "Your account status is currently pending activation.": "El estado de su cuenta actualmente se encuentra pendiente de activación.", "Youtube": "Youtube", "Youtube Loader Settings": "Configuración del cargador de Youtube" } From 850d4aac70cd87bae0741a825bf7bba202a9237a Mon Sep 17 00:00:00 2001 From: Ismael Date: Thu, 27 Jun 2024 07:33:38 -0400 Subject: [PATCH 277/287] additional Spanish strings updated --- src/lib/i18n/locales/es-ES/translation.json | 291 ++++++++++---------- 1 file changed, 146 insertions(+), 145 deletions(-) diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 0e7f3699e..cf8d7fb87 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -4,7 +4,7 @@ "(e.g. `sh webui.sh --api --api-auth username_password`)": "", "(e.g. `sh webui.sh --api`)": "(p.ej. `sh webui.sh --api`)", "(latest)": "(latest)", - "{{ models }}": "{{ modelos }}", + "{{ models }}": "{{ models }}", "{{ owner }}: You cannot delete a base model": "{{ owner }}: No se puede eliminar un modelo base", "{{modelName}} is thinking...": "{{modelName}} está pensando...", "{{user}}'s Chats": "{{user}}'s Chats", @@ -13,9 +13,9 @@ "a user": "un usuario", "About": "Sobre nosotros", "Account": "Cuenta", - "Account Activation Pending": "", + "Account Activation Pending": "Activación de cuenta pendiente", "Accurate information": "Información precisa", - "Active Users": "", + "Active Users": "Usuarios activos", "Add": "Agregar", "Add a model id": "Adición de un identificador de modelo", "Add a short description about what this model does": "Agregue una breve descripción sobre lo que hace este modelo", @@ -31,10 +31,10 @@ "Add User": "Agregar Usuario", "Adjusting these settings will apply changes universally to all users.": "Ajustar estas opciones aplicará los cambios universalmente a todos los usuarios.", "admin": "admin", - "Admin": "", + "Admin": "Admin", "Admin Panel": "Panel de Administración", "Admin Settings": "Configuración de Administrador", - "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.": "Admins tienen acceso a todas las herramientas en todo momento; los usuarios necesitan herramientas asignadas por modelo en el espacio de trabajo.", "Advanced Parameters": "Parámetros Avanzados", "Advanced Params": "Parámetros avanzados", "all": "todo", @@ -42,9 +42,9 @@ "All Users": "Todos los Usuarios", "Allow": "Permitir", "Allow Chat Deletion": "Permitir Borrar Chats", - "Allow non-local voices": "", - "Allow User Location": "", - "Allow Voice Interruption in Call": "", + "Allow non-local voices": "Permitir voces no locales", + "Allow User Location": "Permitir Ubicación del Usuario", + "Allow Voice Interruption in Call": "Permitir interrupción de voz en llamada", "alphanumeric characters and hyphens": "caracteres alfanuméricos y guiones", "Already have an account?": "¿Ya tienes una cuenta?", "an assistant": "un asistente", @@ -63,7 +63,7 @@ "Attach file": "Adjuntar archivo", "Attention to detail": "Detalle preciso", "Audio": "Audio", - "Audio settings updated successfully": "", + "Audio settings updated successfully": "Opciones de audio actualizadas correctamente", "August": "Agosto", "Auto-playback response": "Respuesta de reproducción automática", "AUTOMATIC1111 Api Auth String": "", @@ -74,19 +74,19 @@ "Bad Response": "Respuesta incorrecta", "Banners": "Banners", "Base Model (From)": "Modelo base (desde)", - "Batch Size (num_batch)": "", + "Batch Size (num_batch)": "Tamaño del Batch (num_batch)", "before": "antes", "Being lazy": "Ser perezoso", "Brave Search API Key": "Clave de API de Brave Search", "Bypass SSL verification for Websites": "Desactivar la verificación SSL para sitios web", - "Call": "", - "Call feature is not supported when using Web STT engine": "", - "Camera": "", + "Call": "Llamada", + "Call feature is not supported when using Web STT engine": "La funcionalidad de llamada no puede usarse junto con el motor de STT Web", + "Camera": "Cámara", "Cancel": "Cancelar", "Capabilities": "Capacidades", "Change Password": "Cambia la Contraseña", "Chat": "Chat", - "Chat Background Image": "", + "Chat Background Image": "Imágen de fondo del Chat", "Chat Bubble UI": "Burbuja de chat UI", "Chat direction": "Dirección del Chat", "Chat History": "Historial del Chat", @@ -100,35 +100,35 @@ "Chunk Params": "Parámetros de fragmentos", "Chunk Size": "Tamaño de fragmentos", "Citation": "Cita", - "Clear memory": "", + "Clear memory": "Liberar memoria", "Click here for help.": "Presiona aquí para obtener ayuda.", "Click here to": "Presiona aquí para", - "Click here to download user import template file.": "", + "Click here to download user import template file.": "Presiona aquí para descargar el archivo de plantilla de importación de usuario.", "Click here to select": "Presiona aquí para seleccionar", "Click here to select a csv file.": "Presiona aquí para seleccionar un archivo csv.", - "Click here to select a py file.": "", + "Click here to select a py file.": "Presiona aquí para seleccionar un archivo py.", "Click here to select documents.": "Presiona aquí para seleccionar documentos", "click here.": "Presiona aquí.", "Click on the user role button to change a user's role.": "Presiona en el botón de roles del usuario para cambiar su rol.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", - "Clone": "Clon", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permisos de escritura del portapapeles denegados. Por favor, comprueba las configuraciones de tu navegador para otorgar el acceso necesario.", + "Clone": "Clonar", "Close": "Cerrar", - "Code formatted successfully": "", + "Code formatted successfully": "Se ha formateado correctamente el código.", "Collection": "Colección", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Base URL", "ComfyUI Base URL is required.": "ComfyUI Base URL es requerido.", "Command": "Comando", "Concurrent Requests": "Solicitudes simultáneas", - "Confirm": "", + "Confirm": "Confirmar", "Confirm Password": "Confirmar Contraseña", - "Confirm your action": "", + "Confirm your action": "Confirma tu acción", "Connections": "Conexiones", - "Contact Admin for WebUI Access": "", + "Contact Admin for WebUI Access": "Contacta el administrador para obtener acceso al WebUI", "Content": "Contenido", "Context Length": "Longitud del contexto", "Continue Response": "Continuar Respuesta", - "Continue with {{provider}}": "", + "Continue with {{provider}}": "Continuar con {{provider}}", "Copied shared chat URL to clipboard!": "¡URL de chat compartido copiado al portapapeles!", "Copy": "Copiar", "Copy last code block": "Copia el último bloque de código", @@ -141,14 +141,14 @@ "Create new secret key": "Crear una nueva clave secreta", "Created at": "Creado en", "Created At": "Creado en", - "Created by": "", - "CSV Import": "", + "Created by": "Creado por", + "CSV Import": "Importa un CSV", "Current Model": "Modelo Actual", "Current Password": "Contraseña Actual", "Custom": "Personalizado", "Customize models for a specific purpose": "Personalizar modelos para un propósito específico", "Dark": "Oscuro", - "Dashboard": "", + "Dashboard": "Panel de Control", "Database": "Base de datos", "December": "Diciembre", "Default": "Por defecto", @@ -164,7 +164,7 @@ "Delete All Chats": "Eliminar todos los chats", "Delete chat": "Borrar chat", "Delete Chat": "Borrar Chat", - "Delete chat?": "", + "Delete chat?": "Borrar el chat?", "Delete function?": "", "Delete prompt?": "", "delete this link": "Borrar este enlace", @@ -174,26 +174,26 @@ "Deleted {{name}}": "Eliminado {{nombre}}", "Description": "Descripción", "Didn't fully follow instructions": "No siguió las instrucciones", - "Discover a function": "", + "Discover a function": "Descubre una función", "Discover a model": "Descubrir un modelo", "Discover a prompt": "Descubre un Prompt", - "Discover a tool": "", - "Discover, download, and explore custom functions": "", + "Discover a tool": "Descubre una herramienta", + "Discover, download, and explore custom functions": "Descubre, descarga y explora funciones personalizadas", "Discover, download, and explore custom prompts": "Descubre, descarga, y explora Prompts personalizados", - "Discover, download, and explore custom tools": "", + "Discover, download, and explore custom tools": "Descubre, descarga y explora herramientas personalizadas", "Discover, download, and explore model presets": "Descubre, descarga y explora ajustes preestablecidos de modelos", - "Dismissible": "", - "Display Emoji in Call": "", + "Dismissible": "Desestimable", + "Display Emoji in Call": "Muestra Emoji en llamada", "Display the username instead of You in the Chat": "Mostrar el nombre de usuario en lugar de Usted en el chat", "Document": "Documento", "Document Settings": "Configuración del Documento", - "Documentation": "", + "Documentation": "Documentación", "Documents": "Documentos", "does not make any external connections, and your data stays securely on your locally hosted server.": "no realiza ninguna conexión externa y sus datos permanecen seguros en su servidor alojado localmente.", "Don't Allow": "No Permitir", "Don't have an account?": "¿No tienes una cuenta?", "Don't like the style": "No te gusta el estilo?", - "Done": "", + "Done": "Hecho", "Download": "Descargar", "Download canceled": "Descarga cancelada", "Download Database": "Descarga la Base de Datos", @@ -201,10 +201,10 @@ "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p.ej. '30s','10m'. Unidades válidas de tiempo son 's', 'm', 'h'.", "Edit": "Editar", "Edit Doc": "Editar Documento", - "Edit Memory": "", + "Edit Memory": "Editar Memoria", "Edit User": "Editar Usuario", "Email": "Email", - "Embedding Batch Size": "", + "Embedding Batch Size": "Tamaño de Embedding", "Embedding Model": "Modelo de Embedding", "Embedding Model Engine": "Motor de Modelo de Embedding", "Embedding model set to \"{{embedding_model}}\"": "Modelo de Embedding configurado a \"{{embedding_model}}\"", @@ -229,10 +229,10 @@ "Enter Score": "Ingrese la puntuación", "Enter Searxng Query URL": "Introduzca la URL de consulta de Searxng", "Enter Serper API Key": "Ingrese la clave API de Serper", - "Enter Serply API Key": "", + "Enter Serply API Key": "Ingrese la clave API de Serply", "Enter Serpstack API Key": "Ingrese la clave API de Serpstack", "Enter stop sequence": "Ingrese la secuencia de parada", - "Enter Tavily API Key": "", + "Enter Tavily API Key": "Ingrese la clave API de Tavily", "Enter Top K": "Ingrese el Top K", "Enter URL (e.g. http://127.0.0.1:7860/)": "Ingrese la URL (p.ej., http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "Ingrese la URL (p.ej., http://localhost:11434)", @@ -244,39 +244,39 @@ "Experimental": "Experimental", "Export": "Exportar", "Export All Chats (All Users)": "Exportar todos los chats (Todos los usuarios)", - "Export chat (.json)": "", + "Export chat (.json)": "Exportar chat (.json)", "Export Chats": "Exportar Chats", "Export Documents Mapping": "Exportar el mapeo de documentos", - "Export Functions": "", - "Export LiteLLM config.yaml": "", - "Export Models": "Modelos de exportación", + "Export Functions": "Exportar Funciones", + "Export LiteLLM config.yaml": "Exportar LiteLLM config.yaml", + "Export Models": "Exportar Modelos", "Export Prompts": "Exportar Prompts", - "Export Tools": "", - "External Models": "", + "Export Tools": "Exportar Herramientas", + "External Models": "Modelos Externos", "Failed to create API Key.": "No se pudo crear la clave API.", "Failed to read clipboard contents": "No se pudo leer el contenido del portapapeles", - "Failed to update settings": "", + "Failed to update settings": "Falla al actualizar los ajustes", "February": "Febrero", "Feel free to add specific details": "Libre de agregar detalles específicos", - "File": "", + "File": "Archivo", "File Mode": "Modo de archivo", "File not found.": "Archivo no encontrado.", - "Filters": "", + "Filters": "Filtros", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Se detectó suplantación de huellas: No se pueden usar las iniciales como avatar. Por defecto se utiliza la imagen de perfil predeterminada.", "Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de respuesta externa", "Focus chat input": "Enfoca la entrada del chat", "Followed instructions perfectly": "Siguió las instrucciones perfectamente", - "Form": "", + "Form": "De", "Format your variables using square brackets like this:": "Formatea tus variables usando corchetes de la siguiente manera:", "Frequency Penalty": "Penalización de frecuencia", - "Function created successfully": "", - "Function deleted successfully": "", - "Function updated successfully": "", - "Functions": "", - "Functions imported successfully": "", + "Function created successfully": "Función creada exitosamente", + "Function deleted successfully": "Función borrada exitosamente", + "Function updated successfully": "Función actualizada exitosamente", + "Functions": "Funciones", + "Functions imported successfully": "Funciones importadas exitosamente", "General": "General", "General Settings": "Opciones Generales", - "Generate Image": "", + "Generate Image": "Generar imagen", "Generating search query": "Generación de consultas de búsqueda", "Generation Info": "Información de Generación", "Good Response": "Buena Respuesta", @@ -287,7 +287,7 @@ "Hello, {{name}}": "Hola, {{name}}", "Help": "Ayuda", "Hide": "Esconder", - "Hide Model": "", + "Hide Model": "Esconder Modelo", "How can I help you today?": "¿Cómo puedo ayudarte hoy?", "Hybrid Search": "Búsqueda Híbrida", "Image Generation (Experimental)": "Generación de imágenes (experimental)", @@ -296,16 +296,16 @@ "Images": "Imágenes", "Import Chats": "Importar chats", "Import Documents Mapping": "Importar Mapeo de Documentos", - "Import Functions": "", + "Import Functions": "Importar Funciones", "Import Models": "Importar modelos", "Import Prompts": "Importar Prompts", - "Import Tools": "", + "Import Tools": "Importar Herramientas", "Include `--api-auth` flag when running stable-diffusion-webui": "", "Include `--api` flag when running stable-diffusion-webui": "Incluir el indicador `--api` al ejecutar stable-diffusion-webui", "Info": "Información", "Input commands": "Ingresar comandos", "Install from Github URL": "Instalar desde la URL de Github", - "Instant Auto-Send After Voice Transcription": "", + "Instant Auto-Send After Voice Transcription": "Auto-Enviar Después de la Transcripción de Voz", "Interface": "Interfaz", "Invalid Tag": "Etiqueta Inválida", "January": "Enero", @@ -318,32 +318,32 @@ "JWT Token": "Token JWT", "Keep Alive": "Mantener Vivo", "Keyboard shortcuts": "Atajos de teclado", - "Knowledge": "", + "Knowledge": "Conocimiento", "Language": "Lenguaje", "Last Active": "Última Actividad", - "Last Modified": "", + "Last Modified": "Modificado por última vez", "Light": "Claro", - "Listening...": "", + "Listening...": "Escuchando...", "LLMs can make mistakes. Verify important information.": "Los LLM pueden cometer errores. Verifica la información importante.", - "Local Models": "", + "Local Models": "Modelos locales", "LTR": "LTR", "Made by OpenWebUI Community": "Hecho por la comunidad de OpenWebUI", "Make sure to enclose them with": "Asegúrese de adjuntarlos con", - "Manage": "", + "Manage": "Gestionar", "Manage Models": "Administrar Modelos", "Manage Ollama Models": "Administrar Modelos Ollama", - "Manage Pipelines": "Administrar canalizaciones", - "Manage Valves": "", + "Manage Pipelines": "Administrar Pipelines", + "Manage Valves": "Gestionar Valves", "March": "Marzo", "Max Tokens (num_predict)": "Máximo de fichas (num_predict)", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Se pueden descargar un máximo de 3 modelos simultáneamente. Por favor, inténtelo de nuevo más tarde.", "May": "Mayo", "Memories accessible by LLMs will be shown here.": "Las memorias accesibles por los LLMs se mostrarán aquí.", "Memory": "Memoria", - "Memory added successfully": "", - "Memory cleared successfully": "", - "Memory deleted successfully": "", - "Memory updated successfully": "", + "Memory added successfully": "Memoria añadida correctamente", + "Memory cleared successfully": "Memoria liberada correctamente", + "Memory deleted successfully": "Memoria borrada correctamente", + "Memory updated successfully": "Memoria actualizada correctamente", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Los mensajes que envíe después de crear su enlace no se compartirán. Los usuarios con el enlace podrán ver el chat compartido.", "Minimum Score": "Puntuación mínima", "Mirostat": "Mirostat", @@ -351,18 +351,18 @@ "Mirostat Tau": "Mirostat Tau", "MMMM DD, YYYY": "MMMM DD, YYYY", "MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm", - "MMMM DD, YYYY hh:mm:ss A": "", + "MMMM DD, YYYY hh:mm:ss A": "MMMM DD, YYYY hh:mm:ss A", "Model '{{modelName}}' has been successfully downloaded.": "El modelo '{{modelName}}' se ha descargado correctamente.", "Model '{{modelTag}}' is already in queue for downloading.": "El modelo '{{modelTag}}' ya está en cola para descargar.", "Model {{modelId}} not found": "El modelo {{modelId}} no fue encontrado", "Model {{modelName}} is not vision capable": "El modelo {{modelName}} no es capaz de ver", "Model {{name}} is now {{status}}": "El modelo {{name}} ahora es {{status}}", - "Model created successfully!": "", + "Model created successfully!": "Modelo creado correctamente!", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Se detectó la ruta del sistema de archivos del modelo. Se requiere el nombre corto del modelo para la actualización, no se puede continuar.", "Model ID": "ID del modelo", "Model not selected": "Modelo no seleccionado", "Model Params": "Parámetros del modelo", - "Model updated successfully": "", + "Model updated successfully": "Modelo actualizado correctamente", "Model Whitelisting": "Listado de Modelos habilitados", "Model(s) Whitelisted": "Modelo(s) habilitados", "Modelfile Content": "Contenido del Modelfile", @@ -373,20 +373,20 @@ "Name your model": "Asigne un nombre a su modelo", "New Chat": "Nuevo Chat", "New Password": "Nueva Contraseña", - "No content to speak": "", - "No documents found": "", - "No file selected": "", + "No content to speak": "No hay contenido para hablar", + "No documents found": "No se han encontrado documentos", + "No file selected": "Ningún archivo fué seleccionado", "No results found": "No se han encontrado resultados", "No search query generated": "No se ha generado ninguna consulta de búsqueda", "No source available": "No hay fuente disponible", - "No valves to update": "", + "No valves to update": "No valves para actualizar", "None": "Ninguno", "Not factually correct": "No es correcto en todos los aspectos", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si estableces una puntuación mínima, la búsqueda sólo devolverá documentos con una puntuación mayor o igual a la puntuación mínima.", "Notifications": "Notificaciones", "November": "Noviembre", "num_thread (Ollama)": "num_thread (Ollama)", - "OAuth ID": "", + "OAuth ID": "OAuth ID", "October": "Octubre", "Off": "Desactivado", "Okay, Let's Go!": "Bien, ¡Vamos!", @@ -394,16 +394,17 @@ "Ollama": "Ollama", "Ollama API": "Ollama API", "Ollama API disabled": "API de Ollama deshabilitada", - "Ollama API is disabled": "", + "Ollama API is disabled": "API de Ollama desactivada", "Ollama Version": "Versión de Ollama", "On": "Activado", "Only": "Solamente", "Only alphanumeric characters and hyphens are allowed in the command string.": "Sólo se permiten caracteres alfanuméricos y guiones en la cadena de comando.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "¡Ups! ¡Agárrate fuerte! Tus archivos todavía están en el horno de procesamiento. Los estamos cocinando a la perfección. Tenga paciencia y le avisaremos una vez que estén listos.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "¡Ups! Parece que la URL no es válida. Vuelva a verificar e inténtelo nuevamente.", - "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! Hubo un error en la respuesta anterior. Intente de nuevo o póngase en contacto con el administrador.", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "¡Ups! Estás utilizando un método no compatible (solo frontend). Por favor ejecute la WebUI desde el backend.", "Open": "Abrir", + "Open AI": "Abrir AI", "Open AI (Dall-E)": "Abrir AI (Dall-E)", "Open new chat": "Abrir nuevo chat", "OpenAI": "OpenAI", @@ -417,14 +418,14 @@ "PDF document (.pdf)": "PDF document (.pdf)", "PDF Extract Images (OCR)": "Extraer imágenes de PDF (OCR)", "pending": "pendiente", - "Permission denied when accessing media devices": "", - "Permission denied when accessing microphone": "", + "Permission denied when accessing media devices": "Permiso denegado al acceder a los dispositivos", + "Permission denied when accessing microphone": "Permiso denegado al acceder a la micrófono", "Permission denied when accessing microphone: {{error}}": "Permiso denegado al acceder al micrófono: {{error}}", "Personalization": "Personalización", - "Pipeline deleted successfully": "", - "Pipeline downloaded successfully": "", - "Pipelines": "Tuberías", - "Pipelines Not Detected": "", + "Pipeline deleted successfully": "Pipeline borrada exitosamente", + "Pipeline downloaded successfully": "Pipeline descargada exitosamente", + "Pipelines": "Pipelines", + "Pipelines Not Detected": "Pipeline No Detectada", "Pipelines Valves": "Tuberías Válvulas", "Plain text (.txt)": "Texto plano (.txt)", "Playground": "Patio de juegos", @@ -444,7 +445,7 @@ "Read Aloud": "Leer al oído", "Record voice": "Grabar voz", "Redirecting you to OpenWebUI Community": "Redireccionándote a la comunidad OpenWebUI", - "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referirse a usted mismo como \"Usuario\" (por ejemplo, \"El usuario está aprendiendo Español\")", "Refused when it shouldn't have": "Rechazado cuando no debería", "Regenerate": "Regenerar", "Release Notes": "Notas de la versión", @@ -456,16 +457,16 @@ "Reranking Model": "Modelo de reranking", "Reranking model disabled": "Modelo de reranking deshabilitado", "Reranking model set to \"{{reranking_model}}\"": "Modelo de reranking establecido en \"{{reranking_model}}\"", - "Reset": "", - "Reset Upload Directory": "", + "Reset": "Reiniciar", + "Reset Upload Directory": "Reiniciar Directorio de carga", "Reset Vector Storage": "Restablecer almacenamiento vectorial", "Response AutoCopy to Clipboard": "Copiar respuesta automáticamente al portapapeles", - "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.": "Las notificaciones de respuesta no pueden activarse debido a que los permisos del sitio web han sido denegados. Por favor, visite las configuraciones de su navegador para otorgar el acceso necesario.", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", "RTL": "RTL", - "Running": "", + "Running": "Ejecutando", "Save": "Guardar", "Save & Create": "Guardar y Crear", "Save & Update": "Guardar y Actualizar", @@ -477,40 +478,40 @@ "Search a model": "Buscar un modelo", "Search Chats": "Chats de búsqueda", "Search Documents": "Buscar Documentos", - "Search Functions": "", + "Search Functions": "Funciones de Búsqueda", "Search Models": "Modelos de búsqueda", "Search Prompts": "Buscar Prompts", - "Search Query Generation Prompt": "", - "Search Query Generation Prompt Length Threshold": "", + "Search Query Generation Prompt": "Búsqueda de consulta de generación de prompts", + "Search Query Generation Prompt Length Threshold": "Nivel de longitud de Búsqueda de consulta de generación de prompts", "Search Result Count": "Recuento de resultados de búsqueda", - "Search Tools": "", + "Search Tools": "Búsqueda de herramientas", "Searched {{count}} sites_one": "Buscado {{count}} sites_one", "Searched {{count}} sites_many": "Buscado {{count}} sites_many", "Searched {{count}} sites_other": "Buscó {{count}} sites_other", - "Searching \"{{searchQuery}}\"": "", + "Searching \"{{searchQuery}}\"": "Buscando \"{{searchQuery}}\"", "Searxng Query URL": "Searxng URL de consulta", "See readme.md for instructions": "Vea el readme.md para instrucciones", "See what's new": "Ver las novedades", "Seed": "Seed", "Select a base model": "Seleccionar un modelo base", - "Select a engine": "", - "Select a function": "", + "Select a engine": "Busca un motor", + "Select a function": "Busca una función", "Select a mode": "Selecciona un modo", "Select a model": "Selecciona un modelo", - "Select a pipeline": "Selección de una canalización", - "Select a pipeline url": "Selección de una dirección URL de canalización", - "Select a tool": "", + "Select a pipeline": "Selección de una Pipeline", + "Select a pipeline url": "Selección de una dirección URL de Pipeline", + "Select a tool": "Busca una herramienta", "Select an Ollama instance": "Seleccione una instancia de Ollama", - "Select Documents": "", + "Select Documents": "Seleccionar Documentos", "Select model": "Selecciona un modelo", - "Select only one model to call": "", + "Select only one model to call": "Selecciona sólo un modelo para llamar", "Selected model(s) do not support image inputs": "Los modelos seleccionados no admiten entradas de imagen", "Send": "Enviar", "Send a Message": "Enviar un Mensaje", "Send message": "Enviar Mensaje", "September": "Septiembre", "Serper API Key": "Clave API de Serper", - "Serply API Key": "", + "Serply API Key": "Clave API de Serply", "Serpstack API Key": "Clave API de Serpstack", "Server connection verified": "Conexión del servidor verificada", "Set as default": "Establecer por defecto", @@ -522,18 +523,18 @@ "Set Task Model": "Establecer modelo de tarea", "Set Voice": "Establecer la voz", "Settings": "Configuración", - "Settings saved successfully!": "¡Configuración guardada exitosamente!", - "Settings updated successfully": "", + "Settings saved successfully!": "¡Configuración guardada con éxito!", + "Settings updated successfully": "¡Configuración actualizada con éxito!", "Share": "Compartir", "Share Chat": "Compartir Chat", "Share to OpenWebUI Community": "Compartir con la comunidad OpenWebUI", "short-summary": "resumen-corto", "Show": "Mostrar", - "Show Admin Details in Account Pending Overlay": "", - "Show Model": "", + "Show Admin Details in Account Pending Overlay": "Mostrar detalles de administración en la capa de espera de la cuenta", + "Show Model": "Mostrar Modelo", "Show shortcuts": "Mostrar atajos", - "Show your support!": "", - "Showcased creativity": "Mostrar creatividad", + "Show your support!": "¡Muestra tu apoyo!", + "Showcased creativity": "Creatividad mostrada", "sidebar": "barra lateral", "Sign in": "Iniciar sesión", "Sign Out": "Cerrar sesión", @@ -543,7 +544,7 @@ "Speech recognition error: {{error}}": "Error de reconocimiento de voz: {{error}}", "Speech-to-Text Engine": "Motor de voz a texto", "Stop Sequence": "Detener secuencia", - "STT Model": "", + "STT Model": "Modelo STT", "STT Settings": "Configuraciones de STT", "Submit": "Enviar", "Subtitle (e.g. about the Roman Empire)": "Subtítulo (por ejemplo, sobre el Imperio Romano)", @@ -553,8 +554,8 @@ "System": "Sistema", "System Prompt": "Prompt del sistema", "Tags": "Etiquetas", - "Tap to interrupt": "", - "Tavily API Key": "", + "Tap to interrupt": "Toca para interrumpir", + "Tavily API Key": "Clave API de Tavily", "Tell us more:": "Dinos más:", "Temperature": "Temperatura", "Template": "Plantilla", @@ -564,12 +565,12 @@ "Thanks for your feedback!": "¡Gracias por tu retroalimentación!", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "El puntaje debe ser un valor entre 0.0 (0%) y 1.0 (100%).", "Theme": "Tema", - "Thinking...": "", - "This action cannot be undone. Do you wish to continue?": "", + "Thinking...": "Pensando...", + "This action cannot be undone. Do you wish to continue?": "Esta acción no se puede deshacer. ¿Desea continuar?", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Esto garantiza que sus valiosas conversaciones se guarden de forma segura en su base de datos en el backend. ¡Gracias!", - "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.": "Esta es una característica experimental que puede no funcionar como se esperaba y está sujeto a cambios en cualquier momento.", "This setting does not sync across browsers or devices.": "Esta configuración no se sincroniza entre navegadores o dispositivos.", - "This will delete": "", + "This will delete": "Esto eliminará", "Thorough explanation": "Explicación exhaustiva", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Consejo: Actualice múltiples variables consecutivamente presionando la tecla tab en la entrada del chat después de cada reemplazo.", "Title": "Título", @@ -580,39 +581,39 @@ "to": "para", "To access the available model names for downloading,": "Para acceder a los nombres de modelos disponibles para descargar,", "To access the GGUF models available for downloading,": "Para acceder a los modelos GGUF disponibles para descargar,", - "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", - "To add documents here, upload them to the \"Documents\" workspace first.": "", + "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acceder al interfaz de usuario web, por favor contacte al administrador. Los administradores pueden administrar los estados de los usuarios desde el panel de administración.", + "To add documents here, upload them to the \"Documents\" workspace first.": "Para agregar documentos aquí, subalos al área de trabajo \"Documentos\" primero.", "to chat input.": "a la entrada del chat.", - "To select filters here, add them to the \"Functions\" workspace first.": "", - "To select toolkits here, add them to the \"Tools\" workspace first.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "Para seleccionar filtros aquí, agreguelos al área de trabajo \"Funciones\" primero.", + "To select toolkits here, add them to the \"Tools\" workspace first.": "Para seleccionar herramientas aquí, agreguelas al área de trabajo \"Herramientas\" primero.", "Today": "Hoy", "Toggle settings": "Alternar configuración", "Toggle sidebar": "Alternar barra lateral", - "Tokens To Keep On Context Refresh (num_keep)": "", - "Tool created successfully": "", - "Tool deleted successfully": "", - "Tool imported successfully": "", - "Tool updated successfully": "", - "Tools": "", + "Tokens To Keep On Context Refresh (num_keep)": "Tokens a mantener en el contexto de actualización (num_keep)", + "Tool created successfully": "Herramienta creada con éxito", + "Tool deleted successfully": "Herramienta eliminada con éxito", + "Tool imported successfully": "Herramienta importada con éxito", + "Tool updated successfully": "Herramienta actualizada con éxito", + "Tools": "Herramientas", "Top K": "Top K", "Top P": "Top P", "Trouble accessing Ollama?": "¿Problemas para acceder a Ollama?", - "TTS Model": "", + "TTS Model": "Modelo TTS", "TTS Settings": "Configuración de TTS", - "TTS Voice": "", + "TTS Voice": "Voz del TTS", "Type": "Tipo", "Type Hugging Face Resolve (Download) URL": "Escriba la URL (Descarga) de Hugging Face Resolve", "Uh-oh! There was an issue connecting to {{provider}}.": "¡Uh oh! Hubo un problema al conectarse a {{provider}}.", - "UI": "", - "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", - "Update": "", + "UI": "UI", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Tipo de archivo desconocido '{{file_type}}'. Procediendo con la carga del archivo de todos modos.", + "Update": "Actualizar", "Update and Copy Link": "Actualizar y copiar enlace", "Update password": "Actualizar contraseña", - "Updated at": "", - "Upload": "", + "Updated at": "Actualizado en", + "Upload": "Subir", "Upload a GGUF model": "Subir un modelo GGUF", "Upload Files": "Subir archivos", - "Upload Pipeline": "", + "Upload Pipeline": "Subir Pipeline", "Upload Progress": "Progreso de carga", "URL Mode": "Modo de URL", "Use '#' in the prompt input to load and select your documents.": "Utilice '#' en el prompt para cargar y seleccionar sus documentos.", @@ -621,22 +622,22 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "usuario", - "User location successfully retrieved.": "", + "User location successfully retrieved.": "Localización del usuario recuperada con éxito.", "User Permissions": "Permisos de usuario", "Users": "Usuarios", "Utilize": "Utilizar", "Valid time units:": "Unidades válidas de tiempo:", - "Valves": "", - "Valves updated": "", - "Valves updated successfully": "", + "Valves": "Valves", + "Valves updated": "Valves actualizados", + "Valves updated successfully": "Valves actualizados con éxito", "variable": "variable", "variable to have them replaced with clipboard content.": "variable para reemplazarlos con el contenido del portapapeles.", "Version": "Versión", - "Voice": "", + "Voice": "Voz", "Warning": "Advertencia", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Advertencia: Si actualiza o cambia su modelo de inserción, necesitará volver a importar todos los documentos.", "Web": "Web", - "Web API": "", + "Web API": "API Web", "Web Loader Settings": "Web Loader Settings", "Web Params": "Web Params", "Web Search": "Búsqueda en la Web", @@ -646,14 +647,14 @@ "WebUI will make requests to": "WebUI realizará solicitudes a", "What’s New in": "Novedades en", "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Cuando el historial está desactivado, los nuevos chats en este navegador no aparecerán en el historial de ninguno de sus dispositivos..", - "Whisper (Local)": "", - "Widescreen Mode": "", + "Whisper (Local)": "Whisper (Local)", + "Widescreen Mode": "Modo de pantalla ancha", "Workspace": "Espacio de trabajo", "Write a prompt suggestion (e.g. Who are you?)": "Escribe una sugerencia para un prompt (por ejemplo, ¿quién eres?)", "Write a summary in 50 words that summarizes [topic or keyword].": "Escribe un resumen en 50 palabras que resuma [tema o palabra clave].", "Yesterday": "Ayer", "You": "Usted", - "You 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.": "Puede personalizar sus interacciones con LLMs añadiendo memorias a través del botón 'Gestionar' debajo, haciendo que sean más útiles y personalizados para usted.", "You cannot clone a base model": "No se puede clonar un modelo base", "You have no archived conversations.": "No tiene conversaciones archivadas.", "You have shared this chat": "Usted ha compartido esta conversación", From b59684328d8f510b9e144a6ddb6f89cfb95516e0 Mon Sep 17 00:00:00 2001 From: Karl Lee <61072264+KarlLee830@users.noreply.github.com> Date: Thu, 27 Jun 2024 20:59:43 +0800 Subject: [PATCH 278/287] i18n: Update Chinese translation --- src/lib/i18n/locales/zh-CN/translation.json | 102 ++++++++++---------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 2a3a397de..36ea2b271 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -18,7 +18,7 @@ "Active Users": "当前在线用户", "Add": "添加", "Add a model id": "添加一个模型 ID", - "Add a short description about what this model does": "添加有关该模型功能的简短描述", + "Add a short description about what this model does": "添加有关该模型能力的简短描述", "Add a short title for this prompt": "为此提示词添加一个简短的标题", "Add a tag": "添加标签", "Add custom prompt": "添加自定义提示词", @@ -44,7 +44,7 @@ "Allow Chat Deletion": "允许删除聊天记录", "Allow non-local voices": "允许调用非本地音色", "Allow User Location": "允许获取您的位置", - "Allow Voice Interruption in Call": "", + "Allow Voice Interruption in Call": "允许通话中的打断语音", "alphanumeric characters and hyphens": "字母数字字符和连字符", "Already have an account?": "已经拥有账号了?", "an assistant": "助手", @@ -63,7 +63,7 @@ "Attach file": "添加文件", "Attention to detail": "注重细节", "Audio": "语音", - "Audio settings updated successfully": "", + "Audio settings updated successfully": "语音设置更新成功", "August": "八月", "Auto-playback response": "自动念出回复内容", "AUTOMATIC1111 Api Auth String": "AUTOMATIC1111 Api鉴权字符串", @@ -110,10 +110,10 @@ "Click here to select documents.": "单击选择文档", "click here.": "点击这里。", "Click on the user role button to change a user's role.": "点击角色前方的组别按钮以更改用户所属权限组。", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "写入剪贴板时被拒绝。请检查浏览器设置,授予必要权限。", "Clone": "复制", "Close": "关闭", - "Code formatted successfully": "", + "Code formatted successfully": "代码格式化成功", "Collection": "集合", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI 基础地址", @@ -128,7 +128,7 @@ "Content": "内容", "Context Length": "上下文长度", "Continue Response": "继续生成", - "Continue with {{provider}}": "", + "Continue with {{provider}}": "使用 {{provider}} 继续", "Copied shared chat URL to clipboard!": "已复制此对话分享链接至剪贴板!", "Copy": "复制", "Copy last code block": "复制最后一个代码块中的代码", @@ -165,22 +165,22 @@ "Delete chat": "删除对话记录", "Delete Chat": "删除对话记录", "Delete chat?": "删除对话记录?", - "Delete function?": "", - "Delete prompt?": "", + "Delete function?": "删除函数?", + "Delete prompt?": "删除提示词?", "delete this link": "此处删除这个链接", - "Delete tool?": "", + "Delete tool?": "删除工具?", "Delete User": "删除用户", "Deleted {{deleteModelTag}}": "已删除 {{deleteModelTag}}", "Deleted {{name}}": "已删除 {{name}}", "Description": "描述", "Didn't fully follow instructions": "没有完全遵照指示", - "Discover a function": "", + "Discover a function": "发现更多函数", "Discover a model": "发现更多模型", "Discover a prompt": "发现更多提示词", - "Discover a tool": "", - "Discover, download, and explore custom functions": "", + "Discover a tool": "发现更多工具", + "Discover, download, and explore custom functions": "发现、下载并探索更多函数", "Discover, download, and explore custom prompts": "发现、下载并探索更多自定义提示词", - "Discover, download, and explore custom tools": "", + "Discover, download, and explore custom tools": "发现、下载并探索更多工具", "Discover, download, and explore model presets": "发现、下载并探索更多模型预设", "Dismissible": "是否可关闭", "Display Emoji in Call": "在通话中显示 Emoji 表情符号", @@ -193,7 +193,7 @@ "Don't Allow": "不允许", "Don't have an account?": "没有账号?", "Don't like the style": "不喜欢这个文风", - "Done": "", + "Done": "完成", "Download": "下载", "Download canceled": "下载已取消", "Download Database": "下载数据库", @@ -247,8 +247,8 @@ "Export chat (.json)": "JSON 文件 (.json)", "Export Chats": "导出对话", "Export Documents Mapping": "导出文档映射", - "Export Functions": "导出功能", - "Export LiteLLM config.yaml": "", + "Export Functions": "导出函数", + "Export LiteLLM config.yaml": "导出 LteLLM config.yaml 文件", "Export Models": "导出模型", "Export Prompts": "导出提示词", "Export Tools": "导出工具", @@ -269,11 +269,11 @@ "Form": "手动创建", "Format your variables using square brackets like this:": "使用这样的方括号格式化你的变量:", "Frequency Penalty": "频率惩罚", - "Function created successfully": "", - "Function deleted successfully": "", - "Function updated successfully": "", - "Functions": "功能", - "Functions imported successfully": "", + "Function created successfully": "函数创建成功", + "Function deleted successfully": "函数删除成功", + "Function updated successfully": "函数更新成功", + "Functions": "函数", + "Functions imported successfully": "函数导入成功", "General": "通用", "General Settings": "通用设置", "Generate Image": "生成图像", @@ -296,7 +296,7 @@ "Images": "图像", "Import Chats": "导入对话记录", "Import Documents Mapping": "导入文档映射", - "Import Functions": "导入功能", + "Import Functions": "导入函数", "Import Models": "导入模型", "Import Prompts": "导入提示词", "Import Tools": "导入工具", @@ -333,17 +333,17 @@ "Manage Models": "管理模型", "Manage Ollama Models": "管理 Ollama 模型", "Manage Pipelines": "管理 Pipeline", - "Manage Valves": "", + "Manage Valves": "管理值", "March": "三月", "Max Tokens (num_predict)": "最多 Token (num_predict)", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同时下载 3 个模型,请稍后重试。", "May": "五月", "Memories accessible by LLMs will be shown here.": "大语言模型可访问的记忆将在此显示。", "Memory": "记忆", - "Memory added successfully": "", - "Memory cleared successfully": "", - "Memory deleted successfully": "", - "Memory updated successfully": "", + "Memory added successfully": "记忆添加成功", + "Memory cleared successfully": "记忆清除成功", + "Memory deleted successfully": "记忆删除成功", + "Memory updated successfully": "记忆更新成功", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "创建链接后发送的消息不会被共享。具有 URL 的用户将能够查看共享对话。", "Minimum Score": "最低分", "Mirostat": "Mirostat", @@ -355,14 +355,14 @@ "Model '{{modelName}}' has been successfully downloaded.": "模型'{{modelName}}'已成功下载。", "Model '{{modelTag}}' is already in queue for downloading.": "模型'{{modelTag}}'已在下载队列中。", "Model {{modelId}} not found": "未找到模型 {{modelId}}", - "Model {{modelName}} is not vision capable": "模型 {{modelName}} 不支持视觉功能", + "Model {{modelName}} is not vision capable": "模型 {{modelName}} 不支持视觉能力", "Model {{name}} is now {{status}}": "模型 {{name}} 现在是 {{status}}", - "Model created successfully!": "", + "Model created successfully!": "模型创建成功!", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "检测到模型文件系统路径,无法继续进行。更新操作需要提供模型简称。", "Model ID": "模型 ID", "Model not selected": "未选择模型", "Model Params": "模型参数", - "Model updated successfully": "", + "Model updated successfully": "模型更新成功", "Model Whitelisting": "白名单模型", "Model(s) Whitelisted": "模型已加入白名单", "Modelfile Content": "模型文件内容", @@ -373,20 +373,20 @@ "Name your model": "为您的模型命名", "New Chat": "新对话", "New Password": "新密码", - "No content to speak": "", + "No content to speak": "没有内容可朗读", "No documents found": "未找到文档", - "No file selected": "", + "No file selected": "未选中文件", "No results found": "未找到结果", "No search query generated": "未生成搜索查询", "No source available": "没有可用来源", - "No valves to update": "", + "No valves to update": "没有需要更新的值", "None": "无", "Not factually correct": "事实并非如此", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "注意:如果设置了最低分数,搜索只会返回分数大于或等于最低分数的文档。", "Notifications": "桌面通知", "November": "十一月", "num_thread (Ollama)": "num_thread(Ollama)", - "OAuth ID": "", + "OAuth ID": "OAuth ID", "October": "十月", "Off": "关闭", "Okay, Let's Go!": "确认,开始使用!", @@ -421,10 +421,10 @@ "Permission denied when accessing microphone": "申请麦克风权限被拒绝", "Permission denied when accessing microphone: {{error}}": "申请麦克风权限被拒绝:{{error}}", "Personalization": "个性化", - "Pipeline deleted successfully": "", - "Pipeline downloaded successfully": "", + "Pipeline deleted successfully": "Pipeline 删除成功", + "Pipeline downloaded successfully": "Pipeline 下载成功", "Pipelines": "Pipeline", - "Pipelines Not Detected": "", + "Pipelines Not Detected": "未检测到 Pipeline", "Pipelines Valves": "Pipeline 值", "Plain text (.txt)": "TXT 文档 (.txt)", "Playground": "AI 对话游乐场", @@ -460,7 +460,7 @@ "Reset Upload Directory": "重置上传目录", "Reset Vector Storage": "重置向量存储", "Response AutoCopy to Clipboard": "自动复制回复到剪贴板", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "无法激活回复时发送通知。请检查浏览器设置,并授予必要的访问权限。", "Role": "权限组", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", @@ -477,7 +477,7 @@ "Search a model": "搜索模型", "Search Chats": "搜索对话", "Search Documents": "搜索文档", - "Search Functions": "搜索功能", + "Search Functions": "搜索函数", "Search Models": "搜索模型", "Search Prompts": "搜索提示词", "Search Query Generation Prompt": "搜索查询生成提示", @@ -492,12 +492,12 @@ "Seed": "种子 (Seed)", "Select a base model": "选择一个基础模型", "Select a engine": "选择一个搜索引擎", - "Select a function": "", + "Select a function": "选择一个函数", "Select a mode": "选择一个模式", "Select a model": "选择一个模型", "Select a pipeline": "选择一个管道", "Select a pipeline url": "选择一个管道 URL", - "Select a tool": "", + "Select a tool": "选择一个工具", "Select an Ollama instance": "选择一个 Ollama 实例", "Select Documents": "选择文档", "Select model": "选择模型", @@ -530,7 +530,7 @@ "Show Admin Details in Account Pending Overlay": "在用户待激活界面中显示管理员邮箱等详细信息", "Show Model": "显示", "Show shortcuts": "显示快捷方式", - "Show your support!": "", + "Show your support!": "表达你的支持!", "Showcased creativity": "很有创意", "sidebar": "侧边栏", "Sign in": "登录", @@ -581,16 +581,16 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "请联系管理员以访问。管理员可以在后台管理面板中管理用户状态。", "To add documents here, upload them to the \"Documents\" workspace first.": "要在此处添加文档,请先将它们上传到工作空间中的“文档”内。", "to chat input.": "到对话输入。", - "To select filters here, add them to the \"Functions\" workspace first.": "要在这里选择过滤器,请先将它们添加到工作空间中的“功能”。", + "To select filters here, add them to the \"Functions\" workspace first.": "要在这里选择过滤器,请先将它们添加到工作空间中的“函数”。", "To select toolkits here, add them to the \"Tools\" workspace first.": "要在这里选择工具包,请先将它们添加到工作空间中的“工具”。", "Today": "今天", "Toggle settings": "切换设置", "Toggle sidebar": "切换侧边栏", "Tokens To Keep On Context Refresh (num_keep)": "在语境刷新时需保留的 Tokens", - "Tool created successfully": "", - "Tool deleted successfully": "", - "Tool imported successfully": "", - "Tool updated successfully": "", + "Tool created successfully": "工具创建成功", + "Tool deleted successfully": "工具删除成功", + "Tool imported successfully": "工具导入成功", + "Tool updated successfully": "工具更新成功", "Tools": "工具", "Top K": "Top K", "Top P": "Top P", @@ -619,14 +619,14 @@ "use_mlock (Ollama)": "use_mlock(Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "用户", - "User location successfully retrieved.": "", + "User location successfully retrieved.": "成功检索到用户位置。", "User Permissions": "用户权限", "Users": "用户", "Utilize": "利用", "Valid time units:": "有效时间单位:", - "Valves": "", - "Valves updated": "", - "Valves updated successfully": "", + "Valves": "值", + "Valves updated": "已更新值", + "Valves updated successfully": "值更新成功", "variable": "变量", "variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换。", "Version": "版本", From c07da8d1f3ddbad652af8bd2acf7202def39bc23 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 27 Jun 2024 10:56:00 -0700 Subject: [PATCH 279/287] chore: format --- src/lib/i18n/locales/es-ES/translation.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index cf8d7fb87..0f9565d25 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -404,7 +404,6 @@ "Oops! There was an error in the previous response. Please try again or contact admin.": "¡Oops! Hubo un error en la respuesta anterior. Intente de nuevo o póngase en contacto con el administrador.", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "¡Ups! Estás utilizando un método no compatible (solo frontend). Por favor ejecute la WebUI desde el backend.", "Open": "Abrir", - "Open AI": "Abrir AI", "Open AI (Dall-E)": "Abrir AI (Dall-E)", "Open new chat": "Abrir nuevo chat", "OpenAI": "OpenAI", From 3c7f45ced446e6702ff62e40c2569eef61f5df7f Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 27 Jun 2024 11:12:07 -0700 Subject: [PATCH 280/287] fix --- src/lib/components/admin/Settings/Connections.svelte | 5 ++++- src/lib/components/common/SensitiveInput.svelte | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/components/admin/Settings/Connections.svelte b/src/lib/components/admin/Settings/Connections.svelte index 9f81bc639..b11e1760e 100644 --- a/src/lib/components/admin/Settings/Connections.svelte +++ b/src/lib/components/admin/Settings/Connections.svelte @@ -230,7 +230,10 @@ {/if}
- +
{#if idx === 0}
diff --git a/src/routes/(app)/workspace/models/create/+page.svelte b/src/routes/(app)/workspace/models/create/+page.svelte index 479e83cee..6534fb49c 100644 --- a/src/routes/(app)/workspace/models/create/+page.svelte +++ b/src/routes/(app)/workspace/models/create/+page.svelte @@ -2,7 +2,7 @@ import { v4 as uuidv4 } from 'uuid'; import { toast } from 'svelte-sonner'; import { goto } from '$app/navigation'; - import { settings, user, config, models, tools } from '$lib/stores'; + import { settings, user, config, models, tools, functions } from '$lib/stores'; import TurndownService from 'turndown'; @@ -17,6 +17,7 @@ import ToolsSelector from '$lib/components/workspace/Models/ToolsSelector.svelte'; import { stringify } from 'postcss'; import { parseFile } from '$lib/utils/characters'; + import FiltersSelector from '$lib/components/workspace/Models/FiltersSelector.svelte'; const i18n = getContext('i18n'); @@ -61,6 +62,7 @@ let toolIds = []; let knowledge = []; + let filterIds = []; $: if (name) { id = name @@ -105,6 +107,14 @@ } } + if (filterIds.length > 0) { + info.meta.filterIds = filterIds; + } else { + if (info.meta.filterIds) { + delete info.meta.filterIds; + } + } + info.params.stop = params.stop ? params.stop.split(',').filter((s) => s.trim()) : null; Object.keys(info.params).forEach((key) => { if (info.params[key] === '' || info.params[key] === null) { @@ -173,6 +183,10 @@ capabilities = { ...capabilities, ...(model?.info?.meta?.capabilities ?? {}) }; toolIds = model?.info?.meta?.toolIds ?? []; + if (model?.info?.meta?.filterIds) { + filterIds = [...model?.info?.meta?.filterIds]; + } + info = { ...info, ...model.info @@ -604,6 +618,13 @@
+
+ func.type === 'filter')} + /> +
+
{$i18n.t('Capabilities')}
From edbd07f893dcf6fdd996a098a74264f106e4129f Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 27 Jun 2024 13:04:12 -0700 Subject: [PATCH 284/287] feat: global filter --- .../migrations/018_add_function_is_global.py | 49 +++++++++++++++++++ backend/apps/webui/models/functions.py | 13 +++++ backend/apps/webui/routers/functions.py | 27 ++++++++++ backend/main.py | 49 +++++++++---------- src/lib/apis/functions/index.ts | 32 ++++++++++++ src/lib/components/icons/GlobeAlt.svelte | 19 +++++++ src/lib/components/workspace/Functions.svelte | 25 +++++++++- .../workspace/Functions/FunctionMenu.svelte | 27 ++++++++-- 8 files changed, 212 insertions(+), 29 deletions(-) create mode 100644 backend/apps/webui/internal/migrations/018_add_function_is_global.py create mode 100644 src/lib/components/icons/GlobeAlt.svelte diff --git a/backend/apps/webui/internal/migrations/018_add_function_is_global.py b/backend/apps/webui/internal/migrations/018_add_function_is_global.py new file mode 100644 index 000000000..04cdab705 --- /dev/null +++ b/backend/apps/webui/internal/migrations/018_add_function_is_global.py @@ -0,0 +1,49 @@ +"""Peewee migrations -- 017_add_user_oauth_sub.py. + +Some examples (model - class or model name):: + + > Model = migrator.orm['table_name'] # Return model in current state by name + > Model = migrator.ModelClass # Return model in current state by name + + > migrator.sql(sql) # Run custom SQL + > migrator.run(func, *args, **kwargs) # Run python function with the given args + > migrator.create_model(Model) # Create a model (could be used as decorator) + > migrator.remove_model(model, cascade=True) # Remove a model + > migrator.add_fields(model, **fields) # Add fields to a model + > migrator.change_fields(model, **fields) # Change fields + > migrator.remove_fields(model, *field_names, cascade=True) + > migrator.rename_field(model, old_field_name, new_field_name) + > migrator.rename_table(model, new_table_name) + > migrator.add_index(model, *col_names, unique=False) + > migrator.add_not_null(model, *field_names) + > migrator.add_default(model, field_name, default) + > migrator.add_constraint(model, name, sql) + > migrator.drop_index(model, *col_names) + > migrator.drop_not_null(model, *field_names) + > migrator.drop_constraints(model, *constraints) + +""" + +from contextlib import suppress + +import peewee as pw +from peewee_migrate import Migrator + + +with suppress(ImportError): + import playhouse.postgres_ext as pw_pext + + +def migrate(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your migrations here.""" + + migrator.add_fields( + "function", + is_global=pw.BooleanField(default=False), + ) + + +def rollback(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your rollback migrations here.""" + + migrator.remove_fields("function", "is_global") diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py index 261987981..2cace54c4 100644 --- a/backend/apps/webui/models/functions.py +++ b/backend/apps/webui/models/functions.py @@ -30,6 +30,7 @@ class Function(Model): meta = JSONField() valves = JSONField() is_active = BooleanField(default=False) + is_global = BooleanField(default=False) updated_at = BigIntegerField() created_at = BigIntegerField() @@ -50,6 +51,7 @@ class FunctionModel(BaseModel): content: str meta: FunctionMeta is_active: bool = False + is_global: bool = False updated_at: int # timestamp in epoch created_at: int # timestamp in epoch @@ -66,6 +68,7 @@ class FunctionResponse(BaseModel): name: str meta: FunctionMeta is_active: bool + is_global: bool updated_at: int # timestamp in epoch created_at: int # timestamp in epoch @@ -144,6 +147,16 @@ class FunctionsTable: for function in Function.select().where(Function.type == type) ] + def get_global_filter_functions(self) -> List[FunctionModel]: + return [ + FunctionModel(**model_to_dict(function)) + for function in Function.select().where( + Function.type == "filter", + Function.is_active == True, + Function.is_global == True, + ) + ] + def get_function_valves_by_id(self, id: str) -> Optional[dict]: try: function = Function.get(Function.id == id) diff --git a/backend/apps/webui/routers/functions.py b/backend/apps/webui/routers/functions.py index 4c89ca487..f01133a35 100644 --- a/backend/apps/webui/routers/functions.py +++ b/backend/apps/webui/routers/functions.py @@ -147,6 +147,33 @@ async def toggle_function_by_id(id: str, user=Depends(get_admin_user)): ) +############################ +# ToggleGlobalById +############################ + + +@router.post("/id/{id}/toggle/global", response_model=Optional[FunctionModel]) +async def toggle_global_by_id(id: str, user=Depends(get_admin_user)): + function = Functions.get_function_by_id(id) + if function: + function = Functions.update_function_by_id( + id, {"is_global": not function.is_global} + ) + + if function: + return function + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error updating function"), + ) + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + ############################ # UpdateFunctionById ############################ diff --git a/backend/main.py b/backend/main.py index d0e85ddda..aae305c5e 100644 --- a/backend/main.py +++ b/backend/main.py @@ -416,21 +416,23 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ) return 0 - filter_ids = [] + filter_ids = [ + function.id for function in Functions.get_global_filter_functions() + ] if "info" in model and "meta" in model["info"]: - enabled_filter_ids = [ - function.id - for function in Functions.get_functions_by_type( - "filter", active_only=True - ) - ] - filter_ids = [ - filter_id - for filter_id in enabled_filter_ids - if filter_id in model["info"]["meta"].get("filterIds", []) - ] + filter_ids.extend(model["info"]["meta"].get("filterIds", [])) filter_ids = list(set(filter_ids)) + enabled_filter_ids = [ + function.id + for function in Functions.get_functions_by_type( + "filter", active_only=True + ) + ] + filter_ids = [ + filter_id for filter_id in filter_ids if filter_id in enabled_filter_ids + ] + filter_ids.sort(key=get_priority) for filter_id in filter_ids: filter = Functions.get_function_by_id(filter_id) @@ -919,7 +921,6 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u ) model = app.state.MODELS[model_id] - print(model) pipe = model.get("pipe") if pipe: @@ -1010,21 +1011,19 @@ async def chat_completed(form_data: dict, user=Depends(get_verified_user)): return (function.valves if function.valves else {}).get("priority", 0) return 0 - filter_ids = [] + filter_ids = [function.id for function in Functions.get_global_filter_functions()] if "info" in model and "meta" in model["info"]: - enabled_filter_ids = [ - function.id - for function in Functions.get_functions_by_type( - "filter", active_only=True - ) - ] - filter_ids = [ - filter_id - for filter_id in enabled_filter_ids - if filter_id in model["info"]["meta"].get("filterIds", []) - ] + filter_ids.extend(model["info"]["meta"].get("filterIds", [])) filter_ids = list(set(filter_ids)) + enabled_filter_ids = [ + function.id + for function in Functions.get_functions_by_type("filter", active_only=True) + ] + filter_ids = [ + filter_id for filter_id in filter_ids if filter_id in enabled_filter_ids + ] + # Sort filter_ids by priority, using the get_priority function filter_ids.sort(key=get_priority) diff --git a/src/lib/apis/functions/index.ts b/src/lib/apis/functions/index.ts index 2d5ad16b7..ed3306b32 100644 --- a/src/lib/apis/functions/index.ts +++ b/src/lib/apis/functions/index.ts @@ -224,6 +224,38 @@ export const toggleFunctionById = async (token: string, id: string) => { return res; }; +export const toggleGlobalById = async (token: string, id: string) => { + let error = null; + + const res = await fetch(`${WEBUI_API_BASE_URL}/functions/id/${id}/toggle/global`, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + } + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.json(); + }) + .then((json) => { + return json; + }) + .catch((err) => { + error = err.detail; + + console.log(err); + return null; + }); + + if (error) { + throw error; + } + + return res; +}; + export const getFunctionValvesById = async (token: string, id: string) => { let error = null; diff --git a/src/lib/components/icons/GlobeAlt.svelte b/src/lib/components/icons/GlobeAlt.svelte new file mode 100644 index 000000000..d2f86f438 --- /dev/null +++ b/src/lib/components/icons/GlobeAlt.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index 8a8f88812..8c6389711 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -14,7 +14,8 @@ exportFunctions, getFunctionById, getFunctions, - toggleFunctionById + toggleFunctionById, + toggleGlobalById } from '$lib/apis/functions'; import ArrowDownTray from '../icons/ArrowDownTray.svelte'; @@ -113,6 +114,22 @@ models.set(await getModels(localStorage.token)); } }; + + const toggleGlobalHandler = async (func) => { + const res = await toggleGlobalById(localStorage.token, func.id).catch((error) => { + toast.error(error); + }); + + if (res) { + if (func.is_global) { + toast.success($i18n.t('Filter is now globally enabled')); + } else { + toast.success($i18n.t('Filter is now globally disabled')); + } + + functions.set(await getFunctions(localStorage.token)); + } + }; @@ -259,6 +276,7 @@ { goto(`/workspace/functions/edit?id=${encodeURIComponent(func.id)}`); }} @@ -275,6 +293,11 @@ selectedFunction = func; showDeleteConfirm = true; }} + toggleGlobalHandler={() => { + if (func.type === 'filter') { + toggleGlobalHandler(func); + } + }} onClose={() => {}} >