From 1d30d8a13adfc3081204b94d058dee08af1256d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 02:22:11 +0000 Subject: [PATCH 001/129] build(deps): bump python-multipart from 0.0.18 to 0.0.20 in /backend Bumps [python-multipart](https://github.com/Kludex/python-multipart) from 0.0.18 to 0.0.20. - [Release notes](https://github.com/Kludex/python-multipart/releases) - [Changelog](https://github.com/Kludex/python-multipart/blob/master/CHANGELOG.md) - [Commits](https://github.com/Kludex/python-multipart/compare/0.0.18...0.0.20) --- updated-dependencies: - dependency-name: python-multipart dependency-version: 0.0.20 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index ca2ea50609d..278898a9d48 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,7 +1,7 @@ fastapi==0.115.7 uvicorn[standard]==0.34.0 pydantic==2.10.6 -python-multipart==0.0.18 +python-multipart==0.0.20 python-socketio==5.11.3 python-jose==3.4.0 From fc5c8dbe3f9354e59f3485482906db6e3641ad3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 02:22:13 +0000 Subject: [PATCH 002/129] build(deps): bump einops from 0.8.0 to 0.8.1 in /backend Bumps [einops](https://github.com/arogozhnikov/einops) from 0.8.0 to 0.8.1. - [Release notes](https://github.com/arogozhnikov/einops/releases) - [Commits](https://github.com/arogozhnikov/einops/compare/v0.8.0...v0.8.1) --- updated-dependencies: - dependency-name: einops dependency-version: 0.8.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index ca2ea50609d..56f5d4c39cc 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -55,7 +55,7 @@ elasticsearch==8.17.1 transformers sentence-transformers==3.3.1 colbert-ai==0.2.21 -einops==0.8.0 +einops==0.8.1 ftfy==6.2.3 From bb0e11bb970a8bb1044f039d749474f4d026dee7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 02:22:16 +0000 Subject: [PATCH 003/129] build(deps): bump pypandoc from 1.13 to 1.15 in /backend Bumps [pypandoc](https://github.com/JessicaTegner/pypandoc) from 1.13 to 1.15. - [Release notes](https://github.com/JessicaTegner/pypandoc/releases) - [Changelog](https://github.com/JessicaTegner/pypandoc/blob/master/release.md) - [Commits](https://github.com/JessicaTegner/pypandoc/compare/v1.13...v1.15) --- updated-dependencies: - dependency-name: pypandoc dependency-version: '1.15' dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index ca2ea50609d..e0d041a0066 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -67,7 +67,7 @@ python-pptx==1.0.0 unstructured==0.16.17 nltk==3.9.1 Markdown==3.7 -pypandoc==1.13 +pypandoc==1.15 pandas==2.2.3 openpyxl==3.1.5 pyxlsb==1.0.10 From e0ec2cdeb021cbfcc75cf10eb6cc1fba28fe5b11 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 31 Mar 2025 20:32:12 -0700 Subject: [PATCH 004/129] refac: $user --- .../components/admin/Settings/Connections.svelte | 2 +- .../components/admin/Settings/Evaluations.svelte | 2 +- src/lib/components/admin/Settings/Images.svelte | 2 +- src/lib/components/admin/Settings/Interface.svelte | 2 +- .../admin/Settings/Models/ManageModelsModal.svelte | 2 +- src/lib/components/channel/Channel.svelte | 2 +- src/lib/components/channel/Messages.svelte | 8 ++++---- src/lib/components/channel/Messages/Message.svelte | 4 ++-- src/lib/components/channel/Navbar.svelte | 4 ++-- src/lib/components/channel/Thread.svelte | 2 +- src/lib/components/chat/Chat.svelte | 10 +++++----- src/lib/components/chat/ChatPlaceholder.svelte | 2 +- src/lib/components/chat/Controls/Controls.svelte | 2 +- .../chat/MessageInput/Commands/Prompts.svelte | 2 +- .../components/chat/MessageInput/InputMenu.svelte | 2 +- .../chat/Messages/ResponseMessage.svelte | 4 ++-- src/lib/components/chat/ModelSelector.svelte | 2 +- .../components/chat/ModelSelector/Selector.svelte | 2 +- src/lib/components/chat/Navbar.svelte | 6 +++--- src/lib/components/chat/Placeholder.svelte | 2 +- src/lib/components/chat/Settings/Account.svelte | 10 +++++----- src/lib/components/chat/Settings/General.svelte | 2 +- src/lib/components/chat/Settings/Interface.svelte | 2 +- src/lib/components/chat/SettingsModal.svelte | 6 +++--- src/lib/components/layout/Navbar.svelte | 4 ++-- src/lib/components/layout/Sidebar.svelte | 14 +++++++------- src/routes/(app)/+layout.svelte | 12 ++++++------ 27 files changed, 57 insertions(+), 57 deletions(-) diff --git a/src/lib/components/admin/Settings/Connections.svelte b/src/lib/components/admin/Settings/Connections.svelte index 2fcfadaec81..ac0566f225d 100644 --- a/src/lib/components/admin/Settings/Connections.svelte +++ b/src/lib/components/admin/Settings/Connections.svelte @@ -136,7 +136,7 @@ }; onMount(async () => { - if ($user.role === 'admin') { + if ($user?.role === 'admin') { let ollamaConfig = {}; let openaiConfig = {}; diff --git a/src/lib/components/admin/Settings/Evaluations.svelte b/src/lib/components/admin/Settings/Evaluations.svelte index cf003504c5f..b46669b526e 100644 --- a/src/lib/components/admin/Settings/Evaluations.svelte +++ b/src/lib/components/admin/Settings/Evaluations.svelte @@ -77,7 +77,7 @@ }; onMount(async () => { - if ($user.role === 'admin') { + if ($user?.role === 'admin') { evaluationConfig = await getConfig(localStorage.token).catch((err) => { toast.error(err); return null; diff --git a/src/lib/components/admin/Settings/Images.svelte b/src/lib/components/admin/Settings/Images.svelte index 88039a0e39d..64fa249dc35 100644 --- a/src/lib/components/admin/Settings/Images.svelte +++ b/src/lib/components/admin/Settings/Images.svelte @@ -176,7 +176,7 @@ }; onMount(async () => { - if ($user.role === 'admin') { + if ($user?.role === 'admin') { const res = await getConfig(localStorage.token).catch((error) => { toast.error(`${error}`); return null; diff --git a/src/lib/components/admin/Settings/Interface.svelte b/src/lib/components/admin/Settings/Interface.svelte index e3542475e6d..adb4fbdf911 100644 --- a/src/lib/components/admin/Settings/Interface.svelte +++ b/src/lib/components/admin/Settings/Interface.svelte @@ -380,7 +380,7 @@ - {#if $user.role === 'admin'} + {#if $user?.role === 'admin'}
diff --git a/src/lib/components/admin/Settings/Models/ManageModelsModal.svelte b/src/lib/components/admin/Settings/Models/ManageModelsModal.svelte index 6b53952e157..117009ddaa5 100644 --- a/src/lib/components/admin/Settings/Models/ManageModelsModal.svelte +++ b/src/lib/components/admin/Settings/Models/ManageModelsModal.svelte @@ -19,7 +19,7 @@ let ollamaConfig = null; onMount(async () => { - if ($user.role === 'admin') { + if ($user?.role === 'admin') { await Promise.all([ (async () => { ollamaConfig = await getOllamaConfig(localStorage.token); diff --git a/src/lib/components/channel/Channel.svelte b/src/lib/components/channel/Channel.svelte index 275f76d29cf..ce2aa54f1c7 100644 --- a/src/lib/components/channel/Channel.svelte +++ b/src/lib/components/channel/Channel.svelte @@ -106,7 +106,7 @@ messages[idx] = data; } } else if (type === 'typing' && event.message_id === null) { - if (event.user.id === $user.id) { + if (event.user.id === $user?.id) { return; } diff --git a/src/lib/components/channel/Messages.svelte b/src/lib/components/channel/Messages.svelte index f8ff2f229c0..e1bc326b375 100644 --- a/src/lib/components/channel/Messages.svelte +++ b/src/lib/components/channel/Messages.svelte @@ -132,7 +132,7 @@ if ( (message?.reactions ?? []) .find((reaction) => reaction.name === name) - ?.user_ids?.includes($user.id) ?? + ?.user_ids?.includes($user?.id) ?? false ) { messages = messages.map((m) => { @@ -140,7 +140,7 @@ const reaction = m.reactions.find((reaction) => reaction.name === name); if (reaction) { - reaction.user_ids = reaction.user_ids.filter((id) => id !== $user.id); + reaction.user_ids = reaction.user_ids.filter((id) => id !== $user?.id); reaction.count = reaction.user_ids.length; if (reaction.count === 0) { @@ -167,12 +167,12 @@ const reaction = m.reactions.find((reaction) => reaction.name === name); if (reaction) { - reaction.user_ids.push($user.id); + reaction.user_ids.push($user?.id); reaction.count = reaction.user_ids.length; } else { m.reactions.push({ name: name, - user_ids: [$user.id], + user_ids: [$user?.id], count: 1 }); } diff --git a/src/lib/components/channel/Messages/Message.svelte b/src/lib/components/channel/Messages/Message.svelte index 0736a25129f..9989388060a 100644 --- a/src/lib/components/channel/Messages/Message.svelte +++ b/src/lib/components/channel/Messages/Message.svelte @@ -106,7 +106,7 @@ {/if} - {#if message.user_id === $user.id || $user.role === 'admin'} + {#if message.user_id === $user?.id || $user?.role === 'admin'}
- {#if $user.role === 'admin' || $user?.permissions.chat?.controls} + {#if $user?.role === 'admin' || $user?.permissions.chat?.controls}
diff --git a/src/lib/components/chat/MessageInput/Commands/Prompts.svelte b/src/lib/components/chat/MessageInput/Commands/Prompts.svelte index 0e7a601e4be..26cf1d36831 100644 --- a/src/lib/components/chat/MessageInput/Commands/Prompts.svelte +++ b/src/lib/components/chat/MessageInput/Commands/Prompts.svelte @@ -86,7 +86,7 @@ if (command.content.includes('{{USER_NAME}}')) { console.log($user); - const name = $user.name || 'User'; + const name = $user?.name || 'User'; text = text.replaceAll('{{USER_NAME}}', name); } diff --git a/src/lib/components/chat/MessageInput/InputMenu.svelte b/src/lib/components/chat/MessageInput/InputMenu.svelte index 07f337dcbf5..27fe2cde298 100644 --- a/src/lib/components/chat/MessageInput/InputMenu.svelte +++ b/src/lib/components/chat/MessageInput/InputMenu.svelte @@ -39,7 +39,7 @@ } let fileUploadEnabled = true; - $: fileUploadEnabled = $user.role === 'admin' || $user?.permissions?.chat?.file_upload; + $: fileUploadEnabled = $user?.role === 'admin' || $user?.permissions?.chat?.file_upload; const init = async () => { if ($_tools === null) { diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index a8c2e7c9fad..04a454a0ef2 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -920,7 +920,7 @@ {#if message.done} {#if !readOnly} - {#if $user.role === 'user' ? ($user?.permissions?.chat?.edit ?? true) : true} + {#if $user?.role === 'user' ? ($user?.permissions?.chat?.edit ?? true) : true}
- {#if $user.role === 'admin' || $user?.permissions.chat?.controls} + {#if $user?.role === 'admin' || $user?.permissions.chat?.controls}
diff --git a/src/lib/components/chat/Settings/Interface.svelte b/src/lib/components/chat/Settings/Interface.svelte index b0a0b79706f..171cfe27ac0 100644 --- a/src/lib/components/chat/Settings/Interface.svelte +++ b/src/lib/components/chat/Settings/Interface.svelte @@ -441,7 +441,7 @@
- {#if $user.role === 'admin'} + {#if $user?.role === 'admin'}
diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index e3b20c2db72..15bf9c0baeb 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/src/lib/components/chat/SettingsModal.svelte @@ -462,7 +462,7 @@
{$i18n.t('Interface')}
{:else if tabId === 'connections'} - {#if $user.role === 'admin' || ($user.role === 'user' && $config?.features?.enable_direct_connections)} + {#if $user?.role === 'admin' || ($user?.role === 'user' && $config?.features?.enable_direct_connections)}
{:else if tabId === 'admin'} - {#if $user.role === 'admin'} + {#if $user?.role === 'admin'} {/if} diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index b68cc67a013..709813ef180 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -55,9 +55,9 @@ let version; onMount(async () => { - if ($user === undefined) { + if ($user === undefined || $user === null) { await goto('/auth'); - } else if (['user', 'admin'].includes($user.role)) { + } else if (['user', 'admin'].includes($user?.role)) { try { // Check if IndexedDB exists DB = await openDB('Chats', 1); @@ -191,7 +191,7 @@ } }); - if ($user.role === 'admin' && ($settings?.showChangelog ?? true)) { + if ($user?.role === 'admin' && ($settings?.showChangelog ?? true)) { showChangelog.set($settings?.version !== $config.version); } @@ -199,14 +199,14 @@ temporaryChatEnabled.set(true); } - console.log($user.permissions); + console.log($user?.permissions); if ($user?.permissions?.chat?.temporary_enforced) { temporaryChatEnabled.set(true); } // Check for version updates - if ($user.role === 'admin') { + if ($user?.role === 'admin') { // Check if the user has dismissed the update toast in the last 24 hours if (localStorage.dismissedUpdateToast) { const dismissedUpdateToast = new Date(Number(localStorage.dismissedUpdateToast)); @@ -255,7 +255,7 @@ class=" text-gray-700 dark:text-gray-100 bg-white dark:bg-gray-900 h-screen max-h-[100dvh] overflow-auto flex flex-row justify-end" > {#if loaded} - {#if !['user', 'admin'].includes($user.role)} + {#if !['user', 'admin'].includes($user?.role)} {:else if localDBChats.length > 0}
From abba7c128c2b38199ff1a50a9de1fb277d4c840a Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 1 Apr 2025 08:21:03 +0200 Subject: [PATCH 005/129] [FEAT]-Adjust Translations for temporary chat --- .../components/chat/ChatPlaceholder.svelte | 20 ++++++++++--------- src/lib/components/chat/Placeholder.svelte | 20 ++++++++++--------- src/lib/i18n/locales/de-DE/translation.json | 5 +++-- src/lib/i18n/locales/en-GB/translation.json | 1 + src/lib/i18n/locales/en-US/translation.json | 1 + 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/lib/components/chat/ChatPlaceholder.svelte b/src/lib/components/chat/ChatPlaceholder.svelte index 9804dcaca0b..99eb8cbce96 100644 --- a/src/lib/components/chat/ChatPlaceholder.svelte +++ b/src/lib/components/chat/ChatPlaceholder.svelte @@ -29,6 +29,8 @@ $: models = modelIds.map((id) => $_models.find((m) => m.id === id)); + const tempChatTooltipText = 'This chat won’t appear in history and your messages will not be saved.'; + onMount(() => { mounted = true; }); @@ -67,15 +69,15 @@
{#if $temporaryChatEnabled} - -
- Temporary Chat -
-
+ +
+ {$i18n.t('Temporary Chat')} +
+
{/if}
$_models.find((m) => m.id === id)); + const tempChatTooltipText = 'This chat won’t appear in history and your messages will not be saved.'; + onMount(() => {});
{#if $temporaryChatEnabled} - -
- Temporary Chat -
-
+ +
+ {$i18n.t('Temporary Chat')} +
+
{/if}
Date: Tue, 1 Apr 2025 08:26:21 +0200 Subject: [PATCH 006/129] fix: update Polish translations for clarity and accuracy --- src/lib/i18n/locales/pl-PL/translation.json | 72 ++++++++++----------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 0d7185a2060..7441bffc423 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -92,7 +92,7 @@ "Archive All Chats": "Archiwizuj wszystkie rozmowy", "Archived Chats": "Zarchiwizowane rozmowy", "archived-chat-export": "archiwizowany eksport czatu", - "Are you sure you want to clear all memories? This action cannot be undone.": "", + "Are you sure you want to clear all memories? This action cannot be undone.": "Czy na pewno chcesz wyczyścić wszystkie wspomnienia? Tej akcji nie można cofnąć.", "Are you sure you want to delete this channel?": "Czy na pewno chcesz usunąć ten kanał?", "Are you sure you want to delete this message?": "Czy na pewno chcesz usunąć tę wiadomość?", "Are you sure you want to unarchive all archived chats?": "Czy na pewno chcesz przywrócić wszystkie zapisane rozmowy?", @@ -198,7 +198,7 @@ "Code formatted successfully": "Kod został sformatowany pomyślnie.", "Code Interpreter": "Interpreter kodu", "Code Interpreter Engine": "Silnik interpretatora kodu", - "Code Interpreter Prompt Template": "Szablon promtu interpretera kodu", + "Code Interpreter Prompt Template": "Szablon promptu interpretera kodu", "Collapse": "", "Collection": "Zbiór", "Color": "Kolor", @@ -222,7 +222,7 @@ "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "", "Contact Admin for WebUI Access": "Skontaktuj się z administratorem, aby uzyskać dostęp do WebUI.", "Content": "Treść", - "Content Extraction Engine": "", + "Content Extraction Engine": "Silnik ekstrakcji treści", "Context Length": "Długość kontekstu", "Continue Response": "Kontynuuj odpowiedź", "Continue with {{provider}}": "Kontynuuj z {{provider}}", @@ -256,7 +256,7 @@ "Created At": "Utworzono o", "Created by": "Stworzone przez", "CSV Import": "Import CSV", - "Ctrl+Enter to Send": "", + "Ctrl+Enter to Send": "Ctrl+Enter aby wysłać", "Current Model": "Aktualny model", "Current Password": "Aktualne hasło", "Custom": "Niestandardowy", @@ -289,7 +289,7 @@ "Delete function?": "Czy na pewno chcesz usunąć funkcję?", "Delete Message": "Usuń wiadomość", "Delete message?": "Usuń wiadomość?", - "Delete prompt?": "Czy chcesz usunąć podpowiedź?", + "Delete prompt?": "Czy chcesz usunąć prompt?", "delete this link": "usuń to połączenie", "Delete tool?": "Usunąć narzędzie?", "Delete User": "Usuń użytkownika", @@ -416,7 +416,7 @@ "Enter model tag (e.g. {{modelTag}})": "Wprowadź znacznik modelu (np. {{modelTag}})", "Enter Mojeek Search API Key": "Wprowadź klucz API Mojeek Search", "Enter Number of Steps (e.g. 50)": "Podaj liczbę kroków (np. 50)", - "Enter Perplexity API Key": "", + "Enter Perplexity API Key": "Klucz API Perplexity", "Enter proxy URL (e.g. https://user:password@host:port)": "Podaj adres URL proxy (np. https://user:password@host:port)", "Enter reasoning effort": "Podaj powód wysiłku", "Enter Sampler (e.g. Euler a)": "Wprowadź sampler (np. Euler a)", @@ -465,14 +465,14 @@ "Example: mail": "Przykład: mail", "Example: ou=users,dc=foo,dc=example": "Przykład: ou=users,dc=foo,dc=example", "Example: sAMAccountName or uid or userPrincipalName": "Przykład: sAMAccountName lub uid lub userPrincipalName", - "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "", + "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Przekroczono liczbę stanowisk w licencji. Skontaktuj się z pomocą techniczną, aby zwiększyć liczbę stanowisk.", "Exclude": "Wykluczyć", "Execute code for analysis": "Wykonaj kod do analizy", "Executing `{{NAME}}`...": "", "Expand": "", "Experimental": "Eksperymentalne", - "Explain": "", - "Explain this section to me in more detail": "", + "Explain": "Wyjaśnij", + "Explain this section to me in more detail": "Wyjaśnij mi ten fragment bardziej szczegółowo", "Explore the cosmos": "Odkrywaj kosmos", "Export": "Eksport", "Export All Archived Chats": "Wyeksportuj wszystkie archiwalne rozmowy", @@ -487,7 +487,7 @@ "Export to CSV": "Eksport do CSV", "Export Tools": "Eksportuj narzędzia", "External": "", - "External Models": "Zewnętrzne modele", + "External Models": "Modele lokalne", "Failed to add file.": "Nie udało się dodać pliku.", "Failed to connect to {{URL}} OpenAPI tool server": "", "Failed to create API Key.": "Nie udało się wygenerować klucza API.", @@ -541,9 +541,9 @@ "Functions allow arbitrary code execution": "Funkcje umożliwiają wykonanie dowolnego kodu", "Functions allow arbitrary code execution.": "Funkcje umożliwiają wykonanie dowolnego kodu.", "Functions imported successfully": "Funkcje zostały pomyślnie zaimportowane", - "Gemini": "", - "Gemini API Config": "", - "Gemini API Key is required.": "", + "Gemini": "Gemini", + "Gemini API Config": "Konfiguracja API Gemini", + "Gemini API Key is required.": "Wymagany jest klucz API Gemini.", "General": "Ogólne", "Generate an image": "Wygeneruj obraz", "Generate Image": "Wygeneruj obraz", @@ -585,8 +585,8 @@ "Image Generation (Experimental)": "Generowanie obrazu (eksperymentalne)", "Image Generation Engine": "Silnik generowania obrazów", "Image Max Compression Size": "Maksymalny rozmiar kompresji obrazu", - "Image Prompt Generation": "Generowanie podpowiedzi obrazu", - "Image Prompt Generation Prompt": "Generowanie obrazu Prompt", + "Image Prompt Generation": "Generowanie promptu obrazu", + "Image Prompt Generation Prompt": "Prompt do generowania obrazów", "Image Settings": "Ustawienia grafiki", "Images": "Obrazy", "Import Chats": "Importuj czaty", @@ -608,7 +608,7 @@ "Integration": "", "Interface": "Interfejs", "Invalid file format.": "Nieprawidłowy format pliku.", - "Invalid JSON schema": "", + "Invalid JSON schema": "Nieprawidłowy schemat JSON", "Invalid Tag": "Nieprawidłowy tag", "is typing...": "Pisanie...", "January": "Styczeń", @@ -636,7 +636,7 @@ "Kokoro.js (Browser)": "Kokoro.js (Przeglądarka)", "Kokoro.js Dtype": "Kokoro.js Dtype", "Label": "Nazwa serwera", - "Landing Page Mode": "Tryb strony głownej", + "Landing Page Mode": "Tryb strony głównej", "Language": "Język", "Last Active": "Ostatnio aktywny", "Last Modified": "Ostatnia modyfikacja", @@ -738,7 +738,7 @@ "No HTML, CSS, or JavaScript content found.": "Nie znaleziono żadnej zawartości HTML, CSS ani JavaScript.", "No inference engine with management support found": "Nie znaleziono silnika wnioskującego z obsługą zarządzania", "No knowledge found": "Brak znalezionej wiedzy", - "No memories to clear": "", + "No memories to clear": "Brak wspomnień do wyczyszczenia", "No model IDs": "Brak identyfikatorów modeli", "No models found": "Nie znaleziono modeli", "No models selected": "Brak wybranych modeli", @@ -805,7 +805,7 @@ "Permission denied when accessing microphone": "Odmowa dostępu podczas uzyskiwania dostępu do mikrofonu", "Permission denied when accessing microphone: {{error}}": "Odmowa dostępu do mikrofonu: {{error}}", "Permissions": "Uprawnienia", - "Perplexity API Key": "", + "Perplexity API Key": "Klucz API Perplexity", "Personalization": "Personalizacja", "Pin": "Przypnij", "Pinned": "Przypięty", @@ -833,20 +833,20 @@ "Previous 7 days": "Ostatnie 7 dni", "Private": "", "Profile Image": "Zdjęcie profilowe", - "Prompt": "Wprowadź podpowiedź: ", + "Prompt": "Wprowadź prompt: ", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (np. podaj ciekawostkę o Imperium Rzymskim)", "Prompt Autocompletion": "", "Prompt Content": "Treść podpowiedzi", - "Prompt created successfully": "Podpowiedź została utworzona pomyślnie", - "Prompt suggestions": "Sugestie podpowiedzi", - "Prompt updated successfully": "Podpowiedź została zaktualizowana pomyślnie.", - "Prompts": "Podpowiedzi", - "Prompts Access": "Dostęp do podpowiedzi", - "Prompts Public Sharing": "", - "Public": "", + "Prompt created successfully": "Prompt został utworzony pomyślnie", + "Prompt suggestions": "Sugestie promptów", + "Prompt updated successfully": "Prompt został zaktualizowany pomyślnie.", + "Prompts": "Prompty", + "Prompts Access": "Dostęp do promptów", + "Prompts Public Sharing": "Publiczne udostępnianie promptów", + "Public": "Publiczne", "Pull \"{{searchValue}}\" from Ollama.com": "Pobierz \"{{searchValue}}\" z Ollama.com", "Pull a model from Ollama.com": "Pobierz model z Ollama.com", - "Query Generation Prompt": "Podpowiedź do generowania zapytań", + "Query Generation Prompt": "Prompt do generowania zapytań", "RAG Template": "Szablon RAG", "Rating": "Ocena", "Re-rank models by topic similarity": "Ponowny ranking modeli według podobieństwa tematycznego", @@ -941,7 +941,7 @@ "Send": "Wyślij", "Send a Message": "Wyślij wiadomość", "Send message": "Wyślij wiadomość", - "Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Wysyła `stream_options: { include_usage: true }` w żądaniu. Wspierane dostawcy zwrócą informacje o użyciu tokena w odpowiedzi, gdy jest on ustawiony.", + "Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Wysyła `stream_options: { include_usage: true }` w żądaniu.\nObsługiwani dostawcy zwrócą informacje o użyciu tokenów w odpowiedzi, gdy to ustawienie jest aktywne.", "September": "Wrzesień", "SerpApi API Key": "Klucz API SerpApi", "SerpApi Engine": "Silnik SerpApi", @@ -975,7 +975,7 @@ "Share": "Podziel się", "Share Chat": "Udostępnij rozmowę", "Share to Open WebUI Community": "Udostępnij w społeczności OpenWebUI", - "Sharing Permissions": "", + "Sharing Permissions": "Uprawnienia udostępniania", "Show": "Wyświetl", "Show \"What's New\" modal on login": "Wyświetl okno dialogowe \"What's New\" podczas logowania", "Show Admin Details in Account Pending Overlay": "Wyświetl szczegóły administratora w okienu informacyjnym o potrzebie zatwierdzenia przez administratora konta użytkownika", @@ -1010,7 +1010,7 @@ "System": "System", "System Instructions": "Instrukcje systemowe", "System Prompt": "Podpowiedź systemowa", - "Tags": "", + "Tags": "Tagi", "Tags Generation": "Generowanie tagów", "Tags Generation Prompt": "Podpowiedź do generowania tagów", "Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "", @@ -1093,7 +1093,7 @@ "Tools": "Narzędzia", "Tools Access": "Narzędzia Dostępu", "Tools are a function calling system with arbitrary code execution": "Narzędzia to system wywoływania funkcji z możliwością wykonania dowolnego kodu.", - "Tools Function Calling Prompt": "Narzędzia Funkcja Wywołania Prompta", + "Tools Function Calling Prompt": "Narzędzia Funkcja Wywołania Promptu", "Tools have a function calling system that allows arbitrary code execution": "Narzędzia mają funkcję wywoływania systemu, która umożliwia wykonywanie dowolnego kodu", "Tools have a function calling system that allows arbitrary code execution.": "Narzędzia mają funkcję wywoływania systemu, która umożliwia wykonanie dowolnego kodu.", "Tools Public Sharing": "", @@ -1143,7 +1143,7 @@ "user": "użytkownik", "User": "Użytkownik", "User location successfully retrieved.": "Lokalizacja użytkownika została pomyślnie pobrana.", - "User Webhooks": "", + "User Webhooks": "Webhooki użytkownika", "Username": "Nazwa użytkownika", "Users": "Użytkownicy", "Using the default arena model with all models. Click the plus button to add custom models.": "Korzystanie z domyślnego modelu areny ze wszystkimi modelami. Kliknij przycisk plus, aby dodać niestandardowe modele.", @@ -1178,7 +1178,7 @@ "WebUI URL": "Adres URL interfejsu internetowego", "WebUI will make requests to \"{{url}}/api/chat\"": "WebUI będzie wysyłać żądania do \"{{url}}/api/chat\".", "WebUI will make requests to \"{{url}}/chat/completions\"": "WebUI będzie wysyłać żądania do \"{{url}}/chat/completions\".", - "WebUI will make requests to \"{{url}}/openapi.json\"": "", + "WebUI will make requests to \"{{url}}/openapi.json\"": "WebUI będzie wysyłać żądania do \"{{url}}/openapi.json\"", "What are you trying to achieve?": "Do czego dążysz?", "What are you working on?": "Nad czym pracujesz?", "What’s New in": "Co nowego w", @@ -1211,6 +1211,6 @@ "Your account status is currently pending activation.": "Twoje konto oczekuje obecnie na aktywację.", "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.": "Cała Twoja wpłata trafi bezpośrednio do dewelopera wtyczki; Open WebUI nie pobiera żadnej prowizji. Należy jednak pamiętać, że wybrana platforma finansowania może mieć własne opłaty.", "Youtube": "Youtube", - "Youtube Language": "", - "Youtube Proxy URL": "" + "Youtube Language": "Język Youtube", + "Youtube Proxy URL": "URL proxy Youtube" } From 295c7eb4c76a7b5973ad964e3d35b619446230f4 Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 1 Apr 2025 08:27:29 +0200 Subject: [PATCH 007/129] [improvement] default permission for new groups is false for enforce temp chat --- src/lib/components/admin/Users/Groups.svelte | 2 +- src/lib/components/admin/Users/Groups/Permissions.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/admin/Users/Groups.svelte b/src/lib/components/admin/Users/Groups.svelte index 15497cb205b..e2375a624e9 100644 --- a/src/lib/components/admin/Users/Groups.svelte +++ b/src/lib/components/admin/Users/Groups.svelte @@ -64,7 +64,7 @@ delete: true, edit: true, temporary: true, - temporary_enforced: true + temporary_enforced: false }, features: { web_search: true, diff --git a/src/lib/components/admin/Users/Groups/Permissions.svelte b/src/lib/components/admin/Users/Groups/Permissions.svelte index e1aa73f2a25..389477166f0 100644 --- a/src/lib/components/admin/Users/Groups/Permissions.svelte +++ b/src/lib/components/admin/Users/Groups/Permissions.svelte @@ -25,7 +25,7 @@ edit: true, file_upload: true, temporary: true, - temporary_enforced: true + temporary_enforced: false }, features: { web_search: true, From b60beb6ff66180709dc7d906557a85476f9307ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20P=C4=99kala?= Date: Tue, 1 Apr 2025 08:39:36 +0200 Subject: [PATCH 008/129] fix: improve Polish translations for clarity and accuracy --- src/lib/i18n/locales/pl-PL/translation.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 7441bffc423..1329a7c5f69 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -10,8 +10,8 @@ "{{COUNT}} hidden lines": "", "{{COUNT}} Replies": "{{COUNT}} odpowiedzi", "{{user}}'s Chats": "Czaty użytkownika {{user}}", - "{{webUIName}} Backend Required": "Backend dla {{webUIName}} wymagany", - "*Prompt node ID(s) are required for image generation": "Wymagane są identyfikatory węzłów wyzwalających do generowania obrazu.", + "{{webUIName}} Backend Required": "Backend dla {{webUIName}} jest wymagany", + "*Prompt node ID(s) are required for image generation": "Wymagane są identyfikatory węzłów wyzwalających do generowania obrazów.", "A new version (v{{LATEST_VERSION}}) is now available.": "Dostępna jest nowa wersja (v{{LATEST_VERSION}}).", "A task model is used when performing tasks such as generating titles for chats and web search queries": "Model zadań jest wykorzystywany podczas realizacji zadań, takich jak generowanie tytułów rozmów i zapytań wyszukiwania internetowego.", "a user": "użytkownik", @@ -110,7 +110,7 @@ "August": "Sierpień", "Authenticate": "Zaloguj się", "Authentication": "Uwierzytelnianie", - "Auto-Copy Response to Clipboard": "Automatyczna kopiuj odpowiedz do schowka", + "Auto-Copy Response to Clipboard": "Automatyczne kopiowanie odpowiedzi do schowka", "Auto-playback response": "Automatyczna odpowiedź na powtórzenie", "Autocomplete Generation": "Generowanie autouzupełniania", "Autocomplete Generation Input Max Length": "Maksymalna długość wejścia dla generowania autouzupełniania", @@ -186,7 +186,7 @@ "Click here to upload a workflow.json file.": "Kliknij tutaj, aby przesłać plik workflow.json.", "click here.": "kliknij tutaj.", "Click on the user role button to change a user's role.": "Kliknij w nazwą roli użytkownika, aby zmienić rolę użytkownika.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Zezwolenie na zapis do schowka odmówione. Sprawdź ustawienia przeglądarki, aby przyznać wymagany dostęp.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Nie można było skopiować do schowka. Sprawdź ustawienia przeglądarki, aby przyznać wymagany dostęp.", "Clone": "Sklonuj", "Clone Chat": "Sklonuj czat", "Clone of {{TITLE}}": "Klon {{TITLE}}", @@ -194,7 +194,7 @@ "Code execution": "Wykonanie kodu", "Code Execution": "Wykonanie kodu", "Code Execution Engine": "Silnik wykonawczy kodu", - "Code Execution Timeout": "", + "Code Execution Timeout": "Limit czasu wykonania kodu", "Code formatted successfully": "Kod został sformatowany pomyślnie.", "Code Interpreter": "Interpreter kodu", "Code Interpreter Engine": "Silnik interpretatora kodu", @@ -331,7 +331,7 @@ "Documents": "Dokumenty", "does not make any external connections, and your data stays securely on your locally hosted server.": "nie nawiązuje żadnych zewnętrznych połączeń, a Twoje dane pozostają bezpiecznie na Twoim lokalnie hostowanym serwerze.", "Domain Filter List": "Lista filtrów domeny", - "Don't have an account?": "Czy nie masz konta?", + "Don't have an account?": "Nie masz konta?", "don't install random functions from sources you don't trust.": "Nie instaluj losowych funkcji z niezaufanych źródeł.", "don't install random tools from sources you don't trust.": "Nie instaluj przypadkowych narzędzi z niezaufanych źródeł.", "Don't like the style": "Nie przypadł mi do gustu styl", @@ -370,7 +370,7 @@ "Embedding model set to \"{{embedding_model}}\"": "Model osadzania ustawiony na '{{embedding_model}}'", "Enable API Key": "Włącz klucz API", "Enable autocomplete generation for chat messages": "Włącz generowanie autouzupełniania dla wiadomości czatu", - "Enable Code Execution": "", + "Enable Code Execution": "Włącz wykonywanie kodu", "Enable Code Interpreter": "Włącz interpreter kodu", "Enable Community Sharing": "Włączanie udostępniania społecznościowego", "Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "Włącz blokowanie pamięci (mlock), aby zapobiec swappingowi danych modelu z RAM. Ta opcja blokuje zbiór stron roboczych modelu w RAM, co gwarantuje, że nie będą one wymieniane na dysk. Może to pomóc w utrzymaniu wydajności poprzez unikanie błędów strony i zapewnienie szybkiego dostępu do danych.", From 9f470a4ff50043821d37c57256835d9e67804203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20P=C4=99kala?= Date: Tue, 1 Apr 2025 08:53:12 +0200 Subject: [PATCH 009/129] fix: update Polish translations to sound more natural --- src/lib/i18n/locales/pl-PL/translation.json | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 1329a7c5f69..9fab9e535c2 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -51,7 +51,7 @@ "Admin": "Administrator", "Admin Panel": "Panel administracyjny", "Admin Settings": "Ustawienia administratora", - "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratorzy mają dostęp do wszystkich narzędzi przez cały czas; użytkownicy potrzebują przypisanych narzędzi zgodnie z modelem w przestrzeni roboczej.", + "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratorzy mają dostęp do wszystkich narzędzi przez cały czas; użytkownicy muszą mieć przydzielone narzędzia dla każdego modelu w przestrzeni roboczej.", "Advanced Parameters": "Zaawansowane ustawienia", "Advanced Params": "Zaawansowane ustawienia", "All": "", @@ -172,7 +172,7 @@ "Ciphers": "Szyfry", "Citation": "Cytat", "Clear memory": "Wyczyść pamięć", - "Clear Memory": "", + "Clear Memory": "Wyczyść pamięć", "click here": "kliknij tutaj", "Click here for filter guides.": "Kliknij tutaj, aby uzyskać podpowiedź do filtrów.", "Click here for help.": "Kliknij tutaj, aby uzyskać pomoc.", @@ -185,7 +185,7 @@ "Click here to select a py file.": "Kliknij tutaj, aby wybrać plik py.", "Click here to upload a workflow.json file.": "Kliknij tutaj, aby przesłać plik workflow.json.", "click here.": "kliknij tutaj.", - "Click on the user role button to change a user's role.": "Kliknij w nazwą roli użytkownika, aby zmienić rolę użytkownika.", + "Click on the user role button to change a user's role.": "Kliknij przycisk roli użytkownika, aby zmienić jego uprawnienia.", "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Nie można było skopiować do schowka. Sprawdź ustawienia przeglądarki, aby przyznać wymagany dostęp.", "Clone": "Sklonuj", "Clone Chat": "Sklonuj czat", @@ -200,7 +200,7 @@ "Code Interpreter Engine": "Silnik interpretatora kodu", "Code Interpreter Prompt Template": "Szablon promptu interpretera kodu", "Collapse": "", - "Collection": "Zbiór", + "Collection": "Kolekcja", "Color": "Kolor", "ComfyUI": "ComfyUI", "ComfyUI API Key": "Klucz API ComfyUI", @@ -252,7 +252,7 @@ "Create Knowledge": "Utwórz wiedzę", "Create new key": "Utwórz nowy klucz", "Create new secret key": "Utwórz nowy secret key", - "Created at": "Stworzone o", + "Created at": "Utworzono o", "Created At": "Utworzono o", "Created by": "Stworzone przez", "CSV Import": "Import CSV", @@ -468,7 +468,7 @@ "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Przekroczono liczbę stanowisk w licencji. Skontaktuj się z pomocą techniczną, aby zwiększyć liczbę stanowisk.", "Exclude": "Wykluczyć", "Execute code for analysis": "Wykonaj kod do analizy", - "Executing `{{NAME}}`...": "", + "Executing `{{NAME}}`...": "Wykonywanie `{{NAME}}`...", "Expand": "", "Experimental": "Eksperymentalne", "Explain": "Wyjaśnij", @@ -972,7 +972,7 @@ "Sets the stop sequences to use. When this pattern is encountered, the LLM will stop generating text and return. Multiple stop patterns may be set by specifying multiple separate stop parameters in a modelfile.": "Ustawia sekwencje stopu do użycia. Gdy ten wzorzec zostanie napotkany, LLM przestanie generować tekst i zwróci wynik. Można skonfigurować wiele sekwencji stopu, określając kilka oddzielnych parametrów stopu w pliku modelu.", "Settings": "Ustawienia", "Settings saved successfully!": "Ustawienia zostały zapisane pomyślnie!", - "Share": "Podziel się", + "Share": "Udostępnij", "Share Chat": "Udostępnij rozmowę", "Share to Open WebUI Community": "Udostępnij w społeczności OpenWebUI", "Sharing Permissions": "Uprawnienia udostępniania", @@ -997,7 +997,7 @@ "Speech-to-Text Engine": "Silnik konwersji mowy na tekst", "Stop": "Zatrzymaj się", "Stop Sequence": "Zatrzymaj sekwencję", - "Stream Chat Response": "Odpowiedź czatu strumieniowego", + "Stream Chat Response": "Strumieniowanie odpowiedzi z czatu", "STT Model": "Model STT", "STT Settings": "Ustawienia STT", "Subtitle (e.g. about the Roman Empire)": "Podtytuł (np. o Imperium Rzymskim)", @@ -1009,10 +1009,10 @@ "Sync directory": "Sync directory", "System": "System", "System Instructions": "Instrukcje systemowe", - "System Prompt": "Podpowiedź systemowa", + "System Prompt": "Prompt systemowy", "Tags": "Tagi", "Tags Generation": "Generowanie tagów", - "Tags Generation Prompt": "Podpowiedź do generowania tagów", + "Tags Generation Prompt": "Prompt do generowania tagów", "Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "", "Talk to model": "", "Tap to interrupt": "Kliknij, aby przerwać", @@ -1025,7 +1025,7 @@ "Text Splitter": "Rozdzielacz tekstu", "Text-to-Speech Engine": "Silnik konwersji tekstu na mowę", "Tfs Z": "Tfs Z", - "Thanks for your feedback!": "Dziękuję za twoją opinię!", + "Thanks for your feedback!": "Dziękujemy za twoją opinię!", "The Application Account DN you bind with for search": "Konto techniczne w formacie DN, z którym się wiążesz w celu przeszukiwania", "The base to search for users": "Podstawa do wyszukiwania użytkowników", "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "", @@ -1033,7 +1033,7 @@ "The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "Tablica wyników oceny opiera się na systemie rankingu Elo i jest aktualizowana w czasie rzeczywistym.", "The LDAP attribute that maps to the mail that users use to sign in.": "Atrybut LDAP, który mapuje się na adres e-mail używany przez użytkowników do logowania.", "The LDAP attribute that maps to the username that users use to sign in.": "Atrybut LDAP, który mapuje się na nazwę użytkownika, którą użytkownicy używają do logowania.", - "The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "Tablica wyników jest obecnie w fazie beta i możemy dostosować obliczenia oceny, gdy udoskonalamy algorytm.", + "The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "Tablica wyników jest w wersji beta, więc w miarę udoskonalania algorytmu możemy jeszcze modyfikować sposób obliczania ocen.", "The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "Maksymalny rozmiar pliku w MB. Jeśli rozmiar pliku przekroczy ten limit, plik nie zostanie przesłany.", "The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "Maksymalna liczba plików, które można użyć jednocześnie w czacie. Jeśli liczba plików przekroczy ten limit, pliki nie zostaną przesłane.", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Wynik powinien być wartością pomiędzy 0,0 (0%) a 1,0 (100%).", @@ -1054,8 +1054,8 @@ "This will delete all models including custom models and cannot be undone.": "To usunie wszystkie modele, w tym niestandardowe modele, i nie można tego cofnąć.", "This will reset the knowledge base and sync all files. Do you wish to continue?": "Czy chcesz wyzerować bazę wiedzy i zsynchronizować wszystkie pliki? Proszę potwierdź swoją decyzję.", "Thorough explanation": "Szczegółowe wyjaśnienie", - "Thought for {{DURATION}}": "Myśl na {{DURATION}}", - "Thought for {{DURATION}} seconds": "Myśl przez {{DURATION}} sekund", + "Thought for {{DURATION}}": "Myślenie przez {{DURATION}}", + "Thought for {{DURATION}} seconds": "Myślenie przez {{DURATION}} sekund", "Tika": "Tika", "Tika Server URL required.": "Wymagany jest adres URL serwera Tika.", "Tiktoken": "Tiktoken", From c8210d4043d99c470d7f49a406dcee25a4bea388 Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 1 Apr 2025 09:06:15 +0200 Subject: [PATCH 010/129] upated like in PR discussed --- src/lib/components/chat/ChatPlaceholder.svelte | 4 +--- src/lib/components/chat/Placeholder.svelte | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/lib/components/chat/ChatPlaceholder.svelte b/src/lib/components/chat/ChatPlaceholder.svelte index 99eb8cbce96..43fc94aeb0c 100644 --- a/src/lib/components/chat/ChatPlaceholder.svelte +++ b/src/lib/components/chat/ChatPlaceholder.svelte @@ -28,8 +28,6 @@ } $: models = modelIds.map((id) => $_models.find((m) => m.id === id)); - - const tempChatTooltipText = 'This chat won’t appear in history and your messages will not be saved.'; onMount(() => { mounted = true; @@ -70,7 +68,7 @@ {#if $temporaryChatEnabled} diff --git a/src/lib/components/chat/Placeholder.svelte b/src/lib/components/chat/Placeholder.svelte index db70d7602b4..be700ab009f 100644 --- a/src/lib/components/chat/Placeholder.svelte +++ b/src/lib/components/chat/Placeholder.svelte @@ -86,8 +86,6 @@ } $: models = selectedModels.map((id) => $_models.find((m) => m.id === id)); - - const tempChatTooltipText = 'This chat won’t appear in history and your messages will not be saved.'; onMount(() => {}); @@ -95,7 +93,7 @@
{#if $temporaryChatEnabled} From 29d57453355e4323f40d5b0706e3e8ed9c236255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20P=C4=99kala?= Date: Tue, 1 Apr 2025 09:14:29 +0200 Subject: [PATCH 011/129] fix: update Polish translation for "Capture" to improve accuracy --- src/lib/i18n/locales/pl-PL/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 9fab9e535c2..66793362ea9 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -146,7 +146,7 @@ "Camera": "Kamera", "Cancel": "Anuluj", "Capabilities": "Możliwości", - "Capture": "Uchwycić", + "Capture": "Przechwyć", "Certificate Path": "Ścieżka certyfikatu", "Change Password": "Zmień hasło", "Channel Name": "Nazwa kanału", From 85c8a9bd6886cbfd4e66a44edcb81559e605fba9 Mon Sep 17 00:00:00 2001 From: Panda Date: Tue, 1 Apr 2025 10:47:52 +0200 Subject: [PATCH 012/129] i18n: zh-cn --- src/lib/i18n/locales/zh-CN/translation.json | 38 ++++++++++----------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index eeeff3d4769..106674c431e 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -119,7 +119,7 @@ "AUTOMATIC1111 Base URL": "AUTOMATIC1111 基础地址", "AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基础地址。", "Available list": "可用列表", - "Available Tool Servers": "", + "Available Tool Servers": "可用的工具服务器", "available!": "版本可用!", "Awful": "糟糕", "Azure AI Speech": "Azure AI 语音", @@ -344,7 +344,7 @@ "Draw": "平局", "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'。", - "e.g. \"json\" or a JSON schema": "", + "e.g. \"json\" or a JSON schema": "例如 "json" 或 JSON 结构", "e.g. 60": "例如 '60'", "e.g. A filter to remove profanity from text": "例如:一个用于过滤文本中不当内容的过滤器", "e.g. My Filter": "例如:我的过滤器", @@ -379,7 +379,7 @@ "Enable Mirostat sampling for controlling perplexity.": "启用Mirostat采样以控制困惑度", "Enable New Sign Ups": "允许新用户注册", "Enabled": "启用", - "Enforce Temporary Chat": "", + "Enforce Temporary Chat": "强制临时聊天", "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": "输入一个关于你自己的详细信息,方便你的大语言模型记住这些内容", @@ -468,7 +468,7 @@ "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "已达到最大授权人数,请联系支持人员提升授权人数。", "Exclude": "排除", "Execute code for analysis": "执行代码进行分析", - "Executing `{{NAME}}`...": "", + "Executing `{{NAME}}`...": "正在执行 `{{NAME}}`...", "Expand": "展开", "Experimental": "实验性", "Explain": "解释", @@ -489,7 +489,7 @@ "External": "外部", "External Models": "外部模型", "Failed to add file.": "添加文件失败。", - "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to connect to {{URL}} OpenAPI tool server": "无法连接到 {{URL}} OpenAPI 工具服务器", "Failed to create API Key.": "无法创建 API 密钥。", "Failed to fetch models": "无法获取模型", "Failed to read clipboard contents": "无法读取剪贴板内容", @@ -570,7 +570,7 @@ "Hex Color": "十六进制颜色代码", "Hex Color - Leave empty for default color": "十六进制颜色代码 - 留空使用默认颜色", "Hide": "隐藏", - "Hide Model": "", + "Hide Model": "隐藏模型", "Home": "主页", "Host": "主机", "How can I help you today?": "有什么我能帮您的吗?", @@ -608,7 +608,7 @@ "Integration": "集成", "Interface": "界面", "Invalid file format.": "无效文件格式。", - "Invalid JSON schema": "", + "Invalid JSON schema": "无效的 JSON", "Invalid Tag": "无效标签", "is typing...": "输入中...", "January": "一月", @@ -630,7 +630,7 @@ "Knowledge Access": "访问知识库", "Knowledge created successfully.": "知识成功创建", "Knowledge deleted successfully.": "知识成功删除", - "Knowledge Public Sharing": "", + "Knowledge Public Sharing": "知识公开共享", "Knowledge reset successfully.": "知识成功重置", "Knowledge updated successfully": "知识成功更新", "Kokoro.js (Browser)": "Kokoro.js (Browser)", @@ -700,8 +700,8 @@ "Model {{modelId}} not found": "未找到模型 {{modelId}}", "Model {{modelName}} is not vision capable": "模型 {{modelName}} 不支持视觉能力", "Model {{name}} is now {{status}}": "模型 {{name}} 现在是 {{status}}", - "Model {{name}} is now hidden": "", - "Model {{name}} is now visible": "", + "Model {{name}} is now hidden": "模型 {{name}} 现已隐藏", + "Model {{name}} is now visible": "模型 {{name}} 现已可见", "Model accepts image inputs": "模型接受图像输入", "Model created successfully!": "模型创建成功!", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "检测到模型文件系统路径,无法继续进行。更新操作需要提供模型简称。", @@ -717,7 +717,7 @@ "Models": "模型", "Models Access": "访问模型列表", "Models configuration saved successfully": "模型配置保存成功", - "Models Public Sharing": "", + "Models Public Sharing": "模型公开分享", "Mojeek Search API Key": "Mojeek Search API 密钥", "more": "更多", "More": "更多", @@ -834,15 +834,15 @@ "Private": "私有", "Profile Image": "用户头像", "Prompt": "提示词 (Prompt)", - "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "提示(例如:给我讲一个关于罗马帝国的趣事。)", - "Prompt Autocompletion": "", + "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "提示词(例如:给我讲一个关于罗马帝国的趣事。)", + "Prompt Autocompletion": "提示词自动完成", "Prompt Content": "提示词内容", "Prompt created successfully": "提示词创建成功", "Prompt suggestions": "提示词建议", "Prompt updated successfully": "提示词更新成功", "Prompts": "提示词", "Prompts Access": "访问提示词", - "Prompts Public Sharing": "", + "Prompts Public Sharing": "提示词公开分享", "Public": "公共", "Pull \"{{searchValue}}\" from Ollama.com": "从 Ollama.com 拉取 \"{{searchValue}}\"", "Pull a model from Ollama.com": "从 Ollama.com 拉取一个模型", @@ -975,11 +975,11 @@ "Share": "分享", "Share Chat": "分享对话", "Share to Open WebUI Community": "分享到 OpenWebUI 社区", - "Sharing Permissions": "", + "Sharing Permissions": "共享权限", "Show": "显示", "Show \"What's New\" modal on login": "在登录时显示“更新内容”弹窗", "Show Admin Details in Account Pending Overlay": "在用户待激活界面中显示管理员邮箱等详细信息", - "Show Model": "", + "Show Model": "显示模型", "Show shortcuts": "显示快捷方式", "Show your support!": "表达你的支持!", "Showcased creativity": "很有创意", @@ -1096,7 +1096,7 @@ "Tools Function Calling Prompt": "工具函数调用提示词", "Tools have a function calling system that allows arbitrary code execution": "注意:工具有权执行任意代码", "Tools have a function calling system that allows arbitrary code execution.": "注意:工具有权执行任意代码。", - "Tools Public Sharing": "", + "Tools Public Sharing": "工具公开分享", "Top K": "Top K", "Top K Reranker": "Top K Reranker", "Top P": "Top P", @@ -1143,7 +1143,7 @@ "user": "用户", "User": "用户", "User location successfully retrieved.": "成功检索到用户位置。", - "User Webhooks": "", + "User Webhooks": "用户 Webhook", "Username": "用户名", "Users": "用户", "Using the default arena model with all models. Click the plus button to add custom models.": "竞技场模型默认使用所有模型。单击加号按钮添加自定义模型。", @@ -1158,7 +1158,7 @@ "Version": "版本", "Version {{selectedVersion}} of {{totalVersions}}": "版本 {{selectedVersion}}/{{totalVersions}}", "View Replies": "查看回复", - "View Result from `{{NAME}}`": "", + "View Result from `{{NAME}}`": "查看 `{{NAME}}` 的结果", "Visibility": "可见性", "Voice": "语音", "Voice Input": "语音输入", From 8799ff9575d69921eab1f499701f40b7dc2ae84f Mon Sep 17 00:00:00 2001 From: Panda Date: Tue, 1 Apr 2025 10:52:05 +0200 Subject: [PATCH 013/129] fix --- 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 106674c431e..cafcd152ab6 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -344,7 +344,7 @@ "Draw": "平局", "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'。", - "e.g. \"json\" or a JSON schema": "例如 "json" 或 JSON 结构", + "e.g. \"json\" or a JSON schema": "例如 \"json\" 或 JSON 结构", "e.g. 60": "例如 '60'", "e.g. A filter to remove profanity from text": "例如:一个用于过滤文本中不当内容的过滤器", "e.g. My Filter": "例如:我的过滤器", From fa72c277db24930204686d6598f5be0f6c6a3780 Mon Sep 17 00:00:00 2001 From: Tiancong Li Date: Tue, 1 Apr 2025 17:10:32 +0800 Subject: [PATCH 014/129] i18n: update zh-TW --- src/lib/i18n/locales/zh-TW/translation.json | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index 25ff67a5d5f..b1f252cf80e 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -379,7 +379,7 @@ "Enable Mirostat sampling for controlling perplexity.": "啟用 Mirostat 取樣以控制 perplexity。", "Enable New Sign Ups": "允許新使用者註冊", "Enabled": "已啟用", - "Enforce Temporary Chat": "", + "Enforce Temporary Chat": "強制使用臨時聊天", "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": "輸入有關您的詳細資訊,讓您的大型語言模型可以回想起來", @@ -570,7 +570,7 @@ "Hex Color": "Hex 顔色", "Hex Color - Leave empty for default color": "Hex 顔色 —— 留空以使用預設顔色", "Hide": "隱藏", - "Hide Model": "", + "Hide Model": "隱藏模型", "Home": "首頁", "Host": "主機", "How can I help you today?": "今天我能為您做些什麼?", @@ -630,7 +630,7 @@ "Knowledge Access": "知識存取", "Knowledge created successfully.": "知識建立成功。", "Knowledge deleted successfully.": "知識刪除成功。", - "Knowledge Public Sharing": "", + "Knowledge Public Sharing": "知識庫公開分享", "Knowledge reset successfully.": "知識重設成功。", "Knowledge updated successfully": "知識更新成功", "Kokoro.js (Browser)": "Kokoro.js (Browser)", @@ -700,8 +700,8 @@ "Model {{modelId}} not found": "找不到模型 {{modelId}}", "Model {{modelName}} is not vision capable": "模型 {{modelName}} 不具備視覺能力", "Model {{name}} is now {{status}}": "模型 {{name}} 現在狀態為 {{status}}", - "Model {{name}} is now hidden": "", - "Model {{name}} is now visible": "", + "Model {{name}} is now hidden": "模型 {{name}} 現已隱藏", + "Model {{name}} is now visible": "模型 {{name}} 現已可見", "Model accepts image inputs": "模型接受影像輸入", "Model created successfully!": "成功建立模型!", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "偵測到模型檔案系統路徑。更新需要模型簡稱,因此無法繼續。", @@ -717,7 +717,7 @@ "Models": "模型", "Models Access": "模型存取", "Models configuration saved successfully": "模型設定儲存成功", - "Models Public Sharing": "", + "Models Public Sharing": "模型公開分享", "Mojeek Search API Key": "Mojeek 搜尋 API 金鑰", "more": "更多", "More": "更多", @@ -835,14 +835,14 @@ "Profile Image": "個人檔案圖片", "Prompt": "提示詞", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "提示詞(例如:告訴我關於羅馬帝國的一些趣事)", - "Prompt Autocompletion": "", + "Prompt Autocompletion": "提示詞自動補全", "Prompt Content": "提示詞內容", "Prompt created successfully": "提示詞建立成功", "Prompt suggestions": "提示詞建議", "Prompt updated successfully": "提示詞更新成功", "Prompts": "提示詞", "Prompts Access": "提示詞存取", - "Prompts Public Sharing": "", + "Prompts Public Sharing": "提示詞公開分享", "Public": "公開", "Pull \"{{searchValue}}\" from Ollama.com": "從 Ollama.com 下載「{{searchValue}}」", "Pull a model from Ollama.com": "從 Ollama.com 下載模型", @@ -975,11 +975,11 @@ "Share": "分享", "Share Chat": "分享對話", "Share to Open WebUI Community": "分享到 OpenWebUI 社群", - "Sharing Permissions": "", + "Sharing Permissions": "分享權限設定", "Show": "顯示", "Show \"What's New\" modal on login": "登入時顯示「新功能」對話框", "Show Admin Details in Account Pending Overlay": "在帳號待審覆蓋層中顯示管理員詳細資訊", - "Show Model": "", + "Show Model": "顯示模型", "Show shortcuts": "顯示快捷鍵", "Show your support!": "表達您的支持!", "Showcased creativity": "展現創意", @@ -1096,7 +1096,7 @@ "Tools Function Calling Prompt": "工具函式呼叫提示詞", "Tools have a function calling system that allows arbitrary code execution": "工具具有允許執行任意程式碼的函式呼叫系統", "Tools have a function calling system that allows arbitrary code execution.": "工具具有允許執行任意程式碼的函式呼叫系統。", - "Tools Public Sharing": "", + "Tools Public Sharing": "工具公開分享", "Top K": "Top K", "Top K Reranker": "Top K Reranker", "Top P": "Top P", @@ -1143,7 +1143,7 @@ "user": "使用者", "User": "使用者", "User location successfully retrieved.": "成功取得使用者位置。", - "User Webhooks": "", + "User Webhooks": "使用者 Webhooks", "Username": "使用者名稱", "Users": "使用者", "Using the default arena model with all models. Click the plus button to add custom models.": "正在使用預設競技模型與所有模型。點選加號按鈕以新增自訂模型。", From 825becceb023ce1a0bcefe90a1db384942f6890a Mon Sep 17 00:00:00 2001 From: Said Ouhdachi Date: Tue, 1 Apr 2025 13:10:59 +0200 Subject: [PATCH 015/129] Arabic Translation --- src/lib/i18n/locales/ar/translation.json | 1178 ++++++++++++++++++++++ src/lib/i18n/locales/languages.json | 6 +- 2 files changed, 1183 insertions(+), 1 deletion(-) create mode 100644 src/lib/i18n/locales/ar/translation.json diff --git a/src/lib/i18n/locales/ar/translation.json b/src/lib/i18n/locales/ar/translation.json new file mode 100644 index 00000000000..892bd53acef --- /dev/null +++ b/src/lib/i18n/locales/ar/translation.json @@ -0,0 +1,1178 @@ +{ + "-1 for no limit, or a positive integer for a specific limit": "-1 لعدم وجود حد، أو عدد صحيح موجب لحد معين", + "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "الحروف 's'، 'm'، 'h'، 'd'، 'w' أو '-1' لعدم انتهاء الصلاحية.", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "(مثال: `sh webui.sh --api --api-auth اسم_المستخدم_كلمة_المرور`)", + "(e.g. `sh webui.sh --api`)": "(مثال: تشغيل الأمر: `sh webui.sh --api`)", + "(latest)": "(أحدث)", + "{{ models }}": "النماذج: {{ models }}", + "{{COUNT}} hidden lines": "{{COUNT}} سطر/أسطر مخفية", + "{{COUNT}} Replies": "{{COUNT}} رد/ردود", + "{{user}}'s Chats": "محادثات المستخدم {{user}}", + "{{webUIName}} Backend Required": "يتطلب الخلفية الخاصة بـ {{webUIName}}", + "*Prompt node ID(s) are required for image generation": "*معرّف/معرّفات عقدة الموجه مطلوبة لتوليد الصور", + "A new version (v{{LATEST_VERSION}}) is now available.": "يتوفر الآن إصدار جديد (v{{LATEST_VERSION}}).", + "A task model is used when performing tasks such as generating titles for chats and web search queries": "يُستخدم نموذج المهام عند تنفيذ مهام مثل توليد عناوين المحادثات واستعلامات البحث على الويب", + "a user": "مستخدم", + "About": "حول", + "Accept autocomplete generation / Jump to prompt variable": "قبول توليد الإكمال التلقائي / الانتقال إلى متغير الموجه", + "Access": "الوصول", + "Access Control": "التحكم في الوصول", + "Accessible to all users": "متاح لجميع المستخدمين", + "Account": "الحساب", + "Account Activation Pending": "انتظار تفعيل الحساب", + "Accurate information": "معلومات دقيقة", + "Actions": "الإجراءات", + "Activate": "تفعيل", + "Activate this command by typing \"/{{COMMAND}}\" to chat input.": "قم بتفعيل هذا الأمر بكتابة \"/{{COMMAND}}\" في مدخل المحادثة.", + "Active Users": "المستخدمون النشطون", + "Add": "إضافة", + "Add a model ID": "إضافة معرّف نموذج", + "Add a short description about what this model does": "أضف وصفًا قصيرًا لما يفعله هذا النموذج", + "Add a tag": "أضف وسم", + "Add Arena Model": "إضافة نموذج الساحة", + "Add Connection": "إضافة اتصال", + "Add Content": "إضافة محتوى", + "Add content here": "أضف المحتوى هنا", + "Add custom prompt": "إضافة موجه مخصص", + "Add Files": "إضافة ملفات", + "Add Group": "إضافة مجموعة", + "Add Memory": "إضافة ذاكرة", + "Add Model": "إضافة نموذج", + "Add Reaction": "إضافة تفاعل", + "Add Tag": "إضافة وسم", + "Add Tags": "إضافة وسوم", + "Add text content": "إضافة محتوى نصي", + "Add User": "إضافة مستخدم", + "Add User Group": "إضافة مجموعة مستخدمين", + "Adjusting these settings will apply changes universally to all users.": "تعديل هذه الإعدادات سيطبق التغييرات على جميع المستخدمين بشكل عام.", + "admin": "المسؤول", + "Admin": "المسؤول", + "Admin Panel": "لوحة المسؤول", + "Admin Settings": "إعدادات المسؤول", + "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "للمسؤولين الوصول إلى جميع الأدوات في جميع الأوقات؛ بينما يحتاج المستخدمون إلى تعيين أدوات لكل نموذج في مساحة العمل.", + "Advanced Parameters": "المعلمات المتقدمة", + "Advanced Params": "المعلمات المتقدمة", + "All": "الكل", + "All Documents": "جميع المستندات", + "All models deleted successfully": "تم حذف جميع النماذج بنجاح", + "Allow Chat Controls": "السماح بوسائل التحكم في المحادثة", + "Allow Chat Delete": "السماح بحذف المحادثة", + "Allow Chat Deletion": "السماح بحذف المحادثة", + "Allow Chat Edit": "السماح بتعديل المحادثة", + "Allow File Upload": "السماح بتحميل الملفات", + "Allow non-local voices": "السماح بالأصوات غير المحلية", + "Allow Temporary Chat": "السماح بالمحادثة المؤقتة", + "Allow User Location": "السماح بتحديد موقع المستخدم", + "Allow Voice Interruption in Call": "السماح بانقطاع الصوت أثناء المكالمة", + "Allowed Endpoints": "النقاط النهائية المسموح بها", + "Already have an account?": "هل لديك حساب بالفعل؟", + "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "بديل للـ top_p، ويهدف إلى ضمان توازن بين الجودة والتنوع. تمثل المعلمة p الحد الأدنى لاحتمالية اعتبار الرمز مقارنة باحتمالية الرمز الأكثر احتمالاً. على سبيل المثال، مع p=0.05 والرمز الأكثر احتمالاً لديه احتمال 0.9، يتم ترشيح القيم الأقل من 0.045.", + "Always": "دائمًا", + "Amazing": "رائع", + "an assistant": "مساعد", + "Analyzed": "تم التحليل", + "Analyzing...": "جارٍ التحليل...", + "and": "و", + "and {{COUNT}} more": "و{{COUNT}} المزيد", + "and create a new shared link.": "وإنشاء رابط مشترك جديد.", + "API Base URL": "الرابط الأساسي لواجهة API", + "API Key": "مفتاح واجهة برمجة التطبيقات (API)", + "API Key created.": "تم إنشاء مفتاح واجهة API.", + "API Key Endpoint Restrictions": "قيود نقاط نهاية مفتاح API", + "API keys": "مفاتيح واجهة برمجة التطبيقات (API)", + "Application DN": "DN التطبيق", + "Application DN Password": "كلمة مرور DN التطبيق", + "applies to all users with the \"user\" role": "ينطبق على جميع المستخدمين الذين لديهم دور \"مستخدم\"", + "April": "أبريل", + "Archive": "أرشيف", + "Archive All Chats": "أرشفة جميع المحادثات", + "Archived Chats": "المحادثات المؤرشفة", + "archived-chat-export": "تصدير المحادثات المؤرشفة", + "Are you sure you want to clear all memories? This action cannot be undone.": "هل أنت متأكد من رغبتك في مسح جميع الذكريات؟ لا يمكن التراجع عن هذا الإجراء.", + "Are you sure you want to delete this channel?": "هل أنت متأكد من رغبتك في حذف هذه القناة؟", + "Are you sure you want to delete this message?": "هل أنت متأكد من رغبتك في حذف هذه الرسالة؟", + "Are you sure you want to unarchive all archived chats?": "هل أنت متأكد من رغبتك في إلغاء أرشفة جميع المحادثات المؤرشفة؟", + "Are you sure?": "هل أنت متأكد؟", + "Arena Models": "نماذج الساحة", + "Artifacts": "القطع الأثرية", + "Ask": "اسأل", + "Ask a question": "اطرح سؤالاً", + "Assistant": "المساعد", + "Attach file from knowledge": "إرفاق ملف من المعرفة", + "Attention to detail": "الاهتمام بالتفاصيل", + "Attribute for Mail": "خاصية للبريد", + "Attribute for Username": "خاصية لاسم المستخدم", + "Audio": "الصوت", + "August": "أغسطس", + "Authenticate": "توثيق", + "Authentication": "المصادقة", + "Auto-Copy Response to Clipboard": "نسخ الرد تلقائيًا إلى الحافظة", + "Auto-playback response": "تشغيل الرد تلقائيًا", + "Autocomplete Generation": "توليد الإكمال التلقائي", + "Autocomplete Generation Input Max Length": "الحد الأقصى لطول مدخل توليد الإكمال التلقائي", + "Automatic1111": "Automatic1111 (أوتوماتيك 1111)", + "AUTOMATIC1111 Api Auth String": "سلسلة توثيق API لـ AUTOMATIC1111", + "AUTOMATIC1111 Base URL": "الرابط الأساسي لـ AUTOMATIC1111", + "AUTOMATIC1111 Base URL is required.": "الرابط الأساسي لـ AUTOMATIC1111 مطلوب.", + "Available list": "القائمة المتاحة", + "available!": "متاح!", + "Awful": "فظيع", + "Azure AI Speech": "نطق Azure AI (مايكروسوفت)", + "Azure Region": "منطقة Azure", + "Back": "عودة", + "Bad Response": "رد سيئ", + "Banners": "لافتات", + "Base Model (From)": "النموذج الأساسي (من)", + "Batch Size (num_batch)": "حجم الدفعة (num_batch)", + "before": "قبل", + "Being lazy": "كونك كسولاً", + "Beta": "بيتا", + "Bing Search V7 Endpoint": "نقطة نهاية Bing Search V7", + "Bing Search V7 Subscription Key": "مفتاح اشتراك Bing Search V7", + "Bocha Search API Key": "مفتاح API لـ Bocha Search", + "Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "تعزيز أو معاقبة رموز محددة لردود مقيدة. ستتراوح قيم التحيز بين -100 و100 (شاملة). (افتراضي: لا شيء)", + "Brave Search API Key": "مفتاح API لـ Brave Search", + "By {{name}}": "بواسطة {{name}}", + "Bypass Embedding and Retrieval": "تجاوز التضمين والاسترجاع", + "Bypass SSL verification for Websites": "تجاوز التحقق من SSL للمواقع", + "Calendar": "التقويم", + "Call": "مكالمة", + "Call feature is not supported when using Web STT engine": "ميزة الاتصال غير مدعومة عند استخدام محرك Web STT", + "Camera": "الكاميرا", + "Cancel": "إلغاء", + "Capabilities": "القدرات", + "Capture": "التقاط", + "Certificate Path": "مسار الشهادة", + "Change Password": "تغيير كلمة المرور", + "Channel Name": "اسم القناة", + "Channels": "القنوات", + "Character": "الشخصية", + "Character limit for autocomplete generation input": "حد الأحرف لمدخل توليد الإكمال التلقائي", + "Chart new frontiers": "رسم آفاق جديدة", + "Chat": "محادثة", + "Chat Background Image": "صورة خلفية المحادثة", + "Chat Bubble UI": "واجهة فقاعات المحادثة", + "Chat Controls": "ضوابط المحادثة", + "Chat direction": "اتجاه المحادثة", + "Chat Overview": "نظرة عامة على المحادثة", + "Chat Permissions": "أذونات المحادثة", + "Chat Tags Auto-Generation": "الإنشاء التلقائي لطاچ المحادثة", + "Chats": "المحادثات", + "Check Again": "تحقق مرة أخرى", + "Check for updates": "تحقق من التحديثات", + "Checking for updates...": "جارٍ التحقق من التحديثات...", + "Choose a model before saving...": "اختر نموذجًا قبل الحفظ...", + "Chunk Overlap": "تداخل القطع", + "Chunk Size": "حجم القطعة", + "Ciphers": "التشفيرات", + "Citation": "اقتباس", + "Clear memory": "مسح الذاكرة", + "Clear Memory": "مسح الذاكرة", + "click here": "انقر هنا", + "Click here for filter guides.": "انقر هنا للحصول على أدلة الفلاتر.", + "Click here for help.": "انقر هنا للمساعدة.", + "Click here to": "انقر هنا لـ", + "Click here to download user import template file.": "انقر هنا لتنزيل ملف قالب استيراد المستخدم.", + "Click here to learn more about faster-whisper and see the available models.": "انقر هنا لمعرفة المزيد عن faster-whisper ورؤية النماذج المتاحة.", + "Click here to see available models.": "انقر هنا لرؤية النماذج المتاحة.", + "Click here to select": "انقر هنا للاختيار", + "Click here to select a csv file.": "انقر هنا لاختيار ملف CSV.", + "Click here to select a py file.": "انقر هنا لاختيار ملف PY.", + "Click here to upload a workflow.json file.": "انقر هنا لتحميل ملف workflow.json.", + "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": "استنساخ", + "Clone Chat": "استنساخ المحادثة", + "Clone of {{TITLE}}": "استنساخ لـ {{TITLE}}", + "Close": "إغلاق", + "Code execution": "تنفيذ الشيفرة", + "Code Execution": "تنفيذ الشيفرة", + "Code Execution Engine": "محرك تنفيذ الشيفرة", + "Code Execution Timeout": "مهلة تنفيذ الشيفرة", + "Code formatted successfully": "تم تنسيق الشيفرة بنجاح", + "Code Interpreter": "مفسر الشيفرة", + "Code Interpreter Engine": "محرك مفسر الشيفرة", + "Code Interpreter Prompt Template": "قالب موجه مفسر الشيفرة", + "Collapse": "طي", + "Collection": "المجموعة", + "Color": "اللون", + "ComfyUI": "ComfyUI", + "ComfyUI API Key": "مفتاح API لـ ComfyUI", + "ComfyUI Base URL": "عنوان الأساس لـ ComfyUI", + "ComfyUI Base URL is required.": "عنوان الأساس لـ ComfyUI مطلوب.", + "ComfyUI Workflow": "سير عمل ComfyUI", + "ComfyUI Workflow Nodes": "عقد سير عمل ComfyUI", + "Command": "الأمر", + "Completions": "الإكمالات", + "Concurrent Requests": "الطلبات المتزامنة", + "Configure": "تكوين", + "Confirm": "تأكيد", + "Confirm Password": "تأكيد كلمة المرور", + "Confirm your action": "أكد إجراءك", + "Confirm your new password": "أكد كلمة مرورك الجديدة", + "Connect to your own OpenAI compatible API endpoints.": "اتصل بنقاط نهاية API المتوافقة مع OpenAI الخاصة بك.", + "Connections": "الاتصالات", + "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "يقيّد الجهد في التفكير لنماذج التفكير. ينطبق فقط على نماذج التفكير من مقدمي خدمات محددين يدعمون جهد التفكير.", + "Contact Admin for WebUI Access": "اتصل بالمسؤول للوصول إلى واجهة الويب", + "Content": "المحتوى", + "Content Extraction Engine": "محرك استخراج المحتوى", + "Context Length": "طول السياق", + "Continue Response": "متابعة الرد", + "Continue with {{provider}}": "متابعة مع {{provider}}", + "Continue with Email": "متابعة باستخدام البريد الإلكتروني", + "Continue with LDAP": "متابعة باستخدام LDAP", + "Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "تحكم في كيفية تقسيم نص الرسالة لطلبات تحويل النص إلى كلام. 'علامات الترقيم' تقسم إلى جمل، 'الفقرات' تقسم إلى فقرات، و'لا شيء' يحتفظ بالرسالة كسلسلة واحدة.", + "Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled.": "تحكم في تكرار تسلسلات الرموز في النص المولد. قيمة أعلى (مثال: 1.5) ستعاقب التكرارات بشدة أكبر، بينما قيمة أقل (مثال: 1.1) ستكون أكثر تسامحاً. عند القيمة 1، يتم تعطيله.", + "Controls": "الضوابط", + "Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "يتحكم في التوازن بين الترابط والتنوع في الناتج. قيمة أقل ستؤدي إلى نص أكثر تركيزاً وترابطاً.", + "Copied": "تم النسخ", + "Copied shared chat URL to clipboard!": "تم نسخ رابط المحادثة المشترك إلى الحافظة!", + "Copied to clipboard": "تم النسخ إلى الحافظة", + "Copy": "نسخ", + "Copy last code block": "نسخ آخر كتلة شيفرة", + "Copy last response": "نسخ آخر رد", + "Copy Link": "نسخ الرابط", + "Copy to clipboard": "نسخ إلى الحافظة", + "Copying to clipboard was successful!": "تم النسخ إلى الحافظة بنجاح!", + "CORS must be properly configured by the provider to allow requests from Open WebUI.": "يجب أن يتم تكوين CORS بشكل صحيح من قبل المزود للسماح بالطلبات من Open WebUI.", + "Create": "إنشاء", + "Create a knowledge base": "إنشاء قاعدة معرفة", + "Create a model": "إنشاء نموذج", + "Create Account": "إنشاء حساب", + "Create Admin Account": "إنشاء حساب مسؤول", + "Create Channel": "إنشاء قناة", + "Create Group": "إنشاء مجموعة", + "Create Knowledge": "إنشاء معرفة", + "Create new key": "إنشاء مفتاح جديد", + "Create new secret key": "إنشاء مفتاح سري جديد", + "Created at": "تم الإنشاء في", + "Created At": "تاريخ الإنشاء", + "Created by": "تم الإنشاء بواسطة", + "CSV Import": "استيراد CSV", + "Ctrl+Enter to Send": "اضغط Ctrl+Enter للإرسال", + "Current Model": "النموذج الحالي", + "Current Password": "كلمة المرور الحالية", + "Custom": "مخصص", + "Danger Zone": "منطقة الخطر", + "Dark": "داكن", + "Database": "قاعدة البيانات", + "December": "ديسمبر", + "Default": "افتراضي", + "Default (Open AI)": "افتراضي (Open AI)", + "Default (SentenceTransformers)": "افتراضي (SentenceTransformers)", + "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model’s built-in tool-calling capabilities, but requires the model to inherently support this feature.": "الوضع الافتراضي يعمل مع مجموعة أوسع من النماذج من خلال استدعاء الأدوات مرة واحدة قبل التنفيذ. أما الوضع الأصلي فيستخدم قدرات استدعاء الأدوات المدمجة في النموذج، لكنه يتطلب دعمًا داخليًا لهذه الميزة.", + "Default Model": "النموذج الافتراضي", + "Default model updated": "الإفتراضي تحديث الموديل", + "Default Models": "النماذج الافتراضية", + "Default permissions": "الأذونات الافتراضية", + "Default permissions updated successfully": "تم تحديث الأذونات الافتراضية بنجاح", + "Default Prompt Suggestions": "الإفتراضي Prompt الاقتراحات", + "Default to 389 or 636 if TLS is enabled": "الافتراضي هو 389 أو 636 إذا تم تمكين TLS", + "Default to ALL": "الافتراضي هو الكل", + "Default User Role": "الإفتراضي صلاحيات المستخدم", + "Delete": "حذف", + "Delete a model": "حذف الموديل", + "Delete All Chats": "حذف جميع الدردشات", + "Delete All Models": "حذف جميع النماذج", + "Delete chat": "حذف المحادثه", + "Delete Chat": "حذف المحادثه.", + "Delete chat?": "هل تريد حذف المحادثة؟", + "Delete folder?": "هل تريد حذف المجلد؟", + "Delete function?": "هل تريد حذف الوظيفة؟", + "Delete Message": "حذف الرسالة", + "Delete message?": "هل تريد حذف الرسالة؟", + "Delete prompt?": "هل تريد حذف الموجه؟", + "delete this link": "أحذف هذا الرابط", + "Delete tool?": "هل تريد حذف الأداة؟", + "Delete User": "حذف المستخدم", + "Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف", + "Deleted {{name}}": "حذف {{name}}", + "Deleted User": "مستخدم محذوف", + "Describe your knowledge base and objectives": "صف قاعدة معرفتك وأهدافك", + "Description": "وصف", + "Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل", + "Direct Connections": "الاتصالات المباشرة", + "Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "تتيح الاتصالات المباشرة للمستخدمين الاتصال بنقاط نهاية API متوافقة مع OpenAI الخاصة بهم.", + "Direct Connections settings updated": "تم تحديث إعدادات الاتصالات المباشرة", + "Disabled": "معطّل", + "Discover a function": "اكتشف وظيفة", + "Discover a model": "اكتشف نموذجا", + "Discover a prompt": "اكتشاف موجه", + "Discover a tool": "اكتشف أداة", + "Discover how to use Open WebUI and seek support from the community.": "اكتشف كيفية استخدام Open WebUI واطلب الدعم من المجتمع.", + "Discover wonders": "اكتشف العجائب", + "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": "العرض", + "Display Emoji in Call": "عرض الرموز التعبيرية أثناء المكالمة", + "Display the username instead of You in the Chat": "اعرض اسم المستخدم بدلاً منك في الدردشة", + "Displays citations in the response": "عرض المراجع في الرد", + "Dive into knowledge": "انغمس في المعرفة", + "Do not install functions from sources you do not fully trust.": "لا تقم بتثبيت الوظائف من مصادر لا تثق بها تمامًا.", + "Do not install tools from sources you do not fully trust.": "لا تقم بتثبيت الأدوات من مصادر لا تثق بها تمامًا.", + "Document": "المستند", + "Document Intelligence": "تحليل المستندات الذكي", + "Document Intelligence endpoint and key required.": "يتطلب نقطة نهاية ومفتاح لتحليل المستندات.", + "Documentation": "التوثيق", + "Documents": "مستندات", + "does not make any external connections, and your data stays securely on your locally hosted server.": "لا يجري أي اتصالات خارجية، وتظل بياناتك آمنة على الخادم المستضاف محليًا.", + "Domain Filter List": "قائمة تصفية النطاقات", + "Don't have an account?": "ليس لديك حساب؟", + "don't install random functions from sources you don't trust.": "لا تقم بتثبيت وظائف عشوائية من مصادر غير موثوقة.", + "don't install random tools from sources you don't trust.": "لا تقم بتثبيت أدوات عشوائية من مصادر غير موثوقة.", + "Don't like the style": "لا أحب النمط", + "Done": "تم", + "Download": "تحميل", + "Download as SVG": "تنزيل بصيغة SVG", + "Download canceled": "تم اللغاء التحميل", + "Download Database": "تحميل قاعدة البيانات", + "Drag and drop a file to upload or select a file to view": "اسحب الملف وأفلته للرفع أو اختر ملفًا للعرض", + "Draw": "ارسم", + "Drop any files here to add to the conversation": "أسقط أية ملفات هنا لإضافتها إلى المحادثة", + "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. الوحدات الزمنية الصالحة هي 's', 'm', 'h'.", + "e.g. 60": "مثال: 60", + "e.g. A filter to remove profanity from text": "مثال: مرشح لإزالة الألفاظ النابية من النص", + "e.g. My Filter": "مثال: مرشحي", + "e.g. My Tools": "مثال: أدواتي", + "e.g. my_filter": "مثال: my_filter", + "e.g. my_tools": "مثال: my_tools", + "e.g. Tools for performing various operations": "مثال: أدوات لتنفيذ عمليات متنوعة", + "Edit": "تعديل", + "Edit Arena Model": "تعديل نموذج Arena", + "Edit Channel": "تعديل القناة", + "Edit Connection": "تعديل الاتصال", + "Edit Default Permissions": "تعديل الأذونات الافتراضية", + "Edit Memory": "تعديل الذاكرة", + "Edit User": "تعديل المستخدم", + "Edit User Group": "تعديل مجموعة المستخدمين", + "ElevenLabs": "ElevenLabs", + "Email": "البريد", + "Embark on adventures": "انطلق في مغامرات", + "Embedding": "تضمين", + "Embedding Batch Size": "حجم دفعة التضمين", + "Embedding Model": "نموذج التضمين", + "Embedding Model Engine": "تضمين محرك النموذج", + "Embedding model set to \"{{embedding_model}}\"": "تم تعيين نموذج التضمين على \"{{embedding_model}}\"", + "Enable API Key": "تفعيل مفتاح API", + "Enable autocomplete generation for chat messages": "تفعيل توليد الإكمال التلقائي لرسائل الدردشة", + "Enable Code Execution": "تفعيل تنفيذ الكود", + "Enable Code Interpreter": "تفعيل مفسر الكود", + "Enable Community Sharing": "تمكين مشاركة المجتمع", + "Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "تفعيل قفل الذاكرة (mlock) لمنع إخراج بيانات النموذج من الذاكرة. يساعد هذا الخيار في الحفاظ على الأداء من خلال منع حدوث أخطاء في الوصول وضمان سرعة الوصول إلى البيانات.", + "Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "تفعيل تعيين الذاكرة (mmap) لتحميل بيانات النموذج. يسمح هذا الخيار للنظام باستخدام التخزين كامتداد للذاكرة RAM عن طريق معاملة ملفات القرص كما لو كانت في RAM. قد يحسن أداء النموذج، لكن قد لا يعمل بشكل صحيح مع جميع الأنظمة وقد يستهلك مساحة كبيرة من القرص.", + "Enable Message Rating": "تفعيل تقييم الرسائل", + "Enable Mirostat sampling for controlling perplexity.": "تفعيل أخذ عينات Mirostat للتحكم في درجة التعقيد.", + "Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة", + "Enabled": "مفعل", + "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)": "أدخل سلسلة توثيق API (مثال: username:password)", + "Enter Application DN": "أدخل DN التطبيق", + "Enter Application DN Password": "أدخل كلمة مرور DN التطبيق", + "Enter Bing Search V7 Endpoint": "أدخل نقطة نهاية Bing Search V7", + "Enter Bing Search V7 Subscription Key": "أدخل مفتاح اشتراك Bing Search V7", + "Enter Bocha Search API Key": "أدخل مفتاح API لـ Bocha Search", + "Enter Brave Search API Key": "أدخل مفتاح واجهة برمجة تطبيقات البحث الشجاع", + "Enter certificate path": "أدخل مسار الشهادة", + "Enter CFG Scale (e.g. 7.0)": "أدخل مقياس CFG (مثال: 7.0)", + "Enter Chunk Overlap": "أدخل الChunk Overlap", + "Enter Chunk Size": "أدخل Chunk الحجم", + "Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "أدخل أزواج \"الرمز:قيمة التحيز\" مفصولة بفواصل (مثال: 5432:100، 413:-100)", + "Enter description": "أدخل الوصف", + "Enter Document Intelligence Endpoint": "أدخل نقطة نهاية تحليل المستندات", + "Enter Document Intelligence Key": "أدخل مفتاح تحليل المستندات", + "Enter domains separated by commas (e.g., example.com,site.org)": "أدخل النطاقات مفصولة بفواصل (مثال: example.com,site.org)", + "Enter Exa API Key": "أدخل مفتاح API لـ Exa", + "Enter Github Raw URL": "أدخل عنوان URL ل Github Raw", + "Enter Google PSE API Key": "أدخل مفتاح واجهة برمجة تطبيقات PSE من Google", + "Enter Google PSE Engine Id": "أدخل معرف محرك PSE من Google", + "Enter Image Size (e.g. 512x512)": "(e.g. 512x512) أدخل حجم الصورة ", + "Enter Jina API Key": "أدخل مفتاح API لـ Jina", + "Enter Jupyter Password": "أدخل كلمة مرور Jupyter", + "Enter Jupyter Token": "أدخل رمز Jupyter", + "Enter Jupyter URL": "أدخل عنوان Jupyter", + "Enter Kagi Search API Key": "أدخل مفتاح API لـ Kagi Search", + "Enter Key Behavior": "أدخل سلوك المفتاح", + "Enter language codes": "أدخل كود اللغة", + "Enter Model ID": "أدخل معرف النموذج", + "Enter model tag (e.g. {{modelTag}})": "(e.g. {{modelTag}}) أدخل الموديل تاق", + "Enter Mojeek Search API Key": "أدخل مفتاح API لـ Mojeek Search", + "Enter Number of Steps (e.g. 50)": "(e.g. 50) أدخل عدد الخطوات", + "Enter Perplexity API Key": "أدخل مفتاح API لـ Perplexity", + "Enter proxy URL (e.g. https://user:password@host:port)": "أدخل عنوان البروكسي (مثال: https://user:password@host:port)", + "Enter reasoning effort": "أدخل مستوى الجهد في الاستدلال", + "Enter Sampler (e.g. Euler a)": "أدخل العينة (مثال: Euler a)", + "Enter Scheduler (e.g. Karras)": "أدخل المجدول (مثال: Karras)", + "Enter Score": "أدخل النتيجة", + "Enter SearchApi API Key": "أدخل مفتاح API لـ SearchApi", + "Enter SearchApi Engine": "أدخل محرك SearchApi", + "Enter Searxng Query URL": "أدخل عنوان URL لاستعلام Searxng", + "Enter Seed": "أدخل القيمة الابتدائية (Seed)", + "Enter SerpApi API Key": "أدخل مفتاح API لـ SerpApi", + "Enter SerpApi Engine": "أدخل محرك SerpApi", + "Enter Serper API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serper", + "Enter Serply API Key": "أدخل مفتاح API لـ Serply", + "Enter Serpstack API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serpstack", + "Enter server host": "أدخل مضيف الخادم", + "Enter server label": "أدخل تسمية الخادم", + "Enter server port": "أدخل منفذ الخادم", + "Enter stop sequence": "أدخل تسلسل التوقف", + "Enter system prompt": "أدخل موجه النظام", + "Enter Tavily API Key": "أدخل مفتاح API لـ Tavily", + "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "أدخل الرابط العلني لـ WebUI الخاص بك. سيتم استخدام هذا الرابط لإنشاء روابط داخل الإشعارات.", + "Enter Tika Server URL": "أدخل رابط خادم Tika", + "Enter timeout in seconds": "أدخل المهلة بالثواني", + "Enter to Send": "اضغط Enter للإرسال", + "Enter Top K": "أدخل Top K", + "Enter URL (e.g. http://127.0.0.1:7860/)": "الرابط (e.g. http://127.0.0.1:7860/)", + "Enter URL (e.g. http://localhost:11434)": "URL (e.g. http://localhost:11434)", + "Enter your current password": "أدخل كلمة المرور الحالية", + "Enter Your Email": "أدخل البريد الاكتروني", + "Enter Your Full Name": "أدخل الاسم كامل", + "Enter your message": "أدخل رسالتك", + "Enter your new password": "أدخل كلمة المرور الجديدة", + "Enter Your Password": "ادخل كلمة المرور", + "Enter Your Role": "أدخل الصلاحيات", + "Enter Your Username": "أدخل اسم المستخدم الخاص بك", + "Enter your webhook URL": "أدخل رابط Webhook الخاص بك", + "Error": "خطأ", + "ERROR": "خطأ", + "Error accessing Google Drive: {{error}}": "حدث خطأ أثناء الوصول إلى Google Drive: {{error}}", + "Error uploading file: {{error}}": "حدث خطأ أثناء تحميل الملف: {{error}}", + "Evaluations": "التقييمات", + "Exa API Key": "مفتاح API لـ Exa", + "Example: (&(objectClass=inetOrgPerson)(uid=%s))": "مثال: (&(objectClass=inetOrgPerson)(uid=%s))", + "Example: ALL": "مثال: ALL", + "Example: mail": "مثال: mail", + "Example: ou=users,dc=foo,dc=example": "مثال: ou=users,dc=foo,dc=example", + "Example: sAMAccountName or uid or userPrincipalName": "مثال: sAMAccountName أو uid أو userPrincipalName", + "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "تجاوزت عدد المقاعد المسموح بها في الترخيص. يرجى الاتصال بالدعم لزيادتها.", + "Exclude": "استبعاد", + "Execute code for analysis": "تنفيذ الكود للتحليل", + "Expand": "توسيع", + "Experimental": "تجريبي", + "Explain": "شرح", + "Explain this section to me in more detail": "اشرح لي هذا القسم بمزيد من التفصيل", + "Explore the cosmos": "استكشف الكون", + "Export": "تصدير", + "Export All Archived Chats": "تصدير جميع المحادثات المؤرشفة", + "Export All Chats (All Users)": "تصدير جميع الدردشات (جميع المستخدمين)", + "Export chat (.json)": "تصدير المحادثة (.json)", + "Export Chats": "تصدير جميع الدردشات", + "Export Config to JSON File": "تصدير الإعدادات إلى ملف JSON", + "Export Functions": "تصدير الوظائف", + "Export Models": "نماذج التصدير", + "Export Presets": "تصدير الإعدادات المسبقة", + "Export Prompts": "مطالبات التصدير", + "Export to CSV": "تصدير إلى CSV", + "Export Tools": "تصدير الأدوات", + "External Models": "نماذج خارجية", + "Failed to add file.": "فشل في إضافة الملف.", + "Failed to create API Key.": "فشل في إنشاء مفتاح API.", + "Failed to fetch models": "فشل في جلب النماذج", + "Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة", + "Failed to save models configuration": "فشل في حفظ إعدادات النماذج", + "Failed to update settings": "فشل في تحديث الإعدادات", + "Failed to upload file.": "فشل في رفع الملف.", + "Features": "الميزات", + "Features Permissions": "أذونات الميزات", + "February": "فبراير", + "Feedback History": "سجل الملاحظات", + "Feedbacks": "الملاحظات", + "Feel free to add specific details": "لا تتردد في إضافة تفاصيل محددة", + "File": "ملف", + "File added successfully.": "تم إضافة الملف بنجاح.", + "File content updated successfully.": "تم تحديث محتوى الملف بنجاح.", + "File Mode": "وضع الملف", + "File not found.": "لم يتم العثور على الملف.", + "File removed successfully.": "تم حذف الملف بنجاح.", + "File size should not exceed {{maxSize}} MB.": "يجب ألا يتجاوز حجم الملف {{maxSize}} ميغابايت.", + "File uploaded successfully": "تم رفع الملف بنجاح", + "Files": "الملفات", + "Filter is now globally disabled": "تم الآن تعطيل الفلتر على مستوى النظام", + "Filter is now globally enabled": "تم الآن تفعيل الفلتر على مستوى النظام", + "Filters": "الفلاتر", + "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "تم اكتشاف انتحال بصمة الإصبع: غير قادر على استخدام الأحرف الأولى كصورة رمزية. الافتراضي لصورة الملف الشخصي الافتراضية.", + "Fluidly stream large external response chunks": "دفق قطع الاستجابة الخارجية الكبيرة بسلاسة", + "Focus chat input": "التركيز على إدخال الدردشة", + "Folder deleted successfully": "تم حذف المجلد بنجاح", + "Folder name cannot be empty": "لا يمكن أن يكون اسم المجلد فارغًا", + "Folder name cannot be empty.": "لا يمكن أن يكون اسم المجلد فارغًا.", + "Folder name updated successfully": "تم تحديث اسم المجلد بنجاح", + "Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه", + "Forge new paths": "أنشئ مسارات جديدة", + "Form": "نموذج", + "Format your variables using brackets like this:": "نسّق متغيراتك باستخدام الأقواس بهذا الشكل:", + "Frequency Penalty": "عقوبة التردد", + "Full Context Mode": "وضع السياق الكامل", + "Function": "وظيفة", + "Function Calling": "استدعاء الوظائف", + "Function created successfully": "تم إنشاء الوظيفة بنجاح", + "Function deleted successfully": "تم حذف الوظيفة بنجاح", + "Function Description": "وصف الوظيفة", + "Function ID": "معرف الوظيفة", + "Function is now globally disabled": "تم الآن تعطيل الوظيفة على مستوى النظام", + "Function is now globally enabled": "تم الآن تفعيل الوظيفة على مستوى النظام", + "Function Name": "اسم الوظيفة", + "Function updated successfully": "تم تحديث الوظيفة بنجاح", + "Functions": "الوظائف", + "Functions allow arbitrary code execution": "الوظائف تتيح تنفيذ كود برمجي مخصص", + "Functions allow arbitrary code execution.": "الوظائف تتيح تنفيذ كود برمجي مخصص.", + "Functions imported successfully": "تم استيراد الوظائف بنجاح", + "Gemini": "Gemini", + "Gemini API Config": "إعدادات واجهة Gemini API", + "Gemini API Key is required.": "مفتاح Gemini API مطلوب.", + "General": "عام", + "Generate an image": "توليد صورة", + "Generate Image": "توليد صورة", + "Generate prompt pair": "توليد زوج من التعليمات", + "Generating search query": "إنشاء استعلام بحث", + "Get started": "ابدأ الآن", + "Get started with {{WEBUI_NAME}}": "ابدأ باستخدام {{WEBUI_NAME}}", + "Global": "عام", + "Good Response": "استجابة جيدة", + "Google Drive": "Google Drive", + "Google PSE API Key": "مفتاح واجهة برمجة تطبيقات PSE من Google", + "Google PSE Engine Id": "معرف محرك PSE من Google", + "Group created successfully": "تم إنشاء المجموعة بنجاح", + "Group deleted successfully": "تم حذف المجموعة بنجاح", + "Group Description": "وصف المجموعة", + "Group Name": "اسم المجموعة", + "Group updated successfully": "تم تحديث المجموعة بنجاح", + "Groups": "المجموعات", + "Haptic Feedback": "الاهتزاز اللمسي", + "has no conversations.": "ليس لديه محادثات.", + "Hello, {{name}}": " {{name}} مرحبا", + "Help": "مساعدة", + "Help us create the best community leaderboard by sharing your feedback history!": "ساعدنا في إنشاء أفضل قائمة للمتصدرين من خلال مشاركة سجل ملاحظاتك!", + "Hex Color": "لون سداسي", + "Hex Color - Leave empty for default color": "اللون السداسي - اتركه فارغًا لاستخدام اللون الافتراضي", + "Hide": "أخفاء", + "Home": "الصفحة الرئيسية", + "Host": "المضيف", + "How can I help you today?": "كيف استطيع مساعدتك اليوم؟", + "How would you rate this response?": "كيف تقيّم هذا الرد؟", + "Hybrid Search": "البحث الهجين", + "I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "أقر بأنني قرأت وفهمت تبعات هذا الإجراء. أنا على دراية بالمخاطر المرتبطة بتنفيذ كود عشوائي وقد تحققت من موثوقية المصدر.", + "ID": "المعرّف", + "Ignite curiosity": "أشعل الفضول", + "Image": "صورة", + "Image Compression": "ضغط الصور", + "Image Generation": "توليد الصور", + "Image Generation (Experimental)": "توليد الصور (تجريبي)", + "Image Generation Engine": "محرك توليد الصور", + "Image Max Compression Size": "الحد الأقصى لضغط الصورة", + "Image Prompt Generation": "توليد التوجيه للصورة", + "Image Prompt Generation Prompt": "نص توجيه توليد الصورة", + "Image Settings": "إعدادات الصورة", + "Images": "الصور", + "Import Chats": "استيراد الدردشات", + "Import Config from JSON File": "استيراد الإعدادات من ملف JSON", + "Import Functions": "استيراد الوظائف", + "Import Models": "استيراد النماذج", + "Import Presets": "استيراد الإعدادات المسبقة", + "Import Prompts": "مطالبات الاستيراد", + "Import Tools": "استيراد الأدوات", + "Include": "تضمين", + "Include `--api-auth` flag when running stable-diffusion-webui": "أضف الخيار `--api-auth` عند تشغيل stable-diffusion-webui", + "Include `--api` flag when running stable-diffusion-webui": "قم بتضمين علامة `-api` عند تشغيل Stable-diffusion-webui", + "Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "يؤثر على سرعة استجابة الخوارزمية للتغذية الراجعة من النص المُولد. معدل تعلم منخفض يؤدي إلى تعديلات أبطأ، بينما معدل أعلى يجعلها أكثر استجابة.", + "Info": "معلومات", + "Input commands": "إدخال الأوامر", + "Install from Github URL": "التثبيت من عنوان URL لجيثب", + "Instant Auto-Send After Voice Transcription": "إرسال تلقائي فوري بعد تحويل الصوت إلى نص", + "Integration": "التكامل", + "Interface": "واجهه المستخدم", + "Invalid file format.": "تنسيق ملف غير صالح.", + "Invalid Tag": "تاق غير صالحة", + "is typing...": "يكتب...", + "January": "يناير", + "Jina API Key": "مفتاح API لـ Jina", + "join our Discord for help.": "انضم إلى Discord للحصول على المساعدة.", + "JSON": "JSON", + "JSON Preview": "معاينة JSON", + "July": "يوليو", + "June": "يونيو", + "Jupyter Auth": "مصادقة Jupyter", + "Jupyter URL": "رابط Jupyter", + "JWT Expiration": "JWT تجريبي", + "JWT Token": "JWT Token", + "Kagi Search API Key": "مفتاح API لـ Kagi Search", + "Keep Alive": "Keep Alive", + "Key": "المفتاح", + "Keyboard shortcuts": "اختصارات لوحة المفاتيح", + "Knowledge": "المعرفة", + "Knowledge Access": "الوصول إلى المعرفة", + "Knowledge created successfully.": "تم إنشاء المعرفة بنجاح.", + "Knowledge deleted successfully.": "تم حذف المعرفة بنجاح.", + "Knowledge reset successfully.": "تم إعادة تعيين المعرفة بنجاح.", + "Knowledge updated successfully": "تم تحديث المعرفة بنجاح", + "Kokoro.js (Browser)": "Kokoro.js (المتصفح)", + "Kokoro.js Dtype": "نوع بيانات Kokoro.js", + "Label": "التسمية", + "Landing Page Mode": "وضع الصفحة الرئيسية", + "Language": "اللغة", + "Last Active": "آخر نشاط", + "Last Modified": "آخر تعديل", + "Last reply": "آخر رد", + "LDAP": "LDAP", + "LDAP server updated": "تم تحديث خادم LDAP", + "Leaderboard": "لوحة المتصدرين", + "Leave empty for unlimited": "اتركه فارغًا لعدم وجود حد", + "Leave empty to include all models from \"{{URL}}/api/tags\" endpoint": "اتركه فارغًا لتضمين جميع النماذج من نقطة النهاية \"{{URL}}/api/tags\"", + "Leave empty to include all models from \"{{URL}}/models\" endpoint": "اتركه فارغًا لتضمين جميع النماذج من نقطة النهاية \"{{URL}}/models\"", + "Leave empty to include all models or select specific models": "اتركه فارغًا لتضمين جميع النماذج أو اختر نماذج محددة", + "Leave empty to use the default prompt, or enter a custom prompt": "اتركه فارغًا لاستخدام التوجيه الافتراضي، أو أدخل توجيهًا مخصصًا", + "Leave model field empty to use the default model.": "اترك حقل النموذج فارغًا لاستخدام النموذج الافتراضي.", + "License": "الترخيص", + "Light": "فاتح", + "Listening...": "جارٍ الاستماع...", + "Llama.cpp": "Llama.cpp", + "LLMs can make mistakes. Verify important information.": "يمكن أن تصدر بعض الأخطاء. لذلك يجب التحقق من المعلومات المهمة", + "Loader": "المحمّل", + "Loading Kokoro.js...": "جارٍ تحميل Kokoro.js...", + "Local": "محلي", + "Local Models": "النماذج المحلية", + "Location access not allowed": "لا يُسمح بالوصول إلى الموقع", + "Logit Bias": "تحيّز Logit", + "Lost": "ضائع", + "LTR": "من جهة اليسار إلى اليمين", + "Made by Open WebUI Community": "OpenWebUI تم إنشاؤه بواسطة مجتمع ", + "Make sure to enclose them with": "تأكد من إرفاقها", + "Make sure to export a workflow.json file as API format from ComfyUI.": "تأكد من تصدير ملف workflow.json بصيغة API من ComfyUI.", + "Manage": "إدارة", + "Manage Direct Connections": "إدارة الاتصالات المباشرة", + "Manage Models": "إدارة النماذج", + "Manage Ollama": "إدارة Ollama", + "Manage Ollama API Connections": "إدارة اتصالات Ollama API", + "Manage OpenAI API Connections": "إدارة اتصالات OpenAI API", + "Manage Pipelines": "إدارة خطوط الأنابيب", + "March": "مارس", + "Max Tokens (num_predict)": "ماكس توكنز (num_predict)", + "Max Upload Count": "الحد الأقصى لعدد التحميلات", + "Max Upload Size": "الحد الأقصى لحجم الملف المرفوع", + "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.", + "May": "مايو", + "Memories accessible by LLMs will be shown here.": "سيتم عرض الذكريات التي يمكن الوصول إليها بواسطة LLMs هنا.", + "Memory": "الذاكرة", + "Memory added successfully": "تم إضافة الذاكرة بنجاح", + "Memory cleared successfully": "تم مسح الذاكرة بنجاح", + "Memory deleted successfully": "تم حذف الذاكرة بنجاح", + "Memory updated successfully": "تم تحديث الذاكرة بنجاح", + "Merge Responses": "دمج الردود", + "Message rating should be enabled to use this feature": "يجب تفعيل تقييم الرسائل لاستخدام هذه الميزة", + "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "لن تتم مشاركة الرسائل التي ترسلها بعد إنشاء الرابط الخاص بك. سيتمكن المستخدمون الذين لديهم عنوان URL من عرض الدردشة المشتركة", + "Min P": "الحد الأدنى P", + "Minimum Score": "الحد الأدنى من النقاط", + "Mirostat": "Mirostat", + "Mirostat Eta": "Mirostat Eta", + "Mirostat Tau": "Mirostat Tau", + "Model": "النموذج", + "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 accepts image inputs": "النموذج يقبل إدخالات الصور", + "Model created successfully!": "تم إنشاء النموذج بنجاح!", + "Model filesystem path detected. Model shortname is required for update, cannot continue.": "تم اكتشاف مسار نظام الملفات النموذجي. الاسم المختصر للنموذج مطلوب للتحديث، ولا يمكن الاستمرار.", + "Model Filtering": "تصفية النماذج", + "Model ID": "رقم الموديل", + "Model IDs": "معرّفات النماذج", + "Model Name": "اسم النموذج", + "Model not selected": "لم تختار موديل", + "Model Params": "معلمات النموذج", + "Model Permissions": "أذونات النموذج", + "Model updated successfully": "تم تحديث النموذج بنجاح", + "Modelfile Content": "محتوى الملف النموذجي", + "Models": "الموديلات", + "Models Access": "الوصول إلى النماذج", + "Models configuration saved successfully": "تم حفظ إعدادات النماذج بنجاح", + "Mojeek Search API Key": "مفتاح API لـ Mojeek Search", + "more": "المزيد", + "More": "المزيد", + "Name": "الأسم", + "Name your knowledge base": "قم بتسمية قاعدة معرفتك", + "Native": "أصلي", + "New Chat": "دردشة جديدة", + "New Folder": "مجلد جديد", + "New Password": "كلمة المرور الجديدة", + "new-channel": "قناة جديدة", + "No content found": "لم يتم العثور على محتوى", + "No content to speak": "لا يوجد محتوى للتحدث عنه", + "No distance available": "لا توجد مسافة متاحة", + "No feedbacks found": "لم يتم العثور على ملاحظات", + "No file selected": "لم يتم تحديد ملف", + "No files found.": "لم يتم العثور على ملفات.", + "No groups with access, add a group to grant access": "لا توجد مجموعات لها حق الوصول، أضف مجموعة لمنح الوصول", + "No HTML, CSS, or JavaScript content found.": "لم يتم العثور على محتوى HTML أو CSS أو JavaScript.", + "No inference engine with management support found": "لم يتم العثور على محرك استدلال يدعم الإدارة", + "No knowledge found": "لم يتم العثور على معرفة", + "No memories to clear": "لا توجد ذاكرة لمسحها", + "No model IDs": "لا توجد معرّفات نماذج", + "No models found": "لم يتم العثور على نماذج", + "No models selected": "لم يتم اختيار نماذج", + "No results found": "لا توجد نتايج", + "No search query generated": "لم يتم إنشاء استعلام بحث", + "No source available": "لا يوجد مصدر متاح", + "No users were found.": "لم يتم العثور على مستخدمين.", + "No valves to update": "لا توجد صمامات للتحديث", + "None": "اي", + "Not factually correct": "ليس صحيحا من حيث الواقع", + "Not helpful": "غير مفيد", + "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "ملاحظة: إذا قمت بتعيين الحد الأدنى من النقاط، فلن يؤدي البحث إلا إلى إرجاع المستندات التي لها نقاط أكبر من أو تساوي الحد الأدنى من النقاط.", + "Notes": "ملاحظات", + "Notification Sound": "صوت الإشعارات", + "Notification Webhook": "رابط Webhook للإشعارات", + "Notifications": "إشعارات", + "November": "نوفمبر", + "num_gpu (Ollama)": "عدد وحدات GPU (لـ Ollama)", + "num_thread (Ollama)": "num_thread (أولاما)", + "OAuth ID": "معرّف OAuth", + "October": "اكتوبر", + "Off": "أغلاق", + "Okay, Let's Go!": "حسنا دعنا نذهب!", + "OLED Dark": "OLED داكن", + "Ollama": "Ollama", + "Ollama API": "أولاما API", + "Ollama API settings updated": "تم تحديث إعدادات واجهة Ollama API", + "Ollama Version": "Ollama الاصدار", + "On": "تشغيل", + "OneDrive": "OneDrive", + "Only alphanumeric characters and hyphens are allowed": "يُسمح فقط بالحروف والأرقام والواصلات", + "Only alphanumeric characters and hyphens are allowed in the command string.": "يُسمح فقط بالأحرف الأبجدية الرقمية والواصلات في سلسلة الأمر.", + "Only collections can be edited, create a new knowledge base to edit/add documents.": "يمكن تعديل المجموعات فقط، أنشئ قاعدة معرفة جديدة لتعديل أو إضافة مستندات.", + "Only select users and groups with permission can access": "يمكن الوصول فقط من قبل المستخدمين والمجموعات المصرح لهم", + "Oops! Looks like the URL is invalid. Please double-check and try again.": "خطاء! يبدو أن عنوان URL غير صالح. يرجى التحقق مرة أخرى والمحاولة مرة أخرى.", + "Oops! There are files still uploading. Please wait for the upload to complete.": "عذرًا! لا تزال بعض الملفات قيد الرفع. يرجى الانتظار حتى يكتمل الرفع.", + "Oops! There was an error in the previous response.": "عذرًا! حدث خطأ في الرد السابق.", + "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "خطاء! أنت تستخدم طريقة غير مدعومة (الواجهة الأمامية فقط). يرجى تقديم واجهة WebUI من الواجهة الخلفية.", + "Open file": "فتح الملف", + "Open in full screen": "فتح في وضع ملء الشاشة", + "Open new chat": "فتح محادثة جديده", + "Open WebUI uses faster-whisper internally.": "تستخدم واجهة WebUI أداة faster-whisper داخليًا.", + "Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "تستخدم WebUI نموذج SpeechT5 وتضمينات صوتية من CMU Arctic.", + "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "إصدار WebUI الحالي (v{{OPEN_WEBUI_VERSION}}) أقل من الإصدار المطلوب (v{{REQUIRED_VERSION}})", + "OpenAI": "OpenAI", + "OpenAI API": "OpenAI API", + "OpenAI API Config": "OpenAI API إعدادات", + "OpenAI API Key is required.": "OpenAI API.مطلوب مفتاح ", + "OpenAI API settings updated": "تم تحديث إعدادات OpenAI API", + "OpenAI URL/Key required.": "URL/مفتاح OpenAI.مطلوب عنوان ", + "or": "أو", + "Organize your users": "تنظيم المستخدمين الخاصين بك", + "Other": "آخر", + "OUTPUT": "الإخراج", + "Output format": "تنسيق الإخراج", + "Overview": "نظرة عامة", + "page": "صفحة", + "Password": "الباسورد", + "Paste Large Text as File": "الصق نصًا كبيرًا كملف", + "PDF document (.pdf)": "PDF ملف (.pdf)", + "PDF Extract Images (OCR)": "PDF أستخرج الصور (OCR)", + "pending": "قيد الانتظار", + "Permission denied when accessing media devices": "تم رفض الإذن عند محاولة الوصول إلى أجهزة الوسائط", + "Permission denied when accessing microphone": "تم رفض الإذن عند محاولة الوصول إلى الميكروفون", + "Permission denied when accessing microphone: {{error}}": "{{error}} تم رفض الإذن عند الوصول إلى الميكروفون ", + "Permissions": "الأذونات", + "Perplexity API Key": "مفتاح API لـ Perplexity", + "Personalization": "التخصيص", + "Pin": "تثبيت", + "Pinned": "مثبت", + "Pioneer insights": "رؤى رائدة", + "Pipeline deleted successfully": "تم حذف خط المعالجة بنجاح", + "Pipeline downloaded successfully": "تم تنزيل خط المعالجة بنجاح", + "Pipelines": "خطوط الانابيب", + "Pipelines Not Detected": "لم يتم الكشف عن خطوط المعالجة", + "Pipelines Valves": "صمامات خطوط الأنابيب", + "Plain text (.txt)": "نص عادي (.txt)", + "Playground": "مكان التجربة", + "Please carefully review the following warnings:": "يرجى مراجعة التحذيرات التالية بعناية:", + "Please do not close the settings page while loading the model.": "الرجاء عدم إغلاق صفحة الإعدادات أثناء تحميل النموذج.", + "Please enter a prompt": "الرجاء إدخال توجيه", + "Please fill in all fields.": "الرجاء تعبئة جميع الحقول.", + "Please select a model first.": "الرجاء اختيار نموذج أولاً.", + "Please select a model.": "الرجاء اختيار نموذج.", + "Please select a reason": "الرجاء اختيار سبب", + "Port": "المنفذ", + "Positive attitude": "موقف ايجابي", + "Prefix ID": "معرف البادئة", + "Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "يُستخدم معرف البادئة لتفادي التعارض مع الاتصالات الأخرى من خلال إضافة بادئة إلى معرفات النماذج – اتركه فارغًا لتعطيله", + "Presence Penalty": "عقوبة التكرار", + "Previous 30 days": "أخر 30 يوم", + "Previous 7 days": "أخر 7 أيام", + "Profile Image": "صورة الملف الشخصي", + "Prompt": "التوجيه", + "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "موجه (على سبيل المثال: أخبرني بحقيقة ممتعة عن الإمبراطورية الرومانية)", + "Prompt Content": "محتوى عاجل", + "Prompt created successfully": "تم إنشاء التوجيه بنجاح", + "Prompt suggestions": "اقتراحات سريعة", + "Prompt updated successfully": "تم تحديث التوجيه بنجاح", + "Prompts": "مطالبات", + "Prompts Access": "الوصول إلى التوجيهات", + "Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com \"{{searchValue}}\" أسحب من ", + "Pull a model from Ollama.com": "Ollama.com سحب الموديل من ", + "Query Generation Prompt": "توجيه إنشاء الاستعلام", + "RAG Template": "RAG تنمبلت", + "Rating": "التقييم", + "Re-rank models by topic similarity": "إعادة ترتيب النماذج حسب تشابه الموضوع", + "Read": "قراءة", + "Read Aloud": "أقراء لي", + "Reasoning Effort": "جهد الاستدلال", + "Record voice": "سجل صوت", + "Redirecting you to Open WebUI Community": "OpenWebUI إعادة توجيهك إلى مجتمع ", + "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "يقلل من احتمال توليد إجابات غير منطقية. القيم الأعلى (مثل 100) تعطي إجابات أكثر تنوعًا، بينما القيم الأدنى (مثل 10) تكون أكثر تحفظًا.", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "أشر إلى نفسك باسم \"المستخدم\" (مثل: \"المستخدم يتعلم الإسبانية\")", + "References from": "مراجع من", + "Refused when it shouldn't have": "رفض عندما لا ينبغي أن يكون", + "Regenerate": "تجديد", + "Release Notes": "ملاحظات الإصدار", + "Relevance": "الصلة", + "Remove": "إزالة", + "Remove Model": "حذف الموديل", + "Rename": "إعادة تسمية", + "Reorder Models": "إعادة ترتيب النماذج", + "Repeat Last N": "N كرر آخر", + "Repeat Penalty (Ollama)": "عقوبة التكرار (Ollama)", + "Reply in Thread": "الرد داخل سلسلة الرسائل", + "Request Mode": "وضع الطلب", + "Reranking Model": "إعادة تقييم النموذج", + "Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب", + "Reranking model set to \"{{reranking_model}}\"": "تم ضبط نموذج إعادة الترتيب على \"{{reranking_model}}\"", + "Reset": "إعادة تعيين", + "Reset All Models": "إعادة تعيين جميع النماذج", + "Reset Upload Directory": "إعادة تعيين مجلد التحميل", + "Reset Vector Storage/Knowledge": "إعادة تعيين تخزين المتجهات/المعرفة", + "Reset view": "إعادة تعيين العرض", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "لا يمكن تفعيل إشعارات الردود لأن صلاحيات الموقع مرفوضة. يرجى التوجه إلى إعدادات المتصفح لمنح الصلاحية اللازمة.", + "Response splitting": "تقسيم الرد", + "Result": "النتيجة", + "Retrieval": "الاسترجاع", + "Retrieval Query Generation": "توليد استعلام الاسترجاع", + "Rich Text Input for Chat": "إدخال نص منسق للمحادثة", + "RK": "RK", + "Role": "منصب", + "Rosé Pine": "Rosé Pine", + "Rosé Pine Dawn": "Rosé Pine Dawn", + "RTL": "من اليمين إلى اليسار", + "Run": "تنفيذ", + "Running": "جارٍ التنفيذ", + "Save": "حفظ", + "Save & Create": "حفظ وإنشاء", + "Save & Update": "حفظ وتحديث", + "Save As Copy": "حفظ كنسخة", + "Save Tag": "حفظ الوسم", + "Saved": "تم الحفظ", + "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": "لم يعد حفظ سجلات الدردشة مباشرة في مساحة تخزين متصفحك مدعومًا. يرجى تخصيص بعض الوقت لتنزيل وحذف سجلات الدردشة الخاصة بك عن طريق النقر على الزر أدناه. لا تقلق، يمكنك بسهولة إعادة استيراد سجلات الدردشة الخاصة بك إلى الواجهة الخلفية من خلاله", + "Scroll to bottom when switching between branches": "التمرير للأسفل عند التبديل بين الفروع", + "Search": "البحث", + "Search a model": "البحث عن موديل", + "Search Base": "قاعدة البحث", + "Search Chats": "البحث في الدردشات", + "Search Collection": "البحث في المجموعة", + "Search Filters": "مرشحات البحث", + "search for tags": "البحث عن وسوم", + "Search Functions": "البحث في الوظائف", + "Search Knowledge": "البحث في المعرفة", + "Search Models": "نماذج البحث", + "Search options": "خيارات البحث", + "Search Prompts": "أبحث حث", + "Search Result Count": "عدد نتائج البحث", + "Search the internet": "البحث في الإنترنت", + "Search Tools": "أدوات البحث", + "SearchApi API Key": "مفتاح API لـ SearchApi", + "SearchApi Engine": "محرك SearchApi", + "Searched {{count}} sites": "تم البحث في {{count}} مواقع", + "Searching \"{{searchQuery}}\"": "جارٍ البحث عن \"{{searchQuery}}\"", + "Searching Knowledge for \"{{searchQuery}}\"": "جارٍ البحث في المعرفة عن \"{{searchQuery}}\"", + "Searxng Query URL": "عنوان URL لاستعلام Searxng", + "See readme.md for instructions": "readme.md للحصول على التعليمات", + "See what's new": "ما الجديد", + "Seed": "Seed", + "Select a base model": "حدد نموذجا أساسيا", + "Select a engine": "اختر محركًا", + "Select a function": "اختر وظيفة", + "Select a group": "اختر مجموعة", + "Select a model": "أختار الموديل", + "Select a pipeline": "حدد مسارا", + "Select a pipeline url": "حدد عنوان URL لخط الأنابيب", + "Select a tool": "اختر أداة", + "Select an auth method": "اختر طريقة التوثيق", + "Select an Ollama instance": "اختر نسخة Ollama", + "Select Engine": "اختر المحرك", + "Select Knowledge": "اختر المعرفة", + "Select only one model to call": "اختر نموذجًا واحدًا فقط للاستدعاء", + "Selected model(s) do not support image inputs": "النموذج (النماذج) المحددة لا تدعم مدخلات الصور", + "Semantic distance to query": "المسافة الدلالية إلى الاستعلام", + "Send": "تم", + "Send a Message": "يُرجى إدخال طلبك هنا", + "Send message": "يُرجى إدخال طلبك هنا.", + "Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "يرسل `stream_options: { include_usage: true }` في الطلب.\nالمزودون المدعومون سيُرجعون معلومات استخدام الرموز في الاستجابة عند التفعيل.", + "September": "سبتمبر", + "SerpApi API Key": "مفتاح API لـ SerpApi", + "SerpApi Engine": "محرك SerpApi", + "Serper API Key": "مفتاح واجهة برمجة تطبيقات سيربر", + "Serply API Key": "مفتاح API لـ Serply", + "Serpstack API Key": "مفتاح واجهة برمجة تطبيقات Serpstack", + "Server connection verified": "تم التحقق من اتصال الخادم", + "Set as default": "الافتراضي", + "Set CFG Scale": "ضبط مقياس CFG", + "Set Default Model": "تفعيد الموديل الافتراضي", + "Set embedding model": "تعيين نموذج التضمين", + "Set embedding model (e.g. {{model}})": "ضبط نموذج المتجهات (على سبيل المثال: {{model}})", + "Set Image Size": "حجم الصورة", + "Set reranking model (e.g. {{model}})": "ضبط نموذج إعادة الترتيب (على سبيل المثال: {{model}})", + "Set Sampler": "تعيين العينة", + "Set Scheduler": "تعيين المجدول", + "Set Steps": "ضبط الخطوات", + "Set Task Model": "تعيين نموذج المهمة", + "Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "تعيين عدد الطبقات التي سيتم تفريغها إلى وحدة معالجة الرسومات (GPU). زيادتها قد تحسن الأداء بشكل كبير، لكنها تستهلك طاقة وموارد GPU أكثر.", + "Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "تحديد عدد سلاسل المعالجة المستخدمة في الحساب. هذا الخيار يتحكم في عدد السلاسل لمعالجة الطلبات بالتوازي. زيادته يحسن الأداء تحت الضغط العالي لكنه يستهلك موارد المعالج.", + "Set Voice": "ضبط الصوت", + "Set whisper model": "تعيين نموذج Whisper", + "Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "تعيين انحياز ثابت ضد الرموز التي ظهرت مرة واحدة على الأقل. القيم الأعلى (مثل 1.5) تعاقب التكرار بقوة، والأقل (مثل 0.9) تكون أكثر تساهلًا. عند 0 يتم تعطيله.", + "Sets a scaling bias against tokens to penalize repetitions, based on how many times they have appeared. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "يحدد انحيازًا متدرجًا ضد الرموز لمعاقبة التكرار حسب عدد مرات الظهور. القيم الأعلى (1.5) تعاقب أكثر، والأقل (0.9) تكون أكثر تساهلًا. عند 0 يتم تعطيله.", + "Sets how far back for the model to look back to prevent repetition.": "يحدد مدى رجوع النموذج إلى الوراء لتجنب التكرار.", + "Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt.": "يحدد البذرة العشوائية لاستخدامها في التوليد. تعيين قيمة معينة يجعل النموذج ينتج نفس النص لنفس التوجيه.", + "Sets the size of the context window used to generate the next token.": "يحدد حجم نافذة السياق المستخدمة لتوليد الرمز التالي.", + "Sets the stop sequences to use. When this pattern is encountered, the LLM will stop generating text and return. Multiple stop patterns may be set by specifying multiple separate stop parameters in a modelfile.": "يحدد تسلسلات الإيقاف. عند مواجهتها، سيتوقف النموذج عن التوليد ويُرجع النتيجة. يمكن تحديد أنماط توقف متعددة داخل ملف النموذج.", + "Settings": "الاعدادات", + "Settings saved successfully!": "تم حفظ الاعدادات بنجاح", + "Share": "كشاركة", + "Share Chat": "مشاركة الدردشة", + "Share to Open WebUI Community": "OpenWebUI شارك في مجتمع", + "Show": "عرض", + "Show \"What's New\" modal on login": "عرض نافذة \"ما الجديد\" عند تسجيل الدخول", + "Show Admin Details in Account Pending Overlay": "عرض تفاصيل المشرف في نافذة \"الحساب قيد الانتظار\"", + "Show shortcuts": "إظهار الاختصارات", + "Show your support!": "أظهر دعمك!", + "Showcased creativity": "أظهر الإبداع", + "Sign in": "تسجيل الدخول", + "Sign in to {{WEBUI_NAME}}": "سجّل الدخول إلى {{WEBUI_NAME}}", + "Sign in to {{WEBUI_NAME}} with LDAP": "سجّل الدخول إلى {{WEBUI_NAME}} باستخدام LDAP", + "Sign Out": "تسجيل الخروج", + "Sign up": "تسجيل", + "Sign up to {{WEBUI_NAME}}": "سجّل في {{WEBUI_NAME}}", + "Signing in to {{WEBUI_NAME}}": "جارٍ تسجيل الدخول إلى {{WEBUI_NAME}}", + "sk-1234": "sk-1234", + "Source": "المصدر", + "Speech Playback Speed": "سرعة تشغيل الصوت", + "Speech recognition error: {{error}}": "{{error}} خطأ في التعرف على الكلام", + "Speech-to-Text Engine": "محرك تحويل الكلام إلى نص", + "Stop": "إيقاف", + "Stop Sequence": "وقف التسلسل", + "Stream Chat Response": "بث استجابة الدردشة", + "STT Model": "نموذج تحويل الصوت إلى نص (STT)", + "STT Settings": "STT اعدادات", + "Subtitle (e.g. about the Roman Empire)": "(e.g. about the Roman Empire) الترجمة", + "Success": "نجاح", + "Successfully updated.": "تم التحديث بنجاح", + "Suggested": "مقترحات", + "Support": "الدعم", + "Support this plugin:": "دعم هذا المكون الإضافي:", + "Sync directory": "مزامنة المجلد", + "System": "النظام", + "System Instructions": "تعليمات النظام", + "System Prompt": "محادثة النظام", + "Tags Generation": "إنشاء الوسوم", + "Tags Generation Prompt": "توجيه إنشاء الوسوم", + "Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "يتم استخدام أخذ العينات بدون ذيل لتقليل تأثير الرموز الأقل احتمالًا. القيمة الأعلى (مثل 2.0) تقلل التأثير أكثر، والقيمة 1.0 تعطل هذا الإعداد.", + "Talk to model": "تحدث إلى النموذج", + "Tap to interrupt": "اضغط للمقاطعة", + "Tasks": "المهام", + "Tavily API Key": "مفتاح API لـ Tavily", + "Tell us more:": "أخبرنا المزيد:", + "Temperature": "درجة حرارة", + "Template": "نموذج", + "Temporary Chat": "محادثة مؤقتة", + "Text Splitter": "تقسيم النص", + "Text-to-Speech Engine": "محرك تحويل النص إلى كلام", + "Tfs Z": "Tfs Z", + "Thanks for your feedback!": "شكرا لملاحظاتك!", + "The Application Account DN you bind with for search": "DN لحساب التطبيق الذي تستخدمه للبحث", + "The base to search for users": "الأساس الذي يُستخدم للبحث عن المستخدمين", + "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "يحدد حجم الدفعة عدد طلبات النصوص التي تتم معالجتها معًا. الحجم الأكبر يمكن أن يزيد الأداء والسرعة، ولكنه يحتاج أيضًا إلى ذاكرة أكبر.", + "The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "المطورون خلف هذا المكون الإضافي هم متطوعون شغوفون من المجتمع. إذا وجدت هذا المكون مفيدًا، فكر في المساهمة في تطويره.", + "The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "قائمة التقييم تعتمد على نظام Elo ويتم تحديثها في الوقت الفعلي.", + "The LDAP attribute that maps to the mail that users use to sign in.": "السمة LDAP التي تتوافق مع البريد الإلكتروني الذي يستخدمه المستخدمون لتسجيل الدخول.", + "The LDAP attribute that maps to the username that users use to sign in.": "السمة LDAP التي تتوافق مع اسم المستخدم الذي يستخدمه المستخدمون لتسجيل الدخول.", + "The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "لوحة المتصدرين حالياً في وضع تجريبي، وقد نقوم بتعديل حسابات التصنيف أثناء تحسين الخوارزمية.", + "The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "الحد الأقصى لحجم الملف بالميغابايت. إذا تجاوز الملف هذا الحد، فلن يتم رفعه.", + "The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "الحد الأقصى لعدد الملفات التي يمكن استخدامها في المحادثة دفعة واحدة. إذا تجاوز العدد هذا الحد، فلن يتم رفع الملفات.", + "The score should be a value between 0.0 (0%) and 1.0 (100%).": "يجب أن تكون النتيجة قيمة تتراوح بين 0.0 (0%) و1.0 (100%).", + "The temperature of the model. Increasing the temperature will make the model answer more creatively.": "درجة حرارة النموذج. زيادتها تجعل الإجابات أكثر إبداعًا.", + "Theme": "الثيم", + "Thinking...": "جارٍ التفكير...", + "This action cannot be undone. Do you wish to continue?": "لا يمكن التراجع عن هذا الإجراء. هل ترغب في المتابعة؟", + "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "وهذا يضمن حفظ محادثاتك القيمة بشكل آمن في قاعدة بياناتك الخلفية. شكرًا لك!", + "This is an experimental feature, it may not function as expected and is subject to change at any time.": "هذه ميزة تجريبية، وقد لا تعمل كما هو متوقع وقد تتغير في أي وقت.", + "This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "هذا الخيار يحدد عدد الرموز التي يتم الاحتفاظ بها عند تحديث السياق. مثلاً، إذا تم ضبطه على 2، سيتم الاحتفاظ بآخر رمزين من السياق. الحفاظ على السياق يساعد في استمرارية المحادثة، لكنه قد يحد من التفاعل مع مواضيع جديدة.", + "This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "يحدد هذا الخيار الحد الأقصى لعدد الرموز التي يمكن للنموذج توليدها في الرد. زيادته تتيح للنموذج تقديم إجابات أطول، لكنها قد تزيد من احتمالية توليد محتوى غير مفيد أو غير ذي صلة.", + "This option will delete all existing files in the collection and replace them with newly uploaded files.": "سيؤدي هذا الخيار إلى حذف جميع الملفات الحالية في المجموعة واستبدالها بالملفات التي تم تحميلها حديثًا.", + "This response was generated by \"{{model}}\"": "تم توليد هذا الرد بواسطة \"{{model}}\"", + "This will delete": "هذا سيقوم بالحذف", + "This will delete {{NAME}} and all its contents.": "هذا سيحذف {{NAME}} وكل محتوياته.", + "This will delete all models including custom models": "هذا سيحذف جميع النماذج بما في ذلك النماذج المخصصة", + "This will delete all models including custom models and cannot be undone.": "هذا سيحذف جميع النماذج بما في ذلك المخصصة ولا يمكن التراجع عن هذا الإجراء.", + "This will reset the knowledge base and sync all files. Do you wish to continue?": "هذا سيؤدي إلى إعادة تعيين قاعدة المعرفة ومزامنة جميع الملفات. هل ترغب في المتابعة؟", + "Thorough explanation": "شرح شامل", + "Thought for {{DURATION}}": "فكّر لمدة {{DURATION}}", + "Thought for {{DURATION}} seconds": "فكّر لمدة {{DURATION}} ثانية", + "Tika": "Tika", + "Tika Server URL required.": "عنوان خادم Tika مطلوب.", + "Tiktoken": "Tiktoken", + "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)": "(e.g. Tell me a fun fact) العناون", + "Title Auto-Generation": "توليد تلقائي للعنوان", + "Title cannot be an empty string.": "العنوان مطلوب", + "Title Generation": "توليد العنوان", + "Title Generation Prompt": "موجه إنشاء العنوان", + "TLS": "TLS", + "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 attach knowledge base here, add them to the \"Knowledge\" workspace first.": "لإرفاق قاعدة المعرفة هنا، أضفها أولاً إلى مساحة العمل \"المعرفة\".", + "To learn more about available endpoints, visit our documentation.": "لمعرفة المزيد حول نقاط النهاية المتاحة، قم بزيارة الوثائق الخاصة بنا.", + "To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "لحماية خصوصيتك، يتم مشاركة التقييمات ومعرّفات النماذج والوسوم والبيانات الوصفية فقط من ملاحظاتك—سجلات الدردشة تظل خاصة ولا تُدرج.", + "To select actions here, add them to the \"Functions\" workspace first.": "لاختيار الإجراءات هنا، أضفها أولاً إلى مساحة العمل \"الوظائف\".", + "To select filters here, add them to the \"Functions\" workspace first.": "لاختيار الفلاتر هنا، أضفها أولاً إلى مساحة العمل \"الوظائف\".", + "To select toolkits here, add them to the \"Tools\" workspace first.": "لاختيار الأدوات هنا، أضفها أولاً إلى مساحة العمل \"الأدوات\".", + "Toast notifications for new updates": "إشعارات منبثقة للتحديثات الجديدة", + "Today": "اليوم", + "Toggle settings": "فتح وأغلاق الاعدادات", + "Toggle sidebar": "فتح وأغلاق الشريط الجانبي", + "Token": "رمز", + "Tokens To Keep On Context Refresh (num_keep)": "الرموز المحفوظة عند تحديث السياق (num_keep)", + "Too verbose": "مفرط في التفاصيل", + "Tool created successfully": "تم إنشاء الأداة بنجاح", + "Tool deleted successfully": "تم حذف الأداة بنجاح", + "Tool Description": "وصف الأداة", + "Tool ID": "معرف الأداة", + "Tool imported successfully": "تم استيراد الأداة بنجاح", + "Tool Name": "اسم الأداة", + "Tool updated successfully": "تم تحديث الأداة بنجاح", + "Tools": "الأدوات", + "Tools Access": "الوصول إلى الأدوات", + "Tools are a function calling system with arbitrary code execution": "الأدوات عبارة عن نظام لاستدعاء الوظائف يسمح بتنفيذ كود برمجي مخصص", + "Tools Function Calling Prompt": "توجيه استدعاء وظائف الأدوات", + "Tools have a function calling system that allows arbitrary code execution": "تحتوي الأدوات على نظام لاستدعاء الوظائف يتيح تنفيذ كود برمجي مخصص", + "Tools have a function calling system that allows arbitrary code execution.": "تحتوي الأدوات على نظام لاستدعاء الوظائف يتيح تنفيذ كود برمجي مخصص.", + "Top K": "Top K", + "Top P": "Top P", + "Transformers": "Transformers", + "Trouble accessing Ollama?": "هل تواجه مشكلة في الوصول", + "Trust Proxy Environment": "بيئة البروكسي الموثوقة", + "TTS Model": "نموذج تحويل النص إلى كلام (TTS)", + "TTS Settings": "TTS اعدادات", + "TTS Voice": "صوت TTS", + "Type": "نوع", + "Type Hugging Face Resolve (Download) URL": "اكتب عنوان URL لحل مشكلة الوجه (تنزيل).", + "Uh-oh! There was an issue with the response.": "أوه! حدثت مشكلة في الرد.", + "UI": "واجهة المستخدم", + "Unarchive All": "إلغاء أرشفة الكل", + "Unarchive All Archived Chats": "إلغاء أرشفة جميع المحادثات المؤرشفة", + "Unarchive Chat": "إلغاء أرشفة المحادثة", + "Unlock mysteries": "اكشف الأسرار", + "Unpin": "إزالة التثبيت", + "Unravel secrets": "فكّ الأسرار", + "Untagged": "بدون وسوم", + "Update": "تحديث", + "Update and Copy Link": "تحديث ونسخ الرابط", + "Update for the latest features and improvements.": "حدّث للحصول على أحدث الميزات والتحسينات.", + "Update password": "تحديث كلمة المرور", + "Updated": "تم التحديث", + "Updated at": "تم التحديث في", + "Updated At": "تم التحديث في", + "Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "قم بالترقية إلى خطة مرخصة للحصول على ميزات إضافية، مثل التخصيص والدعم المخصص.", + "Upload": "رفع", + "Upload a GGUF model": "GGUF رفع موديل نوع", + "Upload directory": "رفع مجلد", + "Upload files": "رفع ملفات", + "Upload Files": "تحميل الملفات", + "Upload Pipeline": "رفع خط المعالجة", + "Upload Progress": "جاري التحميل", + "URL": "الرابط", + "URL Mode": "رابط الموديل", + "Use '#' in the prompt input to load and include your knowledge.": "استخدم الرمز '#' في خانة التوجيه لتحميل وإدراج المعرفة الخاصة بك.", + "Use Gravatar": "Gravatar أستخدم", + "Use groups to group your users and assign permissions.": "استخدم المجموعات لتجميع المستخدمين وتحديد الصلاحيات.", + "Use Initials": "Initials أستخدم", + "use_mlock (Ollama)": "use_mlock (أولاما)", + "use_mmap (Ollama)": "use_mmap (أولاما)", + "user": "مستخدم", + "User": "مستخدم", + "User location successfully retrieved.": "تم استرجاع موقع المستخدم بنجاح.", + "Username": "اسم المستخدم", + "Users": "المستخدمين", + "Using the default arena model with all models. Click the plus button to add custom models.": "يتم استخدام نموذج الساحة الافتراضي مع جميع النماذج. اضغط على زر + لإضافة نماذج مخصصة.", + "Utilize": "يستخدم", + "Valid time units:": "وحدات زمنية صالحة:", + "Valves": "الصمامات", + "Valves updated": "تم تحديث الصمامات", + "Valves updated successfully": "تم تحديث الصمامات بنجاح", + "variable": "المتغير", + "variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.", + "Version": "إصدار", + "Version {{selectedVersion}} of {{totalVersions}}": "الإصدار {{selectedVersion}} من {{totalVersions}}", + "View Replies": "عرض الردود", + "Visibility": "مستوى الظهور", + "Voice": "الصوت", + "Voice Input": "إدخال صوتي", + "Warning": "تحذير", + "Warning:": "تحذير:", + "Warning: Enabling this will allow users to upload arbitrary code on the server.": "تحذير: تفعيل هذا الخيار سيسمح للمستخدمين برفع كود عشوائي على الخادم.", + "Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.", + "Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "تحذير: تنفيذ كود Jupyter يتيح تنفيذ كود عشوائي مما يشكل مخاطر أمنية جسيمة—تابع بحذر شديد.", + "Web": "Web", + "Web API": "واجهة برمجة التطبيقات (API)", + "Web Search": "بحث الويب", + "Web Search Engine": "محرك بحث الويب", + "Web Search in Chat": "بحث ويب داخل المحادثة", + "Web Search Query Generation": "توليد استعلام بحث الويب", + "Webhook URL": "Webhook الرابط", + "WebUI Settings": "WebUI اعدادات", + "WebUI URL": "رابط WebUI", + "WebUI will make requests to \"{{url}}/api/chat\"": "ستقوم WebUI بإرسال الطلبات إلى \"{{url}}/api/chat\"", + "WebUI will make requests to \"{{url}}/chat/completions\"": "ستقوم WebUI بإرسال الطلبات إلى \"{{url}}/chat/completions\"", + "What are you trying to achieve?": "ما الذي تحاول تحقيقه؟", + "What are you working on?": "على ماذا تعمل؟", + "What’s New in": "ما هو الجديد", + "When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "عند التفعيل، سيستجيب النموذج لكل رسالة في المحادثة بشكل فوري، مولدًا الرد بمجرد إرسال المستخدم لرسالته. هذا الوضع مفيد لتطبيقات الدردشة الحية، لكنه قد يؤثر على الأداء في الأجهزة الأبطأ.", + "wherever you are": "أينما كنت", + "Whisper (Local)": "Whisper (محلي)", + "Why?": "لماذا؟", + "Widescreen Mode": "وضع الشاشة العريضة", + "Won": "فاز", + "Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text.": "يعمل جنبًا إلى جنب مع top-k. القيمة الأعلى (مثلاً 0.95) تنتج نصًا أكثر تنوعًا، بينما القيمة الأقل (مثلاً 0.5) تنتج نصًا أكثر تركيزًا وتحفظًا.", + "Workspace": "مساحة العمل", + "Workspace Permissions": "صلاحيات مساحة العمل", + "Write": "كتابة", + "Write a prompt suggestion (e.g. Who are you?)": "اكتب اقتراحًا سريعًا (على سبيل المثال، من أنت؟)", + "Write a summary in 50 words that summarizes [topic or keyword].": "اكتب ملخصًا في 50 كلمة يلخص [الموضوع أو الكلمة الرئيسية]", + "Write something...": "اكتب شيئًا...", + "Write your model template content here": "اكتب هنا محتوى قالب النموذج الخاص بك", + "Yesterday": "أمس", + "You": "انت", + "You are currently using a trial license. Please contact support to upgrade your license.": "أنت تستخدم حالياً ترخيصًا تجريبيًا. يُرجى التواصل مع الدعم للترقية.", + "You can only chat with a maximum of {{maxCount}} file(s) at a time.": "يمكنك الدردشة مع {{maxCount}} ملف(ات) كحد أقصى في نفس الوقت.", + "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 upload an empty file.": "لا يمكنك رفع ملف فارغ.", + "You do not have permission to access this feature.": "ليس لديك صلاحية للوصول إلى هذه الميزة.", + "You do not have permission to upload files": "ليس لديك صلاحية لرفع الملفات", + "You do not have permission to upload files.": "ليس لديك صلاحية لرفع الملفات.", + "You have no archived conversations.": "لا تملك محادثات محفوظه", + "You have shared this chat": "تم مشاركة هذه المحادثة", + "You're a helpful assistant.": "مساعدك المفيد هنا", + "You're now logged in.": "لقد قمت الآن بتسجيل الدخول.", + "Your account status is currently pending activation.": "حالة حسابك حالياً بانتظار التفعيل.", + "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "سيتم توجيه كامل مساهمتك مباشرة إلى مطور المكون الإضافي؛ لا تأخذ Open WebUI أي نسبة. ومع ذلك، قد تفرض منصة التمويل المختارة رسومًا خاصة بها.", + "Youtube": "Youtube", + "Youtube Language": "لغة YouTube", + "Youtube Proxy URL": "رابط بروكسي YouTube" + } \ No newline at end of file diff --git a/src/lib/i18n/locales/languages.json b/src/lib/i18n/locales/languages.json index 5672e45929f..3ad0b246ca0 100644 --- a/src/lib/i18n/locales/languages.json +++ b/src/lib/i18n/locales/languages.json @@ -1,4 +1,8 @@ [ + { + "code": "ar", + "title": "Arabic (العربية)" + }, { "code": "en-US", "title": "English (US)" @@ -9,7 +13,7 @@ }, { "code": "ar-BH", - "title": "Arabic (عربي)" + "title": "Arabic (Bahrain)" }, { "code": "bn-BD", From 1ac6879268e3526bf71006b46b6cc45d281eda87 Mon Sep 17 00:00:00 2001 From: Patrick Wachter Date: Sat, 22 Mar 2025 13:44:50 +0100 Subject: [PATCH 016/129] Add Mistral OCR integration and configuration support --- backend/open_webui/config.py | 5 ++ backend/open_webui/main.py | 2 + backend/open_webui/retrieval/loaders/main.py | 59 +++++++++++++++++++ backend/open_webui/routers/retrieval.py | 16 +++++ backend/requirements.txt | 1 + .../admin/Settings/Documents.svelte | 27 +++++++-- 6 files changed, 105 insertions(+), 5 deletions(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 0ac92bd23bd..02f61696ecc 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1727,6 +1727,11 @@ class BannerModel(BaseModel): os.getenv("DOCUMENT_INTELLIGENCE_KEY", ""), ) +MISTRAL_OCR_API_KEY = PersistentConfig( + "MISTRAL_OCR_API_KEY", + "rag.mistral_ocr_api_key", + os.getenv("MISTRAL_OCR_API_KEY", ""), +) BYPASS_EMBEDDING_AND_RETRIEVAL = PersistentConfig( "BYPASS_EMBEDDING_AND_RETRIEVAL", diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index bb78d900346..383523174c5 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -191,6 +191,7 @@ DOCLING_SERVER_URL, DOCUMENT_INTELLIGENCE_ENDPOINT, DOCUMENT_INTELLIGENCE_KEY, + MISTRAL_OCR_API_KEY, RAG_TOP_K, RAG_TOP_K_RERANKER, RAG_TEXT_SPLITTER, @@ -582,6 +583,7 @@ async def lifespan(app: FastAPI): app.state.config.DOCLING_SERVER_URL = DOCLING_SERVER_URL app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT = DOCUMENT_INTELLIGENCE_ENDPOINT app.state.config.DOCUMENT_INTELLIGENCE_KEY = DOCUMENT_INTELLIGENCE_KEY +app.state.config.MISTRAL_OCR_API_KEY = MISTRAL_OCR_API_KEY app.state.config.TEXT_SPLITTER = RAG_TEXT_SPLITTER app.state.config.TIKTOKEN_ENCODING_NAME = TIKTOKEN_ENCODING_NAME diff --git a/backend/open_webui/retrieval/loaders/main.py b/backend/open_webui/retrieval/loaders/main.py index 295d0414a75..e75c69682d2 100644 --- a/backend/open_webui/retrieval/loaders/main.py +++ b/backend/open_webui/retrieval/loaders/main.py @@ -20,6 +20,9 @@ YoutubeLoader, ) from langchain_core.documents import Document + +from mistralai import Mistral + from open_webui.env import SRC_LOG_LEVELS, GLOBAL_LOG_LEVEL logging.basicConfig(stream=sys.stdout, level=GLOBAL_LOG_LEVEL) @@ -163,6 +166,53 @@ def load(self) -> list[Document]: raise Exception(f"Error calling Docling: {error_msg}") +class MistralLoader: + def __init__(self, api_key: str, file_path: str): + self.api_key = api_key + self.file_path = file_path + self.client = Mistral(api_key=api_key) + + def load(self) -> list[Document]: + log.info("Uploading file to Mistral OCR") + uploaded_pdf = self.client.files.upload( + file={ + "file_name": self.file_path.split("/")[-1], + "content": open(self.file_path, "rb"), + }, + purpose="ocr", + ) + log.info("File uploaded to Mistral OCR, getting signed URL") + signed_url = self.client.files.get_signed_url(file_id=uploaded_pdf.id) + log.info("Signed URL received, processing OCR") + ocr_response = self.client.ocr.process( + model="mistral-ocr-latest", + document={ + "type": "document_url", + "document_url": signed_url.url, + }, + ) + log.info("OCR processing done, deleting uploaded file") + deleted_pdf = self.client.files.delete(file_id=uploaded_pdf.id) + log.info("Uploaded file deleted") + log.debug("OCR response: %s", ocr_response) + if not hasattr(ocr_response, "pages") or not ocr_response.pages: + log.error("No pages found in OCR response") + return [Document(page_content="No text content found", metadata={})] + + return [ + Document( + page_content=page.markdown, + metadata={ + "page": page.index, + "page_label": page.index + 1, + "total_pages": len(ocr_response.pages), + }, + ) + for page in ocr_response.pages + if hasattr(page, "markdown") and hasattr(page, "index") + ] + + class Loader: def __init__(self, engine: str = "", **kwargs): self.engine = engine @@ -222,6 +272,15 @@ def _get_loader(self, filename: str, file_content_type: str, file_path: str): api_endpoint=self.kwargs.get("DOCUMENT_INTELLIGENCE_ENDPOINT"), api_key=self.kwargs.get("DOCUMENT_INTELLIGENCE_KEY"), ) + elif ( + self.engine == "mistral_ocr" + and self.kwargs.get("MISTRAL_OCR_API_KEY") != "" + and file_ext + in ["pdf"] # Mistral OCR currently only supports PDF and images + ): + loader = MistralLoader( + api_key=self.kwargs.get("MISTRAL_OCR_API_KEY"), file_path=file_path + ) else: if file_ext == "pdf": loader = PyPDFLoader( diff --git a/backend/open_webui/routers/retrieval.py b/backend/open_webui/routers/retrieval.py index 2bd908606ac..979cd2c70c2 100644 --- a/backend/open_webui/routers/retrieval.py +++ b/backend/open_webui/routers/retrieval.py @@ -364,6 +364,9 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)): "endpoint": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT, "key": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY, }, + "mistral_ocr_config": { + "api_key": request.app.state.config.MISTRAL_OCR_API_KEY, + }, }, "chunk": { "text_splitter": request.app.state.config.TEXT_SPLITTER, @@ -427,11 +430,16 @@ class DocumentIntelligenceConfigForm(BaseModel): key: str +class MistralOCRConfigForm(BaseModel): + api_key: str + + class ContentExtractionConfig(BaseModel): engine: str = "" tika_server_url: Optional[str] = None docling_server_url: Optional[str] = None document_intelligence_config: Optional[DocumentIntelligenceConfigForm] = None + mistral_ocr_config: Optional[MistralOCRConfigForm] = None class ChunkParamUpdateForm(BaseModel): @@ -553,6 +561,10 @@ async def update_rag_config( request.app.state.config.DOCUMENT_INTELLIGENCE_KEY = ( form_data.content_extraction.document_intelligence_config.key ) + if form_data.content_extraction.mistral_ocr_config is not None: + request.app.state.config.MISTRAL_OCR_API_KEY = ( + form_data.content_extraction.mistral_ocr_config.api_key + ) if form_data.chunk is not None: request.app.state.config.TEXT_SPLITTER = form_data.chunk.text_splitter @@ -659,6 +671,9 @@ async def update_rag_config( "endpoint": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT, "key": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY, }, + "mistral_ocr_config": { + "api_key": request.app.state.config.MISTRAL_OCR_API_KEY, + }, }, "chunk": { "text_splitter": request.app.state.config.TEXT_SPLITTER, @@ -1007,6 +1022,7 @@ def process_file( PDF_EXTRACT_IMAGES=request.app.state.config.PDF_EXTRACT_IMAGES, DOCUMENT_INTELLIGENCE_ENDPOINT=request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT, DOCUMENT_INTELLIGENCE_KEY=request.app.state.config.DOCUMENT_INTELLIGENCE_KEY, + MISTRAL_OCR_API_KEY=request.app.state.config.MISTRAL_OCR_API_KEY, ) docs = loader.load( file.filename, file.meta.get("content_type"), file_path diff --git a/backend/requirements.txt b/backend/requirements.txt index ca2ea50609d..078d8d2d34e 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -77,6 +77,7 @@ psutil sentencepiece soundfile==0.13.1 azure-ai-documentintelligence==1.0.0 +mistralai==1.6.0 pillow==11.1.0 opencv-python-headless==4.11.0.86 diff --git a/src/lib/components/admin/Settings/Documents.svelte b/src/lib/components/admin/Settings/Documents.svelte index 5ea12c9c084..b105ebdb9f7 100644 --- a/src/lib/components/admin/Settings/Documents.svelte +++ b/src/lib/components/admin/Settings/Documents.svelte @@ -54,6 +54,8 @@ let documentIntelligenceEndpoint = ''; let documentIntelligenceKey = ''; let showDocumentIntelligenceConfig = false; + let mistralApiKey = ''; + let showMistralOcrConfig = false; let textSplitter = ''; let chunkSize = 0; @@ -189,6 +191,10 @@ toast.error($i18n.t('Document Intelligence endpoint and key required.')); return; } + if (contentExtractionEngine === 'mistral_ocr' && mistralApiKey === '') { + toast.error($i18n.t('Mistral OCR API Key required.')); + return; + } if (!BYPASS_EMBEDDING_AND_RETRIEVAL) { await embeddingModelUpdateHandler(); @@ -220,6 +226,9 @@ document_intelligence_config: { key: documentIntelligenceKey, endpoint: documentIntelligenceEndpoint + }, + mistral_ocr_config: { + api_key: mistralApiKey } } }); @@ -284,6 +293,8 @@ documentIntelligenceEndpoint = res.content_extraction.document_intelligence_config.endpoint; documentIntelligenceKey = res.content_extraction.document_intelligence_config.key; showDocumentIntelligenceConfig = contentExtractionEngine === 'document_intelligence'; + mistralApiKey = res.content_extraction.mistral_ocr_config.api_key; + showMistralOcrConfig = contentExtractionEngine === 'mistral_ocr'; fileMaxSize = res?.file.max_size ?? ''; fileMaxCount = res?.file.max_count ?? ''; @@ -335,21 +346,21 @@
-
+
-
+
{$i18n.t('Content Extraction Engine')}
-
@@ -378,12 +389,18 @@ placeholder={$i18n.t('Enter Document Intelligence Endpoint')} bind:value={documentIntelligenceEndpoint} /> -
+ {:else if contentExtractionEngine === 'mistral_ocr'} +
+ +
{/if}
From b652b8e5f35cd948cffda27b77e2a6c7940fae6d Mon Sep 17 00:00:00 2001 From: Alex <70099710+Xelaph@users.noreply.github.com> Date: Tue, 1 Apr 2025 14:25:04 +0200 Subject: [PATCH 017/129] Update translation.json --- src/lib/i18n/locales/nl-NL/translation.json | 370 ++++++++++---------- 1 file changed, 185 insertions(+), 185 deletions(-) diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 342aac6a28b..54b3722f922 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -1,22 +1,22 @@ { - "-1 for no limit, or a positive integer for a specific limit": "", + "-1 for no limit, or a positive integer for a specific limit": "-1 voor geen limiet, of een positief getal voor een specifiek limiet", "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w', of '-1' for geen vervaldatum.", "(e.g. `sh webui.sh --api --api-auth username_password`)": "(bv. `sh webui.sh --api --api-auth gebruikersnaam_wachtwoord`)", "(e.g. `sh webui.sh --api`)": "(bv. `sh webui.sh --api`)", "(latest)": "(nieuwste)", - "(Ollama)": "", + "(Ollama)": "(Ollama)", "{{ models }}": "{{ modellen }}", - "{{COUNT}} Available Tool Servers": "", - "{{COUNT}} hidden lines": "", - "{{COUNT}} Replies": "", + "{{COUNT}} Available Tool Servers": "{{COUNT}} beschikbare gereedschapservers", + "{{COUNT}} hidden lines": "{{COUNT}} verborgen regels", + "{{COUNT}} Replies": "{{COUNT}} antwoorden", "{{user}}'s Chats": "{{user}}'s chats", - "{{webUIName}} Backend Required": "{{webUIName}} Backend Verplicht", + "{{webUIName}} Backend Required": "{{webUIName}} Backend verplicht", "*Prompt node ID(s) are required for image generation": "*Prompt node ID('s) zijn vereist voor het genereren van afbeeldingen", "A new version (v{{LATEST_VERSION}}) is now available.": "Een nieuwe versie (v{{LATEST_VERSION}}) is nu beschikbaar", "A task model is used when performing tasks such as generating titles for chats and web search queries": "Een taakmodel wordt gebruikt bij het uitvoeren van taken zoals het genereren van titels voor chats en zoekopdrachten op het internet", "a user": "een gebruiker", "About": "Over", - "Accept autocomplete generation / Jump to prompt variable": "", + "Accept autocomplete generation / Jump to prompt variable": "Accepteer het genereren van automatisch aanvullen / Spring naar promptvariabele", "Access": "Toegang", "Access Control": "Toegangsbeheer", "Accessible to all users": "Toegankelijk voor alle gebruikers", @@ -24,7 +24,7 @@ "Account Activation Pending": "Accountactivatie in afwachting", "Accurate information": "Accurate informatie", "Actions": "Acties", - "Activate": "", + "Activate": "Activeren", "Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Activeer dit commando door \"/{{COMMAND}}\" in de chat te typen", "Active Users": "Actieve gebruikers", "Add": "Toevoegen", @@ -40,7 +40,7 @@ "Add Group": "Voeg groep toe", "Add Memory": "Voeg geheugen toe", "Add Model": "Voeg model toe", - "Add Reaction": "", + "Add Reaction": "Voeg reactie toe", "Add Tag": "Voeg tag toe", "Add Tags": "Voeg tags toe", "Add text content": "Voeg tekstinhoud toe", @@ -54,35 +54,35 @@ "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Beheerders hebben altijd toegang tot alle gereedschappen; gebruikers moeten gereedschap toegewezen krijgen per model in de werkruimte.", "Advanced Parameters": "Geavanceerde parameters", "Advanced Params": "Geavanceerde params", - "All": "", + "All": "Alle", "All Documents": "Alle documenten", "All models deleted successfully": "Alle modellen zijn succesvol verwijderd", - "Allow Chat Controls": "", - "Allow Chat Delete": "Sta chatverwijdering toe", - "Allow Chat Deletion": "Sta chatverwijdering toe", - "Allow Chat Edit": "Sta chatwijziging toe", - "Allow File Upload": "Sta bestandenupload toe", + "Allow Chat Controls": "Chatbesturing toestaan", + "Allow Chat Delete": "Chatverwijdering toestaan", + "Allow Chat Deletion": "Chatverwijdering toestaan", + "Allow Chat Edit": "Chatwijziging toestaan", + "Allow File Upload": "Bestandenupload toestaan", "Allow non-local voices": "Niet-lokale stemmen toestaan", "Allow Temporary Chat": "Tijdelijke chat toestaan", "Allow User Location": "Gebruikerslocatie toestaan", "Allow Voice Interruption in Call": "Stemonderbreking tijdens gesprek toestaan", - "Allowed Endpoints": "", + "Allowed Endpoints": "Endpoints toestaan", "Already have an account?": "Heb je al een account?", - "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "", - "Always": "", - "Always Collapse Code Blocks": "", - "Always Expand Details": "", + "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "Alternatief voor top_p, en streeft naar een evenwicht tussen kwaliteit en variatie. De parameter p vertegenwoordigt de minimumwaarschijnlijkheid dat een token in aanmerking wordt genomen, in verhouding tot de waarschijnlijkheid van het meest waarschijnlijke token. Bijvoorbeeld, met p=0,05 en het meest waarschijnlijke token met een waarschijnlijkheid van 0,9, worden logits met een waarde kleiner dan 0,045 uitgefilterd.", + "Always": "Altijd", + "Always Collapse Code Blocks": "Codeblokken altijd inklappen", + "Always Expand Details": "Details altijd uitklappen", "Amazing": "Geweldig", "an assistant": "een assistent", - "Analyzed": "", - "Analyzing...": "", + "Analyzed": "Geanalyseerd", + "Analyzing...": "Aan het analysiseren...", "and": "en", "and {{COUNT}} more": "en {{COUNT}} meer", "and create a new shared link.": "en maak een nieuwe gedeelde link.", "API Base URL": "API Base URL", "API Key": "API-sleutel", "API Key created.": "API-sleutel aangemaakt.", - "API Key Endpoint Restrictions": "", + "API Key Endpoint Restrictions": "API-sleutel endpoint-beperkingen", "API keys": "API-sleutels", "Application DN": "Applicatie DN", "Application DN Password": "Applicatie", @@ -92,34 +92,34 @@ "Archive All Chats": "Archiveer alle chats", "Archived Chats": "Chatrecord", "archived-chat-export": "gearchiveerde-chat-export", - "Are you sure you want to clear all memories? This action cannot be undone.": "", - "Are you sure you want to delete this channel?": "", - "Are you sure you want to delete this message?": "", + "Are you sure you want to clear all memories? This action cannot be undone.": "Weet je zeker dat je alle herinneringen wil verwijderen? Deze actie kan niet ongedaan worden gemaakt.", + "Are you sure you want to delete this channel?": "Weet je zeker dat je dit kanaal wil verwijderen?", + "Are you sure you want to delete this message?": "Weet je zeker dat je dit bericht wil verwijderen?", "Are you sure you want to unarchive all archived chats?": "Weet je zeker dat je alle gearchiveerde chats wil onarchiveren?", "Are you sure?": "Weet je het zeker?", "Arena Models": "Arenamodellen", "Artifacts": "Artefacten", - "Ask": "", + "Ask": "Vraag", "Ask a question": "Stel een vraag", "Assistant": "Assistent", - "Attach file from knowledge": "", + "Attach file from knowledge": "Voeg bestand uit kennis toe", "Attention to detail": "Attention to detail", - "Attribute for Mail": "", + "Attribute for Mail": "Attribuut voor mail", "Attribute for Username": "Attribuut voor gebruikersnaam", "Audio": "Audio", "August": "Augustus", "Authenticate": "Authenticeer", - "Authentication": "", + "Authentication": "Authenticatie", "Auto-Copy Response to Clipboard": "Antwoord automatisch kopiëren naar klembord", "Auto-playback response": "Automatisch afspelen van antwoord", - "Autocomplete Generation": "", - "Autocomplete Generation Input Max Length": "", + "Autocomplete Generation": "Automatische aanvullingsgeneratie", + "Autocomplete Generation Input Max Length": "Maximale invoerlengte voor automatische aanvullingsgeneratie", "Automatic1111": "Automatic1111", "AUTOMATIC1111 Api Auth String": "Automatic1111 Api Auth String", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Basis-URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Basis-URL is verplicht", "Available list": "Beschikbare lijst", - "Available Tool Servers": "", + "Available Tool Servers": "Beschikbare gereedschapservers", "available!": "beschikbaar!", "Awful": "Verschrikkelijk", "Azure AI Speech": "Azure AI-spraak", @@ -131,28 +131,28 @@ "Batch Size (num_batch)": "Batchgrootte (num_batch)", "before": "voor", "Being lazy": "Lui zijn", - "Beta": "", + "Beta": "Beta", "Bing Search V7 Endpoint": "Bing Search V7 Endpoint", "Bing Search V7 Subscription Key": "Bing Search V7 Subscription Key", - "Bocha Search API Key": "", - "Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "", + "Bocha Search API Key": ""Bocha Search API-sleutel, + "Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "Versterken of bestraffen van specifieke tokens voor beperkte reacties. Biaswaarden worden geklemd tussen -100 en 100 (inclusief). (Standaard: none)", "Brave Search API Key": "Brave Search API-sleutel", "By {{name}}": "Op {{name}}", - "Bypass Embedding and Retrieval": "", + "Bypass Embedding and Retrieval": "Embedding en ophalen omzeilen ", "Bypass SSL verification for Websites": "SSL-verificatie omzeilen voor websites", - "Calendar": "", + "Calendar": "Agenda", "Call": "Oproep", "Call feature is not supported when using Web STT engine": "Belfunctie wordt niet ondersteund bij gebruik van de Web STT engine", "Camera": "Camera", "Cancel": "Annuleren", "Capabilities": "Mogelijkheden", - "Capture": "", + "Capture": "Vangen", "Certificate Path": "Certificaatpad", "Change Password": "Wijzig Wachtwoord", - "Channel Name": "", - "Channels": "", + "Channel Name": "Kanaalnaam", + "Channels": "Kanalen", "Character": "Karakter", - "Character limit for autocomplete generation input": "", + "Character limit for autocomplete generation input": "Karakterlimiet voor automatische generatieinvoer", "Chart new frontiers": "Verken nieuwe grenzen", "Chat": "Chat", "Chat Background Image": "Chatachtergrond", @@ -172,14 +172,14 @@ "Ciphers": "Versleutelingen", "Citation": "Citaat", "Clear memory": "Geheugen wissen", - "Clear Memory": "", + "Clear Memory": "Geheugen wissen", "click here": "klik hier", "Click here for filter guides.": "Klik hier voor filterhulp", "Click here for help.": "Klik hier voor hulp.", "Click here to": "Klik hier om", "Click here to download user import template file.": "Klik hier om het sjabloonbestand voor gebruikersimport te downloaden.", "Click here to learn more about faster-whisper and see the available models.": "Klik hier om meer te leren over faster-whisper en de beschikbare modellen te bekijken.", - "Click here to see available models.": "", + "Click here to see available models.": "Klik hier om beschikbare modellen te zien", "Click here to select": "Klik hier om te selecteren", "Click here to select a csv file.": "Klik hier om een csv file te selecteren.", "Click here to select a py file.": "Klik hier om een py-bestand te selecteren.", @@ -188,22 +188,22 @@ "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.": "Klembord schrijftoestemming geweigerd. Kijk je browserinstellingen na om de benodigde toestemming te geven.", "Clone": "Kloon", - "Clone Chat": "", - "Clone of {{TITLE}}": "", + "Clone Chat": "Kloon chat", + "Clone of {{TITLE}}": "Kloon van {{TITLE}}", "Close": "Sluiten", "Code execution": "Code uitvoeren", - "Code Execution": "", - "Code Execution Engine": "", - "Code Execution Timeout": "", + "Code Execution": "Code-uitvoer", + "Code Execution Engine": "Code-uitvoer engine", + "Code Execution Timeout": "Code-uitvoer time-out", "Code formatted successfully": "Code succesvol geformateerd", - "Code Interpreter": "", - "Code Interpreter Engine": "", - "Code Interpreter Prompt Template": "", - "Collapse": "", + "Code Interpreter": "Code-interpretatie", + "Code Interpreter Engine": "Code-interpretatie engine", + "Code Interpreter Prompt Template": "Code-interpretatie promptsjabloon", + "Collapse": "Inklappen", "Collection": "Verzameling", "Color": "Kleur", "ComfyUI": "ComfyUI", - "ComfyUI API Key": "", + "ComfyUI API Key": "ComfyUI API-sleutel", "ComfyUI Base URL": "ComfyUI Base URL", "ComfyUI Base URL is required.": "ComfyUI Base URL is required.", "ComfyUI Workflow": "ComfyUI workflow", @@ -214,24 +214,24 @@ "Configure": "Configureer", "Confirm": "Bevestigen", "Confirm Password": "Bevestig wachtwoord", - "Confirm your action": "Bevestig uw actie", - "Confirm your new password": "", - "Connect to your own OpenAI compatible API endpoints.": "", - "Connect to your own OpenAPI compatible external tool servers.": "", + "Confirm your action": "Bevestig je actie", + "Confirm your new password": "Bevestig je nieuwe wachtwoord", + "Connect to your own OpenAI compatible API endpoints.": "Verbind met je eigen OpenAI-compatibele API-endpoints", + "Connect to your own OpenAPI compatible external tool servers.": "Verbind met je eigen OpenAPI-compatibele externe gereedschapservers", "Connections": "Verbindingen", - "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "", + "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "Beperkt de redeneerinspanning voor redeneermodellen. Alleen van toepassing op redeneermodellen van specifieke providers die redeneerinspanning ondersteunen.", "Contact Admin for WebUI Access": "Neem contact op met de beheerder voor WebUI-toegang", "Content": "Inhoud", - "Content Extraction Engine": "", + "Content Extraction Engine": "Inhoudsextractie engine", "Context Length": "Contextlengte", "Continue Response": "Doorgaan met antwoord", "Continue with {{provider}}": "Ga verder met {{provider}}", "Continue with Email": "Ga door met E-mail", "Continue with LDAP": "Ga door met LDAP", "Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "Bepaal hoe berichttekst wordt opgesplitst voor TTS-verzoeken. 'Leestekens' splitst op in zinnen, 'alinea's' splitst op in paragrafen en 'geen' houdt het bericht als een enkele string.", - "Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled.": "", + "Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled.": "Controleer de herhaling van tokenreeksen in de gegenereerde tekst. Een hogere waarde (bijv. 1,5) zal herhalingen sterker bestraffen, terwijl een lagere waarde (bijv. 1,1) milder zal zijn. Bij 1 is het uitgeschakeld.", "Controls": "Besturingselementen", - "Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "", + "Controls the balance between coherence and diversity of thEnable Mirostat sampling for controlling perplexity.e output. A lower value will result in more focused and coherent text.": "Regelt de balans tussen coherentie en diversiteit van de uitvoer. Een lagere waarde resulteert in een meer gerichte en coherente tekst.", "Copied": "Gekopieerd", "Copied shared chat URL to clipboard!": "URL van gedeelde gesprekspagina gekopieerd naar klembord!", "Copied to clipboard": "Gekopieerd naar klembord", @@ -241,13 +241,13 @@ "Copy Link": "Kopieer link", "Copy to clipboard": "Kopier naar klembord", "Copying to clipboard was successful!": "Kopiëren naar klembord was succesvol!", - "CORS must be properly configured by the provider to allow requests from Open WebUI.": "", + "CORS must be properly configured by the provider to allow requests from Open WebUI.": "CORS moet goed geconfigureerd zijn bij de provider om verzoeken van Open WebUI toe te staan", "Create": "Aanmaken", "Create a knowledge base": "Maak een kennisbasis aan", "Create a model": "Een model maken", "Create Account": "Maak account", "Create Admin Account": "Maak admin-account", - "Create Channel": "", + "Create Channel": "Maak kanaal", "Create Group": "Maak groep", "Create Knowledge": "Creër kennis", "Create new key": "Maak nieuwe sleutel", @@ -256,18 +256,18 @@ "Created At": "Gemaakt op", "Created by": "Gemaakt door", "CSV Import": "CSV import", - "Ctrl+Enter to Send": "", + "Ctrl+Enter to Send": "Ctrl+Enter om te sturen", "Current Model": "Huidig model", "Current Password": "Huidig wachtwoord", "Custom": "Aangepast", - "Danger Zone": "", + "Danger Zone": "Gevarenzone", "Dark": "Donker", "Database": "Database", "December": "December", "Default": "Standaard", "Default (Open AI)": "Standaard (Open AI)", "Default (SentenceTransformers)": "Standaard (SentenceTransformers)", - "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model’s built-in tool-calling capabilities, but requires the model to inherently support this feature.": "", + "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model’s built-in tool-calling capabilities, but requires the model to inherently support this feature.": "De standaardmodus werkt met een breder scala aan modellen door gereedschappen één keer aan te roepen voordat ze worden uitgevoerd. De native modus maakt gebruik van de ingebouwde mogelijkheden van het model om gereedschappen aan te roepen, maar vereist dat het model deze functie inherent ondersteunt.", "Default Model": "Standaardmodel", "Default model updated": "Standaardmodel bijgewerkt", "Default Models": "Standaardmodellen", @@ -275,8 +275,8 @@ "Default permissions updated successfully": "Standaardrechten succesvol bijgewerkt", "Default Prompt Suggestions": "Standaard Prompt Suggesties", "Default to 389 or 636 if TLS is enabled": "Standaard 389 of 636 als TLS is ingeschakeld", - "Default to ALL": "Standaar op ALL", - "Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "", + "Default to ALL": "Standaard op ALL", + "Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.": "Standaard gesegmenteerd ophalen voor gerichte en relevante inhoudsextractie, dit wordt aanbevolen voor de meeste gevallen.", "Default User Role": "Standaard gebruikersrol", "Delete": "Verwijderen", "Delete a model": "Verwijder een model", @@ -287,8 +287,8 @@ "Delete chat?": "Verwijder chat?", "Delete folder?": "Verwijder map?", "Delete function?": "Verwijder functie?", - "Delete Message": "", - "Delete message?": "", + "Delete Message": "Verwijder bericht", + "Delete message?": "Verwijder bericht", "Delete prompt?": "Verwijder prompt?", "delete this link": "verwijder deze link", "Delete tool?": "Verwijder tool?", @@ -299,16 +299,16 @@ "Describe your knowledge base and objectives": "Beschrijf je kennisbasis en doelstellingen", "Description": "Beschrijving", "Didn't fully follow instructions": "Heeft niet alle instructies gevolgt", - "Direct": "", - "Direct Connections": "", - "Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "", - "Direct Connections settings updated": "", + "Direct": "Direct", + "Direct Connections": "Directe verbindingen", + "Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Directe verbindingen stellen gebruikers in staat om met hun eigen OpenAI compatibele API-endpoints te verbinden.", + "Direct Connections settings updated": "Directe verbindingsopties bijgewerkt", "Disabled": "Uitgeschakeld", "Discover a function": "Ontdek een functie", "Discover a model": "Ontdek een model", "Discover a prompt": "Ontdek een prompt", "Discover a tool": "Ontdek een tool", - "Discover how to use Open WebUI and seek support from the community.": "", + "Discover how to use Open WebUI and seek support from the community.": "Ontdek hoe je Open WebUI gebruikt en zoek ondersteuning van de community.", "Discover wonders": "Ontdek wonderen", "Discover, download, and explore custom functions": "Ontdek, download en verken aangepaste functies", "Discover, download, and explore custom prompts": "Ontdek, download en verken aangepaste prompts", @@ -322,15 +322,15 @@ "Dive into knowledge": "Duik in kennis", "Do not install functions from sources you do not fully trust.": "Installeer geen functies vanuit bronnen die je niet volledig vertrouwt", "Do not install tools from sources you do not fully trust.": "Installeer geen tools vanuit bronnen die je niet volledig vertrouwt.", - "Docling": "", - "Docling Server URL required.": "", + "Docling": "Docling", + "Docling Server URL required.": "Docling server-URL benodigd", "Document": "Document", - "Document Intelligence": "", - "Document Intelligence endpoint and key required.": "", + "Document Intelligence": "Document Intelligence", + "Document Intelligence endpoint and key required.": "Document Intelligence-endpoint en -sleutel benodigd", "Documentation": "Documentatie", "Documents": "Documenten", "does not make any external connections, and your data stays securely on your locally hosted server.": "maakt geen externe verbindingen, en je gegevens blijven veilig op je lokaal gehoste server.", - "Domain Filter List": "", + "Domain Filter List": "Domein-filterlijst", "Don't have an account?": "Heb je geen account?", "don't install random functions from sources you don't trust.": "installeer geen willekeurige functies van bronnen die je niet vertrouwd", "don't install random tools from sources you don't trust.": "installeer geen willekeurige gereedschappen van bronnen die je niet vertrouwd", @@ -344,8 +344,8 @@ "Draw": "Teken", "Drop any files here to add to the conversation": "Sleep hier bestanden om toe te voegen aan het gesprek", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "bijv. '30s', '10m'. Geldige tijdseenheden zijn 's', 'm', 'h'.", - "e.g. \"json\" or a JSON schema": "", - "e.g. 60": "", + "e.g. \"json\" or a JSON schema": "bijv. \"json\" of een JSON-schema", + "e.g. 60": "bijv. 60", "e.g. A filter to remove profanity from text": "bijv. Een filter om gevloek uit tekst te verwijderen", "e.g. My Filter": "bijv. Mijn filter", "e.g. My Tools": "bijv. Mijn gereedschappen", @@ -354,32 +354,32 @@ "e.g. Tools for performing various operations": "Gereedschappen om verschillende bewerkingen uit te voeren", "Edit": "Wijzig", "Edit Arena Model": "Bewerk arenamodel", - "Edit Channel": "", + "Edit Channel": "Bewerk kanaal", "Edit Connection": "Bewerk connectie", - "Edit Default Permissions": "Standaardrechten bewerken", + "Edit Default Permissions": "Bewerk standaardrechten", "Edit Memory": "Bewerk geheugen", "Edit User": "Wijzig gebruiker", "Edit User Group": "Bewerk gebruikergroep", "ElevenLabs": "ElevenLabs", "Email": "E-mail", "Embark on adventures": "Ga op avonturen", - "Embedding": "", + "Embedding": "Embedding", "Embedding Batch Size": "Embedding batchgrootte", "Embedding Model": "Embedding Model", "Embedding Model Engine": "Embedding Model Engine", "Embedding model set to \"{{embedding_model}}\"": "Embedding model ingesteld op \"{{embedding_model}}\"", - "Enable API Key": "", - "Enable autocomplete generation for chat messages": "", - "Enable Code Execution": "", - "Enable Code Interpreter": "", + "Enable API Key": "API-sleutel inschakelen", + "Enable autocomplete generation for chat messages": "Automatische aanvullingsgeneratie voor chatberichten inschakelen", + "Enable Code Execution": "Code-uitvoer inschakelen", + "Enable Code Interpreter": "Code-interpretatie inschakelen", "Enable Community Sharing": "Delen via de community inschakelen", "Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "Schakel Memory Locking (mlock) in om te voorkomen dat modelgegevens uit het RAM worden verwisseld. Deze optie vergrendelt de werkset pagina's van het model in het RAM, zodat ze niet naar de schijf worden uitgewisseld. Dit kan helpen om de prestaties op peil te houden door paginafouten te voorkomen en snelle gegevenstoegang te garanderen.", "Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "Schakel Memory Mapping (mmap) in om modelgegevens te laden. Deze optie laat het systeem schijfopslag gebruiken als een uitbreiding van RAM door schijfbestanden te behandelen alsof ze in RAM zitten. Dit kan de prestaties van het model verbeteren door snellere gegevenstoegang mogelijk te maken. Het is echter mogelijk dat deze optie niet op alle systemen correct werkt en een aanzienlijke hoeveelheid schijfruimte in beslag kan nemen.", "Enable Message Rating": "Schakel berichtbeoordeling in", - "Enable Mirostat sampling for controlling perplexity.": "", + "Enable Mirostat sampling for controlling perplexity.": "Mirostat-sampling in om perplexiteit te controleren inschakelen.", "Enable New Sign Ups": "Schakel nieuwe registraties in", "Enabled": "Ingeschakeld", - "Enforce Temporary Chat": "", + "Enforce Temporary Chat": "Tijdelijke chat afdwingen", "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 zodat LLM's het kunnen onthouden", @@ -388,37 +388,37 @@ "Enter Application DN Password": "Voer applicatie-DN wachtwoord in", "Enter Bing Search V7 Endpoint": "Voer Bing Search V7 Endpoint in", "Enter Bing Search V7 Subscription Key": "Voer Bing Search V7 abonnementscode in", - "Enter Bocha Search API Key": "", + "Enter Bocha Search API Key": "Voer Bocha Search API-sleutel in", "Enter Brave Search API Key": "Voer de Brave Search API-sleutel in", "Enter certificate path": "Voer certificaatpad in", "Enter CFG Scale (e.g. 7.0)": "Voer CFG schaal in (bv. 7.0)", "Enter Chunk Overlap": "Voeg Chunk Overlap toe", "Enter Chunk Size": "Voeg Chunk Size toe", - "Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "", + "Enter comma-seperated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Voer kommagescheiden \"token:bias_waarde\" paren in (bijv. 5432:100, 413:-100)", "Enter description": "Voer beschrijving in", - "Enter Docling Server URL": "", - "Enter Document Intelligence Endpoint": "", - "Enter Document Intelligence Key": "", - "Enter domains separated by commas (e.g., example.com,site.org)": "", - "Enter Exa API Key": "", + "Enter Docling Server URL": "Voer Docling Server-URL in", + "Enter Document Intelligence Endpoint": "Voer Document Intelligence endpoint in", + "Enter Document Intelligence Key": "Voer Document Intelligence sleutel in", + "Enter domains separated by commas (e.g., example.com,site.org)": "Voer domeinen in gescheiden met komma's (bijv., voorbeeld.com,site.org)", + "Enter Exa API Key": "Voer Exa API-sleutel in", "Enter Github Raw URL": "Voer de Github Raw-URL in", "Enter Google PSE API Key": "Voer de Google PSE API-sleutel in", "Enter Google PSE Engine Id": "Voer Google PSE Engine-ID in", "Enter Image Size (e.g. 512x512)": "Voeg afbeelding formaat toe (Bijv. 512x512)", "Enter Jina API Key": "Voer Jina API-sleutel in", - "Enter Jupyter Password": "", - "Enter Jupyter Token": "", - "Enter Jupyter URL": "", - "Enter Kagi Search API Key": "", - "Enter Key Behavior": "", - "Enter language codes": "Voeg taal codes toe", + "Enter Jupyter Password": "Voer Jupyter-wachtwoord in", + "Enter Jupyter Token": "Voer Jupyter-token in", + "Enter Jupyter URL": "Voer Jupyter-URL in", + "Enter Kagi Search API Key": "Voer Kagi Search API-sleutel in", + "Enter Key Behavior": "Voer sleutelgedrag in", + "Enter language codes": "Voeg taalcodes toe", "Enter Model ID": "Voer model-ID in", "Enter model tag (e.g. {{modelTag}})": "Voeg model-tag toe (Bijv. {{modelTag}})", "Enter Mojeek Search API Key": "Voer Mojeek Search API-sleutel in", "Enter Number of Steps (e.g. 50)": "Voeg aantal stappen toe (Bijv. 50)", - "Enter Perplexity API Key": "", - "Enter proxy URL (e.g. https://user:password@host:port)": "", - "Enter reasoning effort": "", + "Enter Perplexity API Key": "Voer Perplexity API-sleutel in", + "Enter proxy URL (e.g. https://user:password@host:port)": "Voer proxy-URL in (bijv. https://gebruiker:wachtwoord@host:port)", + "Enter reasoning effort": "Voer redeneerinspanning in", "Enter Sampler (e.g. Euler a)": "Voer Sampler in (bv. Euler a)", "Enter Scheduler (e.g. Karras)": "Voer Scheduler in (bv. Karras)", "Enter Score": "Voeg score toe", @@ -426,8 +426,8 @@ "Enter SearchApi Engine": "Voer SearchApi-Engine in", "Enter Searxng Query URL": "Voer de URL van de Searxng-query in", "Enter Seed": "Voer Seed in", - "Enter SerpApi API Key": "", - "Enter SerpApi Engine": "", + "Enter SerpApi API Key": "Voer SerpApi API-sleutel in", + "Enter SerpApi Engine": "Voer SerpApi-engine in", "Enter Serper API Key": "Voer de Serper API-sleutel in", "Enter Serply API Key": "Voer Serply API-sleutel in", "Enter Serpstack API Key": "Voer de Serpstack API-sleutel in", @@ -437,42 +437,42 @@ "Enter stop sequence": "Voer stopsequentie in", "Enter system prompt": "Voer systeem prompt in", "Enter Tavily API Key": "Voer Tavily API-sleutel in", - "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "", + "Enter the public URL of your WebUI. This URL will be used to generate links in the notifications.": "Voer de publieke URL van je WebUI in. Deze URL wordt gebruikt om links in de notificaties te maken.", "Enter Tika Server URL": "Voer Tika Server URL in", - "Enter timeout in seconds": "", - "Enter to Send": "", + "Enter timeout in seconds": "Voer time-out in seconden in", + "Enter to Send": "Enter om te sturen", "Enter Top K": "Voeg Top K toe", - "Enter Top K Reranker": "", + "Enter Top K Reranker": "Voer Tok K reranker in", "Enter URL (e.g. http://127.0.0.1:7860/)": "Voer URL in (Bijv. http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "Voer URL in (Bijv. http://localhost:11434)", - "Enter your current password": "", + "Enter your current password": "Voer je huidige wachtwoord in", "Enter Your Email": "Voer je Email in", "Enter Your Full Name": "Voer je Volledige Naam in", "Enter your message": "Voer je bericht in", - "Enter your new password": "", - "Enter Your Password": "Voer je Wachtwoord in", - "Enter Your Role": "Voer je Rol in", + "Enter your new password": "Voer je nieuwe wachtwoord in", + "Enter Your Password": "Voer je wachtwoord in", + "Enter Your Role": "Voer je rol in", "Enter Your Username": "Voer je gebruikersnaam in", - "Enter your webhook URL": "", + "Enter your webhook URL": "Voer je webhook-URL in", "Error": "Fout", "ERROR": "ERROR", - "Error accessing Google Drive: {{error}}": "", - "Error uploading file: {{error}}": "", + "Error accessing Google Drive: {{error}}": "Fout bij het benaderen van Google Drive: {{error}}", + "Error uploading file: {{error}}": "Error bij het uploaden van bestand: {{error}}", "Evaluations": "Beoordelingen", - "Exa API Key": "", + "Exa API Key": "Exa API-sleutel", "Example: (&(objectClass=inetOrgPerson)(uid=%s))": "Voorbeeld: (&(objectClass=inetOrgPerson)(uid=%s))", "Example: ALL": "Voorbeeld: ALL", - "Example: mail": "", + "Example: mail": "Voorbeeld: mail", "Example: ou=users,dc=foo,dc=example": "Voorbeeld: ou=users,dc=foo,dc=example", "Example: sAMAccountName or uid or userPrincipalName": "Voorbeeld: sAMAccountName or uid or userPrincipalName", - "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "", + "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Het aantal seats in uw licentie is overschreden. Neem contact op met support om het aantal seats te verhogen.", "Exclude": "Sluit uit", - "Execute code for analysis": "", - "Executing `{{NAME}}`...": "", - "Expand": "", + "Execute code for analysis": "Voer code uit voor analyse", + "Executing `{{NAME}}`...": "`{{NAME}}`... aan het uitvoeren", + "Expand": "Uitbreiden", "Experimental": "Experimenteel", - "Explain": "", - "Explain this section to me in more detail": "", + "Explain": "Leg uit", + "Explain this section to me in more detail": "Leg me dit gedeelte in meer detail uit", "Explore the cosmos": "Ontdek de kosmos", "Export": "Exporteren", "Export All Archived Chats": "Exporteer alle gearchiveerde chats", @@ -486,18 +486,18 @@ "Export Prompts": "Exporteer Prompts", "Export to CSV": "Exporteer naar CSV", "Export Tools": "Exporteer gereedschappen", - "External": "", + "External": "Extern", "External Models": "Externe modules", "Failed to add file.": "Het is niet gelukt om het bestand toe te voegen.", - "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to connect to {{URL}} OpenAPI tool server": "Kan geen verbinding maken met {{URL}} OpenAPI gereedschapserver", "Failed to create API Key.": "Kan API Key niet aanmaken.", - "Failed to fetch models": "", + "Failed to fetch models": "Kan modellen niet ophalen", "Failed to read clipboard contents": "Kan klembord inhoud niet lezen", "Failed to save models configuration": "Het is niet gelukt om de modelconfiguratie op te slaan", "Failed to update settings": "Instellingen konden niet worden bijgewerkt.", "Failed to upload file.": "Bestand kon niet worden geüpload.", - "Features": "", - "Features Permissions": "", + "Features": "Functies", + "Features Permissions": "Functietoestemmingen", "February": "Februari", "Feedback History": "Feedback geschiedenis", "Feedbacks": "Feedback", @@ -509,7 +509,7 @@ "File not found.": "Bestand niet gevonden.", "File removed successfully.": "Bestand succesvol verwijderd.", "File size should not exceed {{maxSize}} MB.": "Bestandsgrootte mag niet groter zijn dan {{maxSize}} MB.", - "File uploaded successfully": "", + "File uploaded successfully": "Bestand succesvol upgeload", "Files": "Bestanden", "Filter is now globally disabled": "Filter is nu globaal uitgeschakeld", "Filter is now globally enabled": "Filter is nu globaal ingeschakeld", @@ -541,19 +541,19 @@ "Functions allow arbitrary code execution": "Functies staan willekeurige code-uitvoering toe", "Functions allow arbitrary code execution.": "Functies staan willekeurige code-uitvoering toe", "Functions imported successfully": "Functies succesvol geïmporteerd", - "Gemini": "", - "Gemini API Config": "", - "Gemini API Key is required.": "", + "Gemini": "Gemini", + "Gemini API Config": "Gemini API-configuratie", + "Gemini API Key is required.": "Gemini API-sleutel is vereisd", "General": "Algemeen", - "Generate an image": "", + "Generate an image": "Genereer een afbeelding", "Generate Image": "Genereer afbeelding", - "Generate prompt pair": "", + "Generate prompt pair": "Genereer promptpaar", "Generating search query": "Zoekopdracht genereren", "Get started": "Begin", "Get started with {{WEBUI_NAME}}": "Begin met {{WEBUI_NAME}}", "Global": "Globaal", "Good Response": "Goed antwoord", - "Google Drive": "", + "Google Drive": "Google Drive", "Google PSE API Key": "Google PSE API-sleutel", "Google PSE Engine Id": "Google PSE-engine-ID", "Group created successfully": "Groep succesvol aangemaakt", @@ -570,8 +570,8 @@ "Hex Color": "Hex-kleur", "Hex Color - Leave empty for default color": "Hex-kleur - laat leeg voor standaardkleur", "Hide": "Verberg", - "Hide Model": "", - "Home": "", + "Hide Model": "Verberg model", + "Home": "Thuis", "Host": "Host", "How can I help you today?": "Hoe kan ik je vandaag helpen?", "How would you rate this response?": "Hoe zou je dit antwoord beoordelen?", @@ -579,14 +579,14 @@ "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.": "Ik bevestig dat ik de implicaties van mijn actie heb gelezen en begrepen. Ik ben me bewust van de risico's die gepaard gaan met het uitvoeren van willekeurige code en ik heb de betrouwbaarheid van de bron gecontroleerd.", "ID": "ID", "Ignite curiosity": "Wakker nieuwsgierigheid aan", - "Image": "", - "Image Compression": "", - "Image Generation": "", + "Image": "Afbeelding", + "Image Compression": "Afbeeldingscompressie", + "Image Generation": "Afbeeldingsgeneratie", "Image Generation (Experimental)": "Afbeeldingsgeneratie (Experimenteel)", "Image Generation Engine": "Afbeeldingsgeneratie Engine", - "Image Max Compression Size": "", - "Image Prompt Generation": "", - "Image Prompt Generation Prompt": "", + "Image Max Compression Size": "Maximale afbeeldingscompressiegrootte", + "Image Prompt Generation": "Afbeeldingspromptgeneratie", + "Image Prompt Generation Prompt": "Afbeeldingspromptgeneratie prompt", "Image Settings": "Afbeeldingsinstellingen", "Images": "Afbeeldingen", "Import Chats": "Importeer Chats", @@ -599,18 +599,18 @@ "Include": "Voeg toe", "Include `--api-auth` flag when running stable-diffusion-webui": "Voeg '--api-auth` toe bij het uitvoeren van stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Voeg `--api` vlag toe bij het uitvoeren van stable-diffusion-webui", - "Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "", + "Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "Beïnvloedt hoe snel het algoritme reageert op feedback van de gegenereerde tekst. Een lagere leersnelheid resulteert in langzamere aanpassingen, terwijl een hogere leersnelheid het algoritme responsiever maakt.", "Info": "Info", - "Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "", + "Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "Injecteer de volledige inhoud als context voor uitgebreide verwerking, dit wordt aanbevolen voor complexe query's.", "Input commands": "Voer commando's in", "Install from Github URL": "Installeren vanaf Github-URL", "Instant Auto-Send After Voice Transcription": "Direct automatisch verzenden na spraaktranscriptie", - "Integration": "", + "Integration": "Integratie", "Interface": "Interface", "Invalid file format.": "Ongeldig bestandsformaat", - "Invalid JSON schema": "", + "Invalid JSON schema": "Ongeldig JSON-schema", "Invalid Tag": "Ongeldige Tag", - "is typing...": "", + "is typing...": "is aan het schrijven...", "January": "Januari", "Jina API Key": "Jina API-sleutel", "join our Discord for help.": "join onze Discord voor hulp.", @@ -618,11 +618,11 @@ "JSON Preview": "JSON-voorbeeld", "July": "Juli", "June": "Juni", - "Jupyter Auth": "", - "Jupyter URL": "", + "Jupyter Auth": "Jupyter Auth", + "Jupyter URL": "Jupyter URL", "JWT Expiration": "JWT Expiration", "JWT Token": "JWT Token", - "Kagi Search API Key": "", + "Kagi Search API Key": "Kagi Search API-sleutel", "Keep Alive": "Houd Actief", "Key": "Sleutel", "Keyboard shortcuts": "Toetsenbord snelkoppelingen", @@ -630,50 +630,50 @@ "Knowledge Access": "Kennistoegang", "Knowledge created successfully.": "Kennis succesvol aangemaakt", "Knowledge deleted successfully.": "Kennis succesvol verwijderd", - "Knowledge Public Sharing": "", + "Knowledge Public Sharing": "Publieke kennisdeling", "Knowledge reset successfully.": "Kennis succesvol gereset", "Knowledge updated successfully": "Kennis succesvol bijgewerkt", - "Kokoro.js (Browser)": "", - "Kokoro.js Dtype": "", + "Kokoro.js (Browser)": "Kokoro.js (Browser)", + "Kokoro.js Dtype": "Kokoro.js Dtype", "Label": "Label", "Landing Page Mode": "Landingspaginamodus", "Language": "Taal", "Last Active": "Laatst Actief", "Last Modified": "Laatst aangepast", - "Last reply": "", + "Last reply": "Laatste antwoord", "LDAP": "LDAP", "LDAP server updated": "LDAP-server bijgewerkt", "Leaderboard": "Klassement", "Leave empty for unlimited": "Laat leeg voor ongelimiteerd", - "Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "", - "Leave empty to include all models from \"{{url}}/models\" endpoint": "", + "Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "Laat leeg om alle modellen van het \"{{url}}/api/tags\"-endpoint mee te nemen", + "Leave empty to include all models from \"{{url}}/models\" endpoint": "Laat leeg om alle modellen van \"{{url}}/models\"-endpoint mee te nemen", "Leave empty to include all models or select specific models": "Laat leeg om alle modellen mee te nemen, of selecteer specifieke modellen", "Leave empty to use the default prompt, or enter a custom prompt": "Laat leeg om de standaard prompt te gebruiken, of selecteer een aangepaste prompt", - "Leave model field empty to use the default model.": "", - "License": "", + "Leave model field empty to use the default model.": "Laat modelveld leeg om het standaardmodel te gebruiken.", + "License": "Licentie", "Light": "Licht", "Listening...": "Aan het luisteren...", - "Llama.cpp": "", + "Llama.cpp": "Llama.cpp", "LLMs can make mistakes. Verify important information.": "LLMs kunnen fouten maken. Verifieer belangrijke informatie.", - "Loader": "", - "Loading Kokoro.js...": "", + "Loader": "Lader", + "Loading Kokoro.js...": "Kokoro.js aan het laden", "Local": "Lokaal", "Local Models": "Lokale modellen", - "Location access not allowed": "", - "Logit Bias": "", + "Location access not allowed": "Locatietoegang niet toegestaan", + "Logit Bias": "Logit bias", "Lost": "Verloren", "LTR": "LNR", "Made by Open WebUI Community": "Gemaakt door OpenWebUI Community", "Make sure to enclose them with": "Zorg ervoor dat je ze omringt met", "Make sure to export a workflow.json file as API format from ComfyUI.": "Zorg ervoor dat je een workflow.json-bestand als API-formaat exporteert vanuit ComfyUI.", "Manage": "Beheren", - "Manage Direct Connections": "", - "Manage Models": "", + "Manage Direct Connections": "Beheer directe verbindingen", + "Manage Models": "Beheer modellen", "Manage Ollama": "Beheer Ollama", "Manage Ollama API Connections": "Beheer Ollama API-verbindingen", "Manage OpenAI API Connections": "Beheer OpenAI API-verbindingen", "Manage Pipelines": "Pijplijnen beheren", - "Manage Tool Servers": "", + "Manage Tool Servers": "Beheer gereedschapservers", "March": "Maart", "Max Tokens (num_predict)": "Max Tokens (num_predict)", "Max Upload Count": "Maximale Uploadhoeveelheid", @@ -700,8 +700,8 @@ "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 {{name}} is now hidden": "", - "Model {{name}} is now visible": "", + "Model {{name}} is now hidden": "Model {{naam}} is nu verborgen", + "Model {{name}} is now visible": "Model {{naam}} is nu zichtbaar", "Model accepts image inputs": "Model accepteerd afbeeldingsinvoer", "Model created successfully!": "Model succesvol gecreëerd", "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.", @@ -713,21 +713,21 @@ "Model Params": "Modelparams", "Model Permissions": "Modeltoestemmingen", "Model updated successfully": "Model succesvol bijgewerkt", - "Modelfile Content": "Modelfile Inhoud", + "Modelfile Content": "Modelfile-inhoud", "Models": "Modellen", "Models Access": "Modellentoegang", - "Models configuration saved successfully": "Modellenconfiguratie succeslvol opgeslagen", - "Models Public Sharing": "", + "Models configuration saved successfully": "Modellenconfiguratie succesvol opgeslagen", + "Models Public Sharing": "Modellen publiek delen", "Mojeek Search API Key": "Mojeek Search API-sleutel", "more": "Meer", "More": "Meer", "Name": "Naam", "Name your knowledge base": "Geef je kennisbasis een naam", - "Native": "", + "Native": "Native", "New Chat": "Nieuwe Chat", - "New Folder": "", + "New Folder": "Nieuwe map", "New Password": "Nieuw Wachtwoord", - "new-channel": "", + "new-channel": "nieuw-kanaal", "No content found": "Geen content gevonden", "No content to speak": "Geen inhoud om over te spreken", "No distance available": "Geen afstand beschikbaar", @@ -738,7 +738,7 @@ "No HTML, CSS, or JavaScript content found.": "Geen HTML, CSS, of JavaScript inhoud gevonden", "No inference engine with management support found": "", "No knowledge found": "Geen kennis gevonden", - "No memories to clear": "", + "No memories to clear": "Geen herinneringen om op te ruimen", "No model IDs": "Geen model-ID's", "No models found": "Geen modellen gevonden", "No models selected": "Geen modellen geselecteerd", @@ -752,8 +752,8 @@ "Not helpful": "Niet nuttig", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Opmerking: Als je een minimumscore instelt, levert de zoekopdracht alleen documenten op met een score groter dan of gelijk aan de minimumscore.", "Notes": "Aantekeningen", - "Notification Sound": "", - "Notification Webhook": "", + "Notification Sound": "Notificatiegeluid", + "Notification Webhook": "Notificatie-webhook", "Notifications": "Notificaties", "November": "November", "num_gpu (Ollama)": "num_gpu (Ollama)", @@ -768,7 +768,7 @@ "Ollama API settings updated": "Ollama API-instellingen bijgewerkt", "Ollama Version": "Ollama Versie", "On": "Aan", - "OneDrive": "", + "OneDrive": "OneDrive", "Only alphanumeric characters and hyphens are allowed": "Alleen alfanumerieke tekens en koppeltekens zijn toegestaan", "Only alphanumeric characters and hyphens are allowed in the command string.": "Alleen alfanumerieke karakters en streepjes zijn toegestaan in de commando string.", "Only collections can be edited, create a new knowledge base to edit/add documents.": "Alleen verzamelinge kunnen gewijzigd worden, maak een nieuwe kennisbank aan om bestanden aan te passen/toe te voegen", From 88b93241dbbcf96f0b22ca10fc3880cc8ba26b3a Mon Sep 17 00:00:00 2001 From: Alex <70099710+Xelaph@users.noreply.github.com> Date: Tue, 1 Apr 2025 15:20:04 +0200 Subject: [PATCH 018/129] Update translation.json --- src/lib/i18n/locales/nl-NL/translation.json | 102 ++++++++++---------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 54b3722f922..6ce9e1fd46b 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -802,10 +802,10 @@ "PDF Extract Images (OCR)": "PDF extraheer afbeeldingen (OCR)", "pending": "wachtend", "Permission denied when accessing media devices": "Toegang geweigerd bij het toegang krijgen tot media-apparaten", - "Permission denied when accessing microphone": "Toegang geweigerd bij het toegang krijgen tot de microfoon", + "Permission denied when accessing microphone": "Toegang geweigerd bij toegang tot de microfoon", "Permission denied when accessing microphone: {{error}}": "Toestemming geweigerd bij toegang tot microfoon: {{error}}", "Permissions": "Toestemmingen", - "Perplexity API Key": "", + "Perplexity API Key": "Perplexity API-sleutel", "Personalization": "Personalisatie", "Pin": "Zet vast", "Pinned": "Vastgezet", @@ -818,44 +818,44 @@ "Plain text (.txt)": "Platte tekst (.txt)", "Playground": "Speeltuin", "Please carefully review the following warnings:": "Beoordeel de volgende waarschuwingen nauwkeurig:", - "Please do not close the settings page while loading the model.": "", + "Please do not close the settings page while loading the model.": "Sluit de instellingenpagina niet terwijl het model geladen wordt.", "Please enter a prompt": "Voer een prompt in", "Please fill in all fields.": "Voer alle velden in", - "Please select a model first.": "", - "Please select a model.": "", + "Please select a model first.": "Selecteer eerst een model", + "Please select a model.": "Selecteer een model", "Please select a reason": "Voer een reden in", "Port": "Poort", "Positive attitude": "Positieve positie", "Prefix ID": "Voorvoegsel-ID", "Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Voorvoegsel-ID wordt gebruikt om conflicten met andere verbindingen te vermijden door een voorvoegsel aan het model-ID toe te voegen - laat leeg om uit te schakelen", - "Presence Penalty": "", + "Presence Penalty": "Aanwezigheidsstraf", "Previous 30 days": "Afgelopen 30 dagen", "Previous 7 days": "Afgelopen 7 dagen", - "Private": "", + "Private": "Privé", "Profile Image": "Profielafbeelding", - "Prompt": "", + "Prompt": "Prompt", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Prompt (bv. Vertel me een leuke gebeurtenis over het Romeinse Rijk)", - "Prompt Autocompletion": "", + "Prompt Autocompletion": "Automatische promptaanvulling", "Prompt Content": "Promptinhoud", "Prompt created successfully": "Prompt succesvol aangemaakt", "Prompt suggestions": "Promptsuggesties", "Prompt updated successfully": "Prompt succesvol bijgewerkt", "Prompts": "Prompts", "Prompts Access": "Prompttoegang", - "Prompts Public Sharing": "", - "Public": "", + "Prompts Public Sharing": "Publiek prompts delen", + "Public": "Publiek", "Pull \"{{searchValue}}\" from Ollama.com": "Haal \"{{searchValue}}\" uit Ollama.com", "Pull a model from Ollama.com": "Haal een model van Ollama.com", "Query Generation Prompt": "Vraaggeneratieprompt", "RAG Template": "RAG-sjabloon", "Rating": "Beoordeling", "Re-rank models by topic similarity": "Herrangschik modellen op basis van onderwerpsovereenkomst", - "Read": "", + "Read": "Voorlezen", "Read Aloud": "Voorlezen", - "Reasoning Effort": "", + "Reasoning Effort": "Redeneerinspanning", "Record voice": "Neem stem op", "Redirecting you to Open WebUI Community": "Je wordt doorgestuurd naar OpenWebUI Community", - "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", + "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Vermindert de kans op het genereren van onzin. Een hogere waarde (bijv. 100) zal meer diverse antwoorden geven, terwijl een lagere waarde (bijv. 10) conservatiever zal zijn.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refereer naar jezelf als \"user\" (bv. \"User is Spaans aan het leren\"", "References from": "Referenties van", "Refused when it shouldn't have": "Geweigerd terwijl het niet had moeten", @@ -867,8 +867,8 @@ "Rename": "Hernoemen", "Reorder Models": "Herschik modellen", "Repeat Last N": "Herhaal Laatste N", - "Repeat Penalty (Ollama)": "", - "Reply in Thread": "", + "Repeat Penalty (Ollama)": "Herhalingsstraf (Ollama)", + "Reply in Thread": "Antwoord in draad", "Request Mode": "Request Modus", "Reranking Model": "Reranking Model", "Reranking model disabled": "Reranking model uitgeschakeld", @@ -877,12 +877,12 @@ "Reset All Models": "Herstel alle modellen", "Reset Upload Directory": "Herstel Uploadmap", "Reset Vector Storage/Knowledge": "Herstel Vectoropslag/-kennis", - "Reset view": "", + "Reset view": "Herstel zicht", "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Antwoordmeldingen kunnen niet worden geactiveerd omdat de rechten voor de website zijn geweigerd. Ga naar de instellingen van uw browser om de benodigde toegang te verlenen.", "Response splitting": "Antwoord splitsing", "Result": "Resultaat", - "Retrieval": "", - "Retrieval Query Generation": "", + "Retrieval": "Ophalen", + "Retrieval Query Generation": "Ophaalqueriegeneratie", "Rich Text Input for Chat": "Rijke tekstinvoer voor chatten", "RK": "RK", "Role": "Rol", @@ -912,11 +912,11 @@ "Search options": "Opties zoeken", "Search Prompts": "Prompts zoeken", "Search Result Count": "Aantal zoekresultaten", - "Search the internet": "", + "Search the internet": "Zoek op het internet", "Search Tools": "Zoek gereedschappen", "SearchApi API Key": "SearchApi API-sleutel", "SearchApi Engine": "SearchApi Engine", - "Searched {{count}} sites": "", + "Searched {{count}} sites": "Zocht op {{count}} sites", "Searching \"{{searchQuery}}\"": "\"{{searchQuery}}\" aan het zoeken.", "Searching Knowledge for \"{{searchQuery}}\"": "Zoek kennis bij \"{{searchQuery}}\"", "Searxng Query URL": "Searxng Query URL", @@ -931,8 +931,8 @@ "Select a pipeline": "Selecteer een pijplijn", "Select a pipeline url": "Selecteer een pijplijn-URL", "Select a tool": "Selecteer een tool", - "Select an auth method": "", - "Select an Ollama instance": "", + "Select an auth method": "Selecteer een authenticatiemethode", + "Select an Ollama instance": "Selecteer een Ollama-instantie", "Select Engine": "Selecteer Engine", "Select Knowledge": "Selecteer kennis", "Select only one model to call": "Selecteer maar één model om aan te roepen", @@ -943,8 +943,8 @@ "Send message": "Stuur bericht", "Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Stuurt `stream_options: { include_usage: true }` in het verzoek. \nOndersteunde providers zullen informatie over tokengebruik in het antwoord terugsturen als dit aan staat.", "September": "September", - "SerpApi API Key": "", - "SerpApi Engine": "", + "SerpApi API Key": "SerpApi API-sleutel", + "SerpApi Engine": "SerpApi-engine", "Serper API Key": "Serper API-sleutel", "Serply API Key": "Serply API-sleutel", "Serpstack API Key": "Serpstack API-sleutel", @@ -960,26 +960,26 @@ "Set Scheduler": "Stel planner in", "Set Steps": "Stel stappen in", "Set Task Model": "Taakmodel instellen", - "Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "", + "Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "Stel het aantal lagen in dat wordt overgeheveld naar de GPU. Het verhogen van deze waarde kan de prestaties aanzienlijk verbeteren voor modellen die geoptimaliseerd zijn voor GPU-versnelling, maar kan ook meer stroom en GPU-bronnen verbruiken.", "Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "Stel het aantal threads in dat wordt gebruikt voor berekeningen. Deze optie bepaalt hoeveel threads worden gebruikt om gelijktijdig binnenkomende verzoeken te verwerken. Het verhogen van deze waarde kan de prestaties verbeteren onder hoge concurrency werklasten, maar kan ook meer CPU-bronnen verbruiken.", "Set Voice": "Stel stem in", "Set whisper model": "Stel Whisper-model in", - "Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "", - "Sets a scaling bias against tokens to penalize repetitions, based on how many times they have appeared. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "", - "Sets how far back for the model to look back to prevent repetition.": "", - "Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt.": "", - "Sets the size of the context window used to generate the next token.": "", + "Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "Stelt een vlakke bias in tegen tokens die minstens één keer zijn voorgekomen. Een hogere waarde (bijv. 1,5) straft herhalingen sterker af, terwijl een lagere waarde (bijv. 0,9) toegeeflijker is. Bij 0 is het uitgeschakeld.", + "Sets a scaling bias against tokens to penalize repetitions, based on how many times they have appeared. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "Stelt een schaalvooroordeel in tegen tokens om herhalingen te bestraffen, gebaseerd op hoe vaak ze zijn voorgekomen. Een hogere waarde (bijv. 1,5) straft herhalingen sterker af, terwijl een lagere waarde (bijv. 0,9) toegeeflijker is. Bij 0 is het uitgeschakeld.", + "Sets how far back for the model to look back to prevent repetition.": "Stelt in hoe ver het model terug moet kijken om herhaling te voorkomen.", + "Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt.": "Stelt de willekeurigheid in om te gebruiken voor het genereren. Als je dit op een specifiek getal instelt, genereert het model dezelfde tekst voor dezelfde prompt.", + "Sets the size of the context window used to generate the next token.": "Stelt de grootte van het contextvenster in dat gebruikt wordt om het volgende token te genereren.", "Sets the stop sequences to use. When this pattern is encountered, the LLM will stop generating text and return. Multiple stop patterns may be set by specifying multiple separate stop parameters in a modelfile.": "Stelt de te gebruiken stopsequentie in. Als dit patroon wordt gevonden, stopt de LLM met het genereren van tekst en keert terug. Er kunnen meerdere stoppatronen worden ingesteld door meerdere afzonderlijke stopparameters op te geven in een modelbestand.", "Settings": "Instellingen", "Settings saved successfully!": "Instellingen succesvol opgeslagen!", "Share": "Delen", "Share Chat": "Deel chat", "Share to Open WebUI Community": "Deel naar OpenWebUI-community", - "Sharing Permissions": "", + "Sharing Permissions": "Deeltoestemmingen", "Show": "Toon", "Show \"What's New\" modal on login": "Toon \"Wat is nieuw\" bij inloggen", "Show Admin Details in Account Pending Overlay": "Admin-details weergeven in overlay in afwachting van account", - "Show Model": "", + "Show Model": "Toon model", "Show shortcuts": "Toon snelkoppelingen", "Show your support!": "Toon je steun", "Showcased creativity": "Toonde creativiteit", @@ -990,7 +990,7 @@ "Sign up": "Registreren", "Sign up to {{WEBUI_NAME}}": "Meld je aan bij {{WEBUI_NAME}}", "Signing in to {{WEBUI_NAME}}": "Aan het inloggen bij {{WEBUI_NAME}}", - "sk-1234": "", + "sk-1234": "sk-1234", "Source": "Bron", "Speech Playback Speed": "Afspeelsnelheid spraak", "Speech recognition error: {{error}}": "Spraakherkenning fout: {{error}}", @@ -1010,13 +1010,13 @@ "System": "Systeem", "System Instructions": "Systeem instructies", "System Prompt": "Systeem prompt", - "Tags": "", - "Tags Generation": "", + "Tags": "Tags", + "Tags Generation": "Taggeneratie", "Tags Generation Prompt": "Prompt voor taggeneratie", - "Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "", - "Talk to model": "", + "Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "Tail free sampling wordt gebruikt om de impact van minder waarschijnlijke tokens uit de uitvoer te verminderen. Een hogere waarde (bijvoorbeeld 2,0) zal de impact meer verminderen, terwijl een waarde van 1,0 deze instelling uitschakelt.", + "Talk to model": "Praat met model", "Tap to interrupt": "Tik om te onderbreken", - "Tasks": "", + "Tasks": "Taken", "Tavily API Key": "Tavily API-sleutel", "Tell us more:": "Vertel ons meer:", "Temperature": "Temperatuur", @@ -1028,24 +1028,24 @@ "Thanks for your feedback!": "Bedankt voor je feedback!", "The Application Account DN you bind with for search": "Het applicatieaccount DN waarmee je zoekt", "The base to search for users": "De basis om gebruikers te zoeken", - "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "", + "The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory.": "De batchgrootte bepaalt hoeveel tekstverzoeken tegelijk worden verwerkt. Een hogere batchgrootte kan de prestaties en snelheid van het model verhogen, maar vereist ook meer geheugen.", "The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "De ontwikkelaars achter deze plugin zijn gepassioneerde vrijwilligers uit de gemeenschap. Als je deze plugin nuttig vindt, overweeg dan om bij te dragen aan de ontwikkeling ervan.", "The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "Het beoordelingsklassement is gebaseerd op het Elo-classificatiesysteem en wordt in realtime bijgewerkt.", - "The LDAP attribute that maps to the mail that users use to sign in.": "", - "The LDAP attribute that maps to the username that users use to sign in.": "Het LDAP-attribuut dat de gebruikersnaam koppelt die gebruikers gebruiken om in te loggen.", + "The LDAP attribute that maps to the mail that users use to sign in.": "Het LDAP-attribuut dat verwijst naar de e-mail waarmee gebruikers zich aanmelden.", + "The LDAP attribute that maps to the username that users use to sign in.": "Het LDAP-attribuut dat verwijst naar de gebruikersnaam die gebruikers gebruiken om in te loggen.", "The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "Het leaderboard is momenteel in bèta en we kunnen de ratingberekeningen aanpassen naarmate we het algoritme verfijnen.", "The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "De maximale bestandsgrootte in MB. Als het bestand groter is dan deze limiet, wordt het bestand niet geüpload.", "The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "Het maximum aantal bestanden dat in één keer kan worden gebruikt in de chat. Als het aantal bestanden deze limiet overschrijdt, worden de bestanden niet geüpload.", - "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Het score moet een waarde zijn tussen 0.0 (0%) en 1.0 (100%).", - "The temperature of the model. Increasing the temperature will make the model answer more creatively.": "", + "The score should be a value between 0.0 (0%) and 1.0 (100%).": "De score moet een waarde zijn tussen 0.0 (0%) en 1.0 (100%).", + "The temperature of the model. Increasing the temperature will make the model answer more creatively.": "De temperatuur van het model. De temperatuur groter maken zal het model creatiever laten antwoorden.", "Theme": "Thema", "Thinking...": "Aan het denken...", "This action cannot be undone. Do you wish to continue?": "Deze actie kan niet ongedaan worden gemaakt. Wilt u doorgaan?", - "This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "", + "This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "Dit kanaal was gecreëerd op {{createdAt}}. Dit het begin van het {{channelName}} kanaal.", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dit zorgt ervoor dat je waardevolle gesprekken veilig worden opgeslagen in je backend database. Dank je wel!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Dit is een experimentele functie, het kan functioneren zoals verwacht en kan op elk moment veranderen.", - "This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "", - "This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "", + "This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Deze optie bepaalt hoeveel tokens bewaard blijven bij het verversen van de context. Als deze bijvoorbeeld op 2 staat, worden de laatste 2 tekens van de context van het gesprek bewaard. Het behouden van de context kan helpen om de continuïteit van een gesprek te behouden, maar het kan de mogelijkheid om te reageren op nieuwe onderwerpen verminderen.", + "This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Deze optie stelt het maximum aantal tokens in dat het model kan genereren in zijn antwoord. Door dit limiet te verhogen, kan het model langere antwoorden geven, maar het kan ook de kans vergroten dat er onbehulpzame of irrelevante inhoud wordt gegenereerd.", "This option will delete all existing files in the collection and replace them with newly uploaded files.": "Deze optie verwijdert alle bestaande bestanden in de collectie en vervangt ze door nieuw geüploade bestanden.", "This response was generated by \"{{model}}\"": "Dit antwoord is gegenereerd door \"{{model}}\"", "This will delete": "Dit zal verwijderen", @@ -1054,8 +1054,8 @@ "This will delete all models including custom models and cannot be undone.": "Dit zal alle modellen, ook aangepaste modellen, verwijderen en kan niet ontdaan worden", "This will reset the knowledge base and sync all files. Do you wish to continue?": "Dit zal de kennisdatabase resetten en alle bestanden synchroniseren. Wilt u doorgaan?", "Thorough explanation": "Gevorderde uitleg", - "Thought for {{DURATION}}": "", - "Thought for {{DURATION}} seconds": "", + "Thought for {{DURATION}}": "Dacht {{DURATION}}", + "Thought for {{DURATION}} seconds": "Dacht {{DURATION}} seconden", "Tika": "Tika", "Tika Server URL required.": "Tika Server-URL vereist", "Tiktoken": "Tiktoken", @@ -1064,14 +1064,14 @@ "Title (e.g. Tell me a fun fact)": "Titel (bv. Vertel me een leuke gebeurtenis)", "Title Auto-Generation": "Titel Auto-Generatie", "Title cannot be an empty string.": "Titel kan niet leeg zijn.", - "Title Generation": "", + "Title Generation": "Titelgeneratie", "Title Generation Prompt": "Titel Generatie Prompt", "TLS": "TLS", "To access the available model names for downloading,": "Om de beschikbare modelnamen voor downloaden te openen,", "To access the GGUF models available for downloading,": "Om toegang te krijgen tot de GGUF-modellen die beschikbaar zijn voor downloaden,", "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Om toegang te krijgen tot de WebUI, neem contact op met de administrator. Beheerders kunnen de gebruikersstatussen beheren vanuit het Beheerderspaneel.", "To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Om hier een kennisbron bij te voegen, voeg ze eerst aan de \"Kennis\" werkplaats toe.", - "To learn more about available endpoints, visit our documentation.": "", + "To learn more about available endpoints, visit our documentation.": "Om meer over beschikbare endpoints te leren, bezoek onze documentatie.", "To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Om je privacy te beschermen, worden alleen beoordelingen, model-ID's, tags en metadata van je feedback gedeeld - je chatlogs blijven privé en worden niet opgenomen.", "To select actions here, add them to the \"Functions\" workspace first.": "Om hier acties te selecteren, voeg ze eerst aan de \"Functies\" Werkplaats toe.", "To select filters here, add them to the \"Functions\" workspace first.": "Om hier filters te selecteren, voeg ze eerst aan de \"Functies\" Werkplaats toe.", From 82e5a6410c11c0445489e6666553a9c2f77b6777 Mon Sep 17 00:00:00 2001 From: Alex <70099710+Xelaph@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:09:17 +0200 Subject: [PATCH 019/129] Update translation.json --- src/lib/i18n/locales/nl-NL/translation.json | 56 ++++++++++----------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index 6ce9e1fd46b..e71dd4bed97 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -337,7 +337,7 @@ "Don't like the style": "Vind je de stijl niet mooi?", "Done": "Voltooid", "Download": "Download", - "Download as SVG": "", + "Download as SVG": "Download als SVG", "Download canceled": "Download geannuleerd", "Download Database": "Download database", "Drag and drop a file to upload or select a file to view": "Sleep een bestand om te uploaden of selecteer een bestand om te bekijken", @@ -526,9 +526,9 @@ "Form": "Formulier", "Format your variables using brackets like this:": "Formateer je variabelen met haken zoals dit:", "Frequency Penalty": "Frequentiestraf", - "Full Context Mode": "", + "Full Context Mode": "Volledige contextmodus", "Function": "Functie", - "Function Calling": "", + "Function Calling": "Functieaanroep", "Function created successfully": "Functie succesvol aangemaakt", "Function deleted successfully": "Functie succesvol verwijderd", "Function Description": "Functiebeschrijving", @@ -736,7 +736,7 @@ "No files found.": "Geen bestanden gevonden", "No groups with access, add a group to grant access": "Geen groepen met toegang, voeg een groep toe om toegang te geven", "No HTML, CSS, or JavaScript content found.": "Geen HTML, CSS, of JavaScript inhoud gevonden", - "No inference engine with management support found": "", + "No inference engine with management support found": "Geen inferentie-engine met beheerondersteuning gevonden", "No knowledge found": "Geen kennis gevonden", "No memories to clear": "Geen herinneringen om op te ruimen", "No model IDs": "Geen model-ID's", @@ -1093,22 +1093,22 @@ "Tools": "Gereedschappen", "Tools Access": "Gereedschaptoegang", "Tools are a function calling system with arbitrary code execution": "Gereedschappen zijn een systeem voor het aanroepen van functies met willekeurige code-uitvoering", - "Tools Function Calling Prompt": "", + "Tools Function Calling Prompt": "Gereedschapsfunctie aanroepprompt", "Tools have a function calling system that allows arbitrary code execution": "Gereedschappen hebben een systeem voor het aanroepen van functies waarmee willekeurige code kan worden uitgevoerd", "Tools have a function calling system that allows arbitrary code execution.": "Gereedschappen hebben een systeem voor het aanroepen van functies waarmee willekeurige code kan worden uitgevoerd", - "Tools Public Sharing": "", + "Tools Public Sharing": "Gereedschappen publiek delen", "Top K": "Top K", - "Top K Reranker": "", + "Top K Reranker": "Top K herranker", "Top P": "Top P", - "Transformers": "", + "Transformers": "Transformers", "Trouble accessing Ollama?": "Problemen met toegang tot Ollama?", - "Trust Proxy Environment": "", + "Trust Proxy Environment": "Vertrouwelijk proxyomgeving", "TTS Model": "TTS Model", "TTS Settings": "TTS instellingen", "TTS Voice": "TTS Stem", "Type": "Type", "Type Hugging Face Resolve (Download) URL": "Type Hugging Face Resolve (Download) URL", - "Uh-oh! There was an issue with the response.": "", + "Uh-oh! There was an issue with the response.": "Oh-oh! Er was een probleem met het antwoord.", "UI": "UI", "Unarchive All": "Onarchiveer alles", "Unarchive All Archived Chats": "Onarchiveer alle gearchiveerde chats", @@ -1124,7 +1124,7 @@ "Updated": "Bijgewerkt", "Updated at": "Bijgewerkt om", "Updated At": "Bijgewerkt om", - "Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "", + "Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "Upgrade naar een licentie voor meer mogelijkheden, waaronder aangepaste thematisering en branding, en speciale ondersteuning.", "Upload": "Uploaden", "Upload a GGUF model": "Upload een GGUF-model", "Upload directory": "Upload map", @@ -1140,10 +1140,10 @@ "Use Initials": "Gebruik initialen", "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", - "user": "user", - "User": "User", + "user": "gebruiker", + "User": "Gebruiker", "User location successfully retrieved.": "Gebruikerslocatie succesvol opgehaald", - "User Webhooks": "", + "User Webhooks": "Gebruiker-webhooks", "Username": "Gebruikersnaam", "Users": "Gebruikers", "Using the default arena model with all models. Click the plus button to add custom models.": "Het standaard arena-model gebruiken met alle modellen. Klik op de plusknop om aangepaste modellen toe te voegen.", @@ -1154,11 +1154,11 @@ "Valves updated successfully": "Kleppen succesvol bijgewerkt", "variable": "variabele", "variable to have them replaced with clipboard content.": "variabele om ze te laten vervangen door klembord inhoud.", - "Verify Connection": "", + "Verify Connection": "Controleer verbinding", "Version": "Versie", "Version {{selectedVersion}} of {{totalVersions}}": "Versie {{selectedVersion}} van {{totalVersions}}", - "View Replies": "", - "View Result from `{{NAME}}`": "", + "View Replies": "Bekijke resultaten", + "View Result from `{{NAME}}`": "Bekijk resultaten van `{{NAME}}`", "Visibility": "Zichtbaarheid", "Voice": "Stem", "Voice Input": "Steminvoer", @@ -1166,19 +1166,19 @@ "Warning:": "Waarschuwing", "Warning: Enabling this will allow users to upload arbitrary code on the server.": "Waarschuwing: Door dit in te schakelen kunnen gebruikers willekeurige code uploaden naar de server.", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warning: Als je de embedding model bijwerkt of wijzigt, moet je alle documenten opnieuw importeren.", - "Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "", + "Warning: Jupyter execution enables arbitrary code execution, posing severe security risks—proceed with extreme caution.": "Waarschuwing: Jupyter kan willekeurige code uitvoeren, wat ernstige veiligheidsrisico's met zich meebrengt - ga uiterst voorzichtig te werk. ", "Web": "Web", "Web API": "Web-API", "Web Search": "Zoeken op het web", "Web Search Engine": "Zoekmachine op het web", - "Web Search in Chat": "", - "Web Search Query Generation": "", + "Web Search in Chat": "Zoekopdracht in chat", + "Web Search Query Generation": "Zoekopdracht generatie", "Webhook URL": "Webhook URL", "WebUI Settings": "WebUI Instellingen", - "WebUI URL": "", + "WebUI URL": "WebUI-URL", "WebUI will make requests to \"{{url}}/api/chat\"": "WebUI zal verzoeken doen aan \"{{url}}/api/chat\"", "WebUI will make requests to \"{{url}}/chat/completions\"": "WebUI zal verzoeken doen aan \"{{url}}/chat/completions\"", - "WebUI will make requests to \"{{url}}/openapi.json\"": "", + "WebUI will make requests to \"{{url}}/openapi.json\"": "WebUI zal verzoeken doen aan \"{{url}}/openapi.json\"", "What are you trying to achieve?": "Wat probeer je te bereiken?", "What are you working on?": "Waar werk je aan?", "What’s New in": "Wat is nieuw in", @@ -1188,21 +1188,21 @@ "Why?": "Waarom?", "Widescreen Mode": "Breedschermmodus", "Won": "Gewonnen", - "Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text.": "", + "Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text.": "Werkt samen met top-k. Een hogere waarde (bijv. 0,95) leidt tot meer diverse tekst, terwijl een lagere waarde (bijv. 0,5) meer gerichte en conservatieve tekst genereert.", "Workspace": "Werkruimte", "Workspace Permissions": "Werkruimtemachtigingen", - "Write": "", + "Write": "Schrijf", "Write a prompt suggestion (e.g. Who are you?)": "Schrijf een prompt suggestie (bijv. Wie ben je?)", "Write a summary in 50 words that summarizes [topic or keyword].": "Schrijf een samenvatting in 50 woorden die [onderwerp of trefwoord] samenvat.", "Write something...": "Schrijf iets...", "Write your model template content here": "Schrijf je modelsjablooninhoud hier", "Yesterday": "Gisteren", "You": "Jij", - "You are currently using a trial license. Please contact support to upgrade your license.": "", + "You are currently using a trial license. Please contact support to upgrade your license.": "Je gebruikt momenteel een proeflicentie. Neem contact op met de ondersteuning om je licentie te upgraden.", "You can only chat with a maximum of {{maxCount}} file(s) at a time.": "Je kunt slechts met maximaal {{maxCount}} bestand(en) tegelijk chatten", "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Je kunt je interacties met LLM's personaliseren door herinneringen toe te voegen via de 'Beheer'-knop hieronder, waardoor ze nuttiger en voor jou op maat gemaakt worden.", "You cannot upload an empty file.": "Je kunt een leeg bestand niet uploaden.", - "You do not have permission to upload files": "", + "You do not have permission to upload files": "Je hebt geen toestemming om bestanden up te loaden", "You do not have permission to upload files.": "Je hebt geen toestemming om bestanden up te loaden", "You have no archived conversations.": "Je hebt geen gearchiveerde gesprekken.", "You have shared this chat": "Je hebt dit gesprek gedeeld", @@ -1211,6 +1211,6 @@ "Your account status is currently pending activation.": "Je accountstatus wacht nu op activatie", "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.": "Je volledige bijdrage gaat direct naar de ontwikkelaar van de plugin; Open WebUI neemt hier geen deel van. Het gekozen financieringsplatform kan echter wel zijn eigen kosten hebben.", "Youtube": "Youtube", - "Youtube Language": "", - "Youtube Proxy URL": "" + "Youtube Language": "Youtube-taal", + "Youtube Proxy URL": "Youtube-proxy-URL" } From 883ad55f5c14218d90b320520ff8153a999ecb52 Mon Sep 17 00:00:00 2001 From: Alex <70099710+Xelaph@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:12:31 +0200 Subject: [PATCH 020/129] Update translation.json --- src/lib/i18n/locales/nl-NL/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index e71dd4bed97..b8be535495a 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -134,7 +134,7 @@ "Beta": "Beta", "Bing Search V7 Endpoint": "Bing Search V7 Endpoint", "Bing Search V7 Subscription Key": "Bing Search V7 Subscription Key", - "Bocha Search API Key": ""Bocha Search API-sleutel, + "Bocha Search API Key": "Bocha Search API-sleutel", "Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "Versterken of bestraffen van specifieke tokens voor beperkte reacties. Biaswaarden worden geklemd tussen -100 en 100 (inclusief). (Standaard: none)", "Brave Search API Key": "Brave Search API-sleutel", "By {{name}}": "Op {{name}}", @@ -856,7 +856,7 @@ "Record voice": "Neem stem op", "Redirecting you to Open WebUI Community": "Je wordt doorgestuurd naar OpenWebUI Community", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Vermindert de kans op het genereren van onzin. Een hogere waarde (bijv. 100) zal meer diverse antwoorden geven, terwijl een lagere waarde (bijv. 10) conservatiever zal zijn.", - "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refereer naar jezelf als \"user\" (bv. \"User is Spaans aan het leren\"", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refereer naar jezelf als \"user\" (bv. \"User is Spaans aan het leren\")", "References from": "Referenties van", "Refused when it shouldn't have": "Geweigerd terwijl het niet had moeten", "Regenerate": "Regenereren", From 8f8c34471e7b42ed2485bdbffd4bd9f36f69ef16 Mon Sep 17 00:00:00 2001 From: Daniel Nowak <13685818+lowlyocean@users.noreply.github.com> Date: Tue, 1 Apr 2025 12:03:09 -0400 Subject: [PATCH 021/129] Pin onnxruntime to 1.20.1 to address SIGILL on certain arm64 hosts --- backend/requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/requirements.txt b/backend/requirements.txt index 87b5a4d123d..dd7c859329f 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -83,6 +83,8 @@ opencv-python-headless==4.11.0.86 rapidocr-onnxruntime==1.3.24 rank-bm25==0.2.2 +onnxruntime==1.20.1 + faster-whisper==1.1.1 PyJWT[crypto]==2.10.1 From 0447d909515c9abc77ecbf8aabafb182e92fbf69 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 1 Apr 2025 20:01:08 +0200 Subject: [PATCH 022/129] Update translation.json --- src/lib/i18n/locales/uk-UA/translation.json | 52 ++++++++++----------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index bb2be72ba3e..d1ec07feabf 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -6,7 +6,7 @@ "(latest)": "(остання)", "(Ollama)": "(Ollama)", "{{ models }}": "{{ models }}", - "{{COUNT}} Available Tool Servers": "", + "{{COUNT}} Available Tool Servers": "{{COUNT}} Доступні інструменти на серверах", "{{COUNT}} hidden lines": "{{COUNT}} прихованих рядків", "{{COUNT}} Replies": "{{COUNT}} Відповіді", "{{user}}'s Chats": "Чати {{user}}а", @@ -119,7 +119,7 @@ "AUTOMATIC1111 Base URL": "URL-адреса AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "Необхідна URL-адреса AUTOMATIC1111.", "Available list": "Список доступності", - "Available Tool Servers": "", + "Available Tool Servers": "Доступні сервери інструментів", "available!": "доступно!", "Awful": "Жахливо", "Azure AI Speech": "Мовлення Azure AI", @@ -217,7 +217,7 @@ "Confirm your action": "Підтвердіть свою дію", "Confirm your new password": "Підтвердіть свій новий пароль", "Connect to your own OpenAI compatible API endpoints.": "Підключіться до своїх власних API-ендпоінтів, сумісних з OpenAI.", - "Connect to your own OpenAPI compatible external tool servers.": "", + "Connect to your own OpenAPI compatible external tool servers.": "Підключіться до своїх власних зовнішніх серверів інструментів, сумісних з OpenAPI.", "Connections": "З'єднання", "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "Обмежує зусилля на міркування для моделей міркування. Діє лише для моделей міркування від конкретних постачальників, які підтримують зусилля міркування.", "Contact Admin for WebUI Access": "Зверніться до адміна для отримання доступу до WebUI", @@ -344,7 +344,7 @@ "Draw": "Малювати", "Drop any files here to add to the conversation": "Перетягніть сюди файли, щоб додати до розмови", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр., '30s','10m'. Дійсні одиниці часу: 'с', 'хв', 'г'.", - "e.g. \"json\" or a JSON schema": "", + "e.g. \"json\" or a JSON schema": "напр., \"json\" або схема JSON", "e.g. 60": "напр. 60", "e.g. A filter to remove profanity from text": "напр., фільтр для видалення нецензурної лексики з тексту", "e.g. My Filter": "напр., Мій фільтр", @@ -379,7 +379,7 @@ "Enable Mirostat sampling for controlling perplexity.": "Увімкнути вибірку Mirostat для контролю перплексії.", "Enable New Sign Ups": "Дозволити нові реєстрації", "Enabled": "Увімкнено", - "Enforce Temporary Chat": "", + "Enforce Temporary Chat": "Застосувати тимчасовий чат", "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.", @@ -442,7 +442,7 @@ "Enter timeout in seconds": "Введіть тайм-аут у секундах", "Enter to Send": "Введіть для відправки", "Enter Top K": "Введіть Top K", - "Enter Top K Reranker": "", + "Enter Top K Reranker": "Введіть 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 current password": "Введіть ваш поточний пароль", @@ -468,7 +468,7 @@ "Exceeded the number of seats in your license. Please contact support to increase the number of seats.": "Перевищено кількість місць у вашій ліцензії. Будь ласка, зверніться до підтримки для збільшення кількості місць.", "Exclude": "Виключити", "Execute code for analysis": "Виконати код для аналізу", - "Executing `{{NAME}}`...": "", + "Executing `{{NAME}}`...": "Виконання `{{NAME}}`...", "Expand": "Розгорнути", "Experimental": "Експериментальне", "Explain": "Пояснити", @@ -489,7 +489,7 @@ "External": "Зовнішній", "External Models": "Зовнішні моделі", "Failed to add file.": "Не вдалося додати файл.", - "Failed to connect to {{URL}} OpenAPI tool server": "", + "Failed to connect to {{URL}} OpenAPI tool server": "Не вдалося підключитися до серверу інструментів OpenAPI {{URL}}", "Failed to create API Key.": "Не вдалося створити API ключ.", "Failed to fetch models": "Не вдалося отримати моделі", "Failed to read clipboard contents": "Не вдалося прочитати вміст буфера обміну", @@ -570,7 +570,7 @@ "Hex Color": "Шістнадцятковий колір", "Hex Color - Leave empty for default color": "Шістнадцятковий колір — залиште порожнім для кольору за замовчуванням", "Hide": "Приховати", - "Hide Model": "", + "Hide Model": "Приховати модель", "Home": "Головна", "Host": "Хост", "How can I help you today?": "Чим я можу допомогти вам сьогодні?", @@ -608,7 +608,7 @@ "Integration": "Інтеграція", "Interface": "Інтерфейс", "Invalid file format.": "Неправильний формат файлу.", - "Invalid JSON schema": "", + "Invalid JSON schema": "Невірна схема JSON", "Invalid Tag": "Недійсний тег", "is typing...": "друкує...", "January": "Січень", @@ -630,7 +630,7 @@ "Knowledge Access": "Доступ до знань", "Knowledge created successfully.": "Знання успішно створено.", "Knowledge deleted successfully.": "Знання успішно видалено.", - "Knowledge Public Sharing": "", + "Knowledge Public Sharing": "Публічний обмін знаннями", "Knowledge reset successfully.": "Знання успішно скинуто.", "Knowledge updated successfully": "Знання успішно оновлено", "Kokoro.js (Browser)": "Kokoro.js (Браузер)", @@ -645,8 +645,8 @@ "LDAP server updated": "Сервер LDAP оновлено", "Leaderboard": "Таблиця лідерів", "Leave empty for unlimited": "Залиште порожнім для необмеженого розміру", - "Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "", - "Leave empty to include all models from \"{{url}}/models\" endpoint": "", + "Leave empty to include all models from \"{{url}}/api/tags\" endpoint": "Залиште порожнім, щоб включити всі моделі з кінцевої точки \"{{url}}/api/tags\"", + "Leave empty to include all models from \"{{url}}/models\" endpoint": "Залиште порожнім, щоб включити всі моделі з кінцевої точки \"{{url}}/models\"", "Leave empty to include all models or select specific models": "Залиште порожнім, щоб включити усі моделі, або виберіть конкретні моделі.", "Leave empty to use the default prompt, or enter a custom prompt": "Залиште порожнім для використання стандартного запиту, або введіть власний запит", "Leave model field empty to use the default model.": "Залиште поле моделі порожнім, щоб використовувати модель за замовчуванням.", @@ -673,7 +673,7 @@ "Manage Ollama API Connections": "Керувати з'єднаннями Ollama API", "Manage OpenAI API Connections": "Керувати з'єднаннями OpenAI API", "Manage Pipelines": "Керування конвеєрами", - "Manage Tool Servers": "", + "Manage Tool Servers": "Керувати серверами інструментів", "March": "Березень", "Max Tokens (num_predict)": "Макс токенів (num_predict)", "Max Upload Count": "Макс. кількість завантажень", @@ -700,8 +700,8 @@ "Model {{modelId}} not found": "Модель {{modelId}} не знайдено", "Model {{modelName}} is not vision capable": "Модель {{modelName}} не здатна бачити", "Model {{name}} is now {{status}}": "Модель {{name}} тепер має {{status}}", - "Model {{name}} is now hidden": "", - "Model {{name}} is now visible": "", + "Model {{name}} is now hidden": "Модель {{name}} тепер схована", + "Model {{name}} is now visible": "Модель {{name}} тепер видима", "Model accepts image inputs": "Модель приймає зображеня", "Model created successfully!": "Модель створено успішно!", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Виявлено шлях до файлової системи моделі. Для оновлення потрібно вказати коротке ім'я моделі, не вдасться продовжити.", @@ -717,7 +717,7 @@ "Models": "Моделі", "Models Access": "Доступ до моделей", "Models configuration saved successfully": "Конфігурацію моделей успішно збережено", - "Models Public Sharing": "", + "Models Public Sharing": "Публічний обмін моделями", "Mojeek Search API Key": "API ключ для пошуку Mojeek", "more": "більше", "More": "Більше", @@ -835,14 +835,14 @@ "Profile Image": "Зображення профілю", "Prompt": "Підказка", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Підказка (напр., розкажіть мені цікавий факт про Римську імперію)", - "Prompt Autocompletion": "", + "Prompt Autocompletion": "Автозавершення підказок", "Prompt Content": "Зміст промту", "Prompt created successfully": "Підказку успішно створено", "Prompt suggestions": "Швидкі промти", "Prompt updated successfully": "Підказку успішно оновлено", "Prompts": "Промти", "Prompts Access": "Доступ до підказок", - "Prompts Public Sharing": "", + "Prompts Public Sharing": "Публічний обмін промтами", "Public": "Публічний", "Pull \"{{searchValue}}\" from Ollama.com": "Завантажити \"{{searchValue}}\" з Ollama.com", "Pull a model from Ollama.com": "Завантажити модель з Ollama.com", @@ -975,11 +975,11 @@ "Share": "Поділитися", "Share Chat": "Поділитися чатом", "Share to Open WebUI Community": "Поділитися зі спільнотою OpenWebUI", - "Sharing Permissions": "", + "Sharing Permissions": "Дозволи на обмін", "Show": "Показати", "Show \"What's New\" modal on login": "Показати модальне вікно \"Що нового\" під час входу", "Show Admin Details in Account Pending Overlay": "Відобразити дані адміна у вікні очікування облікового запису", - "Show Model": "", + "Show Model": "Показати модель", "Show shortcuts": "Показати клавіатурні скорочення", "Show your support!": "Підтримайте нас!", "Showcased creativity": "Продемонстрований креатив", @@ -1096,9 +1096,9 @@ "Tools Function Calling Prompt": "Підказка для виклику функцій інструментів", "Tools have a function calling system that allows arbitrary code execution": "Інструменти мають систему виклику функцій, яка дозволяє виконання довільного коду", "Tools have a function calling system that allows arbitrary code execution.": "Інструменти мають систему виклику функцій, яка дозволяє виконання довільного коду.", - "Tools Public Sharing": "", + "Tools Public Sharing": "Публічний обмін інструментами", "Top K": "Top K", - "Top K Reranker": "", + "Top K Reranker": "Top K Реранкер", "Top P": "Top P", "Transformers": "Трансформери", "Trouble accessing Ollama?": "Проблеми з доступом до Ollama?", @@ -1143,7 +1143,7 @@ "user": "користувач", "User": "Користувач", "User location successfully retrieved.": "Місцезнаходження користувача успішно знайдено.", - "User Webhooks": "", + "User Webhooks": "Вебхуки користувача", "Username": "Ім'я користувача", "Users": "Користувачі", "Using the default arena model with all models. Click the plus button to add custom models.": "Використовуючи модель арени за замовчуванням з усіма моделями. Натисніть кнопку плюс, щоб додати користувацькі моделі.", @@ -1158,7 +1158,7 @@ "Version": "Версія", "Version {{selectedVersion}} of {{totalVersions}}": "Версія {{selectedVersion}} з {{totalVersions}}", "View Replies": "Переглянути відповіді", - "View Result from `{{NAME}}`": "", + "View Result from `{{NAME}}`": "Переглянути результат з `{{NAME}}`", "Visibility": "Видимість", "Voice": "Голос", "Voice Input": "Голосове введення", @@ -1178,7 +1178,7 @@ "WebUI URL": "WebUI URL", "WebUI will make requests to \"{{url}}/api/chat\"": "WebUI надсилатиме запити до \"{{url}}/api/chat\"", "WebUI will make requests to \"{{url}}/chat/completions\"": "WebUI надсилатиме запити до \"{{url}}/chat/completions\"", - "WebUI will make requests to \"{{url}}/openapi.json\"": "", + "WebUI will make requests to \"{{url}}/openapi.json\"": "WebUI буде здійснювати запити до \"{{url}}/openapi.json\"", "What are you trying to achieve?": "Чого ви прагнете досягти?", "What are you working on?": "Над чим ти працюєш?", "What’s New in": "Що нового в", From 93d7702e8c889361e4198a12038fdcccd5f83505 Mon Sep 17 00:00:00 2001 From: Patrick Wachter Date: Tue, 1 Apr 2025 16:26:32 +0200 Subject: [PATCH 023/129] refactor: move MistralLoader to a separate module and just use the requests package instead of mistralai --- backend/open_webui/retrieval/loaders/main.py | 49 +--- .../open_webui/retrieval/loaders/mistral.py | 226 ++++++++++++++++++ backend/requirements.txt | 1 - 3 files changed, 227 insertions(+), 49 deletions(-) create mode 100644 backend/open_webui/retrieval/loaders/mistral.py diff --git a/backend/open_webui/retrieval/loaders/main.py b/backend/open_webui/retrieval/loaders/main.py index e75c69682d2..e1b485b84ba 100644 --- a/backend/open_webui/retrieval/loaders/main.py +++ b/backend/open_webui/retrieval/loaders/main.py @@ -21,7 +21,7 @@ ) from langchain_core.documents import Document -from mistralai import Mistral +from .mistral import MistralLoader from open_webui.env import SRC_LOG_LEVELS, GLOBAL_LOG_LEVEL @@ -166,53 +166,6 @@ def load(self) -> list[Document]: raise Exception(f"Error calling Docling: {error_msg}") -class MistralLoader: - def __init__(self, api_key: str, file_path: str): - self.api_key = api_key - self.file_path = file_path - self.client = Mistral(api_key=api_key) - - def load(self) -> list[Document]: - log.info("Uploading file to Mistral OCR") - uploaded_pdf = self.client.files.upload( - file={ - "file_name": self.file_path.split("/")[-1], - "content": open(self.file_path, "rb"), - }, - purpose="ocr", - ) - log.info("File uploaded to Mistral OCR, getting signed URL") - signed_url = self.client.files.get_signed_url(file_id=uploaded_pdf.id) - log.info("Signed URL received, processing OCR") - ocr_response = self.client.ocr.process( - model="mistral-ocr-latest", - document={ - "type": "document_url", - "document_url": signed_url.url, - }, - ) - log.info("OCR processing done, deleting uploaded file") - deleted_pdf = self.client.files.delete(file_id=uploaded_pdf.id) - log.info("Uploaded file deleted") - log.debug("OCR response: %s", ocr_response) - if not hasattr(ocr_response, "pages") or not ocr_response.pages: - log.error("No pages found in OCR response") - return [Document(page_content="No text content found", metadata={})] - - return [ - Document( - page_content=page.markdown, - metadata={ - "page": page.index, - "page_label": page.index + 1, - "total_pages": len(ocr_response.pages), - }, - ) - for page in ocr_response.pages - if hasattr(page, "markdown") and hasattr(page, "index") - ] - - class Loader: def __init__(self, engine: str = "", **kwargs): self.engine = engine diff --git a/backend/open_webui/retrieval/loaders/mistral.py b/backend/open_webui/retrieval/loaders/mistral.py new file mode 100644 index 00000000000..2203a5b6d4a --- /dev/null +++ b/backend/open_webui/retrieval/loaders/mistral.py @@ -0,0 +1,226 @@ +import requests +import logging +import os +import sys +from typing import List, Dict, Any + +from langchain_core.documents import Document +from open_webui.env import SRC_LOG_LEVELS, GLOBAL_LOG_LEVEL + +logging.basicConfig(stream=sys.stdout, level=GLOBAL_LOG_LEVEL) +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["RAG"]) + + +class MistralLoader: + """ + Loads documents by processing them through the Mistral OCR API using requests. + """ + + BASE_API_URL = "https://api.mistral.ai/v1" + + def __init__(self, api_key: str, file_path: str): + """ + Initializes the loader. + + Args: + api_key: Your Mistral API key. + file_path: The local path to the PDF file to process. + """ + if not api_key: + raise ValueError("API key cannot be empty.") + if not os.path.exists(file_path): + raise FileNotFoundError(f"File not found at {file_path}") + + self.api_key = api_key + self.file_path = file_path + self.headers = {"Authorization": f"Bearer {self.api_key}"} + + def _handle_response(self, response: requests.Response) -> Dict[str, Any]: + """Checks response status and returns JSON content.""" + try: + response.raise_for_status() # Raises HTTPError for bad responses (4xx or 5xx) + # Handle potential empty responses for certain successful requests (e.g., DELETE) + if response.status_code == 204 or not response.content: + return {} # Return empty dict if no content + return response.json() + except requests.exceptions.HTTPError as http_err: + log.error(f"HTTP error occurred: {http_err} - Response: {response.text}") + raise + except requests.exceptions.RequestException as req_err: + log.error(f"Request exception occurred: {req_err}") + raise + except ValueError as json_err: # Includes JSONDecodeError + log.error(f"JSON decode error: {json_err} - Response: {response.text}") + raise # Re-raise after logging + + def _upload_file(self) -> str: + """Uploads the file to Mistral for OCR processing.""" + log.info("Uploading file to Mistral API") + url = f"{self.BASE_API_URL}/files" + file_name = os.path.basename(self.file_path) + + try: + with open(self.file_path, "rb") as f: + files = {"file": (file_name, f, "application/pdf")} + data = {"purpose": "ocr"} + # No explicit Content-Type header needed here, requests handles it for multipart/form-data + upload_headers = self.headers.copy() # Avoid modifying self.headers + + response = requests.post( + url, headers=upload_headers, files=files, data=data + ) + + response_data = self._handle_response(response) + file_id = response_data.get("id") + if not file_id: + raise ValueError("File ID not found in upload response.") + log.info(f"File uploaded successfully. File ID: {file_id}") + return file_id + except Exception as e: + log.error(f"Failed to upload file: {e}") + raise + + def _get_signed_url(self, file_id: str) -> str: + """Retrieves a temporary signed URL for the uploaded file.""" + log.info(f"Getting signed URL for file ID: {file_id}") + url = f"{self.BASE_API_URL}/files/{file_id}/url" + # Using expiry=24 as per the curl example; adjust if needed. + params = {"expiry": 24} + signed_url_headers = {**self.headers, "Accept": "application/json"} + + try: + response = requests.get(url, headers=signed_url_headers, params=params) + response_data = self._handle_response(response) + signed_url = response_data.get("url") + if not signed_url: + raise ValueError("Signed URL not found in response.") + log.info("Signed URL received.") + return signed_url + except Exception as e: + log.error(f"Failed to get signed URL: {e}") + raise + + def _process_ocr(self, signed_url: str) -> Dict[str, Any]: + """Sends the signed URL to the OCR endpoint for processing.""" + log.info("Processing OCR via Mistral API") + url = f"{self.BASE_API_URL}/ocr" + ocr_headers = { + **self.headers, + "Content-Type": "application/json", + "Accept": "application/json", + } + payload = { + "model": "mistral-ocr-latest", + "document": { + "type": "document_url", + "document_url": signed_url, + }, + # "include_image_base64": False # Explicitly set if needed, default seems false + } + + try: + response = requests.post(url, headers=ocr_headers, json=payload) + ocr_response = self._handle_response(response) + log.info("OCR processing done.") + log.debug("OCR response: %s", ocr_response) + return ocr_response + except Exception as e: + log.error(f"Failed during OCR processing: {e}") + raise + + def _delete_file(self, file_id: str) -> None: + """Deletes the file from Mistral storage.""" + log.info(f"Deleting uploaded file ID: {file_id}") + url = f"{self.BASE_API_URL}/files/{file_id}" + # No specific Accept header needed, default or Authorization is usually sufficient + + try: + response = requests.delete(url, headers=self.headers) + delete_response = self._handle_response( + response + ) # Check status, ignore response body unless needed + log.info( + f"File deleted successfully: {delete_response}" + ) # Log the response if available + except Exception as e: + # Log error but don't necessarily halt execution if deletion fails + log.error(f"Failed to delete file ID {file_id}: {e}") + # Depending on requirements, you might choose to raise the error here + + def load(self) -> List[Document]: + """ + Executes the full OCR workflow: upload, get URL, process OCR, delete file. + + Returns: + A list of Document objects, one for each page processed. + """ + file_id = None + try: + # 1. Upload file + file_id = self._upload_file() + + # 2. Get Signed URL + signed_url = self._get_signed_url(file_id) + + # 3. Process OCR + ocr_response = self._process_ocr(signed_url) + + # 4. Process results + pages_data = ocr_response.get("pages") + if not pages_data: + log.warning("No pages found in OCR response.") + return [Document(page_content="No text content found", metadata={})] + + documents = [] + total_pages = len(pages_data) + for page_data in pages_data: + page_content = page_data.get("markdown") + page_index = page_data.get("index") # API uses 0-based index + + if page_content is not None and page_index is not None: + documents.append( + Document( + page_content=page_content, + metadata={ + "page": page_index, # 0-based index from API + "page_label": page_index + + 1, # 1-based label for convenience + "total_pages": total_pages, + # Add other relevant metadata from page_data if available/needed + # e.g., page_data.get('width'), page_data.get('height') + }, + ) + ) + else: + log.warning( + f"Skipping page due to missing 'markdown' or 'index'. Data: {page_data}" + ) + + if not documents: + # Case where pages existed but none had valid markdown/index + log.warning( + "OCR response contained pages, but none had valid content/index." + ) + return [ + Document( + page_content="No text content found in valid pages", metadata={} + ) + ] + + return documents + + except Exception as e: + log.error(f"An error occurred during the loading process: {e}") + # Return an empty list or a specific error document on failure + return [Document(page_content=f"Error during processing: {e}", metadata={})] + finally: + # 5. Delete file (attempt even if prior steps failed after upload) + if file_id: + try: + self._delete_file(file_id) + except Exception as del_e: + # Log deletion error, but don't overwrite original error if one occurred + log.error( + f"Cleanup error: Could not delete file ID {file_id}. Reason: {del_e}" + ) diff --git a/backend/requirements.txt b/backend/requirements.txt index 078d8d2d34e..ca2ea50609d 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -77,7 +77,6 @@ psutil sentencepiece soundfile==0.13.1 azure-ai-documentintelligence==1.0.0 -mistralai==1.6.0 pillow==11.1.0 opencv-python-headless==4.11.0.86 From c5a8d2f8571a801dffd4795eec2eb616cf9260d3 Mon Sep 17 00:00:00 2001 From: Patrick Wachter Date: Tue, 1 Apr 2025 19:14:26 +0200 Subject: [PATCH 024/129] refactor: update MistralLoader documentation and adjust parameters for signed URL retrieval --- backend/open_webui/retrieval/loaders/mistral.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/backend/open_webui/retrieval/loaders/mistral.py b/backend/open_webui/retrieval/loaders/mistral.py index 2203a5b6d4a..8f3a960a283 100644 --- a/backend/open_webui/retrieval/loaders/mistral.py +++ b/backend/open_webui/retrieval/loaders/mistral.py @@ -14,7 +14,7 @@ class MistralLoader: """ - Loads documents by processing them through the Mistral OCR API using requests. + Loads documents by processing them through the Mistral OCR API. """ BASE_API_URL = "https://api.mistral.ai/v1" @@ -64,7 +64,7 @@ def _upload_file(self) -> str: with open(self.file_path, "rb") as f: files = {"file": (file_name, f, "application/pdf")} data = {"purpose": "ocr"} - # No explicit Content-Type header needed here, requests handles it for multipart/form-data + upload_headers = self.headers.copy() # Avoid modifying self.headers response = requests.post( @@ -85,8 +85,7 @@ def _get_signed_url(self, file_id: str) -> str: """Retrieves a temporary signed URL for the uploaded file.""" log.info(f"Getting signed URL for file ID: {file_id}") url = f"{self.BASE_API_URL}/files/{file_id}/url" - # Using expiry=24 as per the curl example; adjust if needed. - params = {"expiry": 24} + params = {"expiry": 1} signed_url_headers = {**self.headers, "Accept": "application/json"} try: @@ -116,7 +115,7 @@ def _process_ocr(self, signed_url: str) -> Dict[str, Any]: "type": "document_url", "document_url": signed_url, }, - # "include_image_base64": False # Explicitly set if needed, default seems false + "include_image_base64": False, } try: From 2b7dd6e39999a5b2aaa45d095638a1231edf796d Mon Sep 17 00:00:00 2001 From: landerrosette <57791410+landerrosette@users.noreply.github.com> Date: Wed, 2 Apr 2025 02:58:02 +0800 Subject: [PATCH 025/129] refactor: standardize filter valve retrieval logic --- backend/open_webui/utils/filter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/open_webui/utils/filter.py b/backend/open_webui/utils/filter.py index a11aeb092c8..76c9db9eb1a 100644 --- a/backend/open_webui/utils/filter.py +++ b/backend/open_webui/utils/filter.py @@ -12,9 +12,9 @@ def get_sorted_filter_ids(model: dict): def get_priority(function_id): function = Functions.get_function_by_id(function_id) - if function is not None and hasattr(function, "valves"): - # TODO: Fix FunctionModel to include vavles - return (function.valves if function.valves else {}).get("priority", 0) + if function is not None: + valves = Functions.get_function_valves_by_id(function_id) + return valves.get("priority", 0) if valves else 0 return 0 filter_ids = [function.id for function in Functions.get_global_filter_functions()] From adaa61498610b70502008659b22a865a583e5836 Mon Sep 17 00:00:00 2001 From: Panda Date: Wed, 2 Apr 2025 10:35:05 +0200 Subject: [PATCH 026/129] fix --- src/lib/i18n/locales/zh-CN/translation.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index cafcd152ab6..35ffc2e0e16 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -344,7 +344,7 @@ "Draw": "平局", "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'。", - "e.g. \"json\" or a JSON schema": "例如 \"json\" 或 JSON 结构", + "e.g. \"json\" or a JSON schema": "例如 \"json\" 或一个 JSON schema", "e.g. 60": "例如 '60'", "e.g. A filter to remove profanity from text": "例如:一个用于过滤文本中不当内容的过滤器", "e.g. My Filter": "例如:我的过滤器", @@ -608,7 +608,7 @@ "Integration": "集成", "Interface": "界面", "Invalid file format.": "无效文件格式。", - "Invalid JSON schema": "无效的 JSON", + "Invalid JSON schema": "无效的 JSON schema", "Invalid Tag": "无效标签", "is typing...": "输入中...", "January": "一月", @@ -835,7 +835,7 @@ "Profile Image": "用户头像", "Prompt": "提示词 (Prompt)", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "提示词(例如:给我讲一个关于罗马帝国的趣事。)", - "Prompt Autocompletion": "提示词自动完成", + "Prompt Autocompletion": "提示词自动补全", "Prompt Content": "提示词内容", "Prompt created successfully": "提示词创建成功", "Prompt suggestions": "提示词建议", @@ -1061,7 +1061,7 @@ "Tiktoken": "Tiktoken", "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 (e.g. Tell me a fun fact)": "标题(例如:给我讲一个有趣的事实)", "Title Auto-Generation": "自动生成标题", "Title cannot be an empty string.": "标题不能为空。", "Title Generation": "标题生成", @@ -1134,7 +1134,7 @@ "Upload Progress": "上传进度", "URL": "URL", "URL Mode": "URL 模式", - "Use '#' in the prompt input to load and include your knowledge.": "在输入框中输入'#'号来加载你需要的知识库内容。", + "Use '#' in the prompt input to load and include your knowledge.": "在输入框中输入 '#' 号来加载你需要的知识库内容。", "Use Gravatar": "使用来自 Gravatar 的头像", "Use groups to group your users and assign permissions.": "使用权限组来组织用户并分配权限。", "Use Initials": "使用首个字符作为头像", From 0ac00b92569bd023de08c73663e6fe2314564e11 Mon Sep 17 00:00:00 2001 From: Patrick Wachter Date: Wed, 2 Apr 2025 13:56:10 +0200 Subject: [PATCH 027/129] refactor: update import path for MistralLoader --- backend/open_webui/retrieval/loaders/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/open_webui/retrieval/loaders/main.py b/backend/open_webui/retrieval/loaders/main.py index e1b485b84ba..7098822b421 100644 --- a/backend/open_webui/retrieval/loaders/main.py +++ b/backend/open_webui/retrieval/loaders/main.py @@ -21,7 +21,7 @@ ) from langchain_core.documents import Document -from .mistral import MistralLoader +from open_webui.retrieval.loaders.mistral import MistralLoader from open_webui.env import SRC_LOG_LEVELS, GLOBAL_LOG_LEVEL From de8f94b00896220f7d554945edce814de080dc1f Mon Sep 17 00:00:00 2001 From: SadmL Date: Wed, 2 Apr 2025 18:13:52 +0300 Subject: [PATCH 028/129] [i18n] Russian localization update Fixed typos and translated some lines --- src/lib/i18n/locales/ru-RU/translation.json | 50 ++++++++++----------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index d68173e8979..50c47034436 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -70,8 +70,8 @@ "Already have an account?": "У вас уже есть учетная запись?", "Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out.": "Альтернатива top_p и направлена на обеспечение баланса качества и разнообразия. Параметр p представляет минимальную вероятность того, что токен будет рассмотрен, по сравнению с вероятностью наиболее вероятного токена. Например, при p=0,05 и наиболее вероятном значении токена, имеющем вероятность 0,9, логиты со значением менее 0,045 отфильтровываются.", "Always": "Всегда", - "Always Collapse Code Blocks": "", - "Always Expand Details": "", + "Always Collapse Code Blocks": "Всегда сворачивать блоки кода", + "Always Expand Details": "Всегда разворачивать детали", "Amazing": "Удивительный", "an assistant": "ассистент", "Analyzed": "Проанализировано", @@ -97,7 +97,7 @@ "Are you sure you want to delete this message?": "Вы уверены, что хотите удалить это сообщение?", "Are you sure you want to unarchive all archived chats?": "Вы уверены, что хотите разархивировать все заархивированные чаты?", "Are you sure?": "Вы уверены?", - "Arena Models": "Модели арены", + "Arena Models": "Арена моделей", "Artifacts": "Артефакты", "Ask": "Спросить", "Ask a question": "Задать вопрос", @@ -191,10 +191,10 @@ "Clone Chat": "Клонировать чат", "Clone of {{TITLE}}": "Клон {{TITLE}}", "Close": "Закрыть", - "Code execution": "Выполнение кода", - "Code Execution": "Выполнение кода", - "Code Execution Engine": "Механизм выполнения кода", - "Code Execution Timeout": "Время ожидания выполнения кода", + "Code execution": "Исполнение кода", + "Code Execution": "Исполнение кода", + "Code Execution Engine": "Механизм исполнения кода", + "Code Execution Timeout": "Время ожидания исполнения кода", "Code formatted successfully": "Код успешно отформатирован", "Code Interpreter": "Интерпретатор кода", "Code Interpreter Engine": "Механизм интерпретатора кода", @@ -206,8 +206,8 @@ "ComfyUI API Key": "ComfyUI ключ API", "ComfyUI Base URL": "Базовый адрес URL ComfyUI", "ComfyUI Base URL is required.": "Необходим базовый адрес URL ComfyUI.", - "ComfyUI Workflow": "ComfyUI Workflow", - "ComfyUI Workflow Nodes": "Узлы ComfyUI Workflow", + "ComfyUI Workflow": "Рабочий процесс ComfyUI", + "ComfyUI Workflow Nodes": "Узлы рабочего процесса ComfyUI", "Command": "Команда", "Completions": "Завершения", "Concurrent Requests": "Одновременные запросы", @@ -217,8 +217,8 @@ "Confirm your action": "Подтвердите свое действие", "Confirm your new password": "Подтвердите свой новый пароль", "Connect to your own OpenAI compatible API endpoints.": "Подключитесь к своим собственным энд-поинтам API, совместимым с OpenAI.", - "Connect to your own OpenAPI compatible external tool servers.": "", - "Connections": "Соединение", + "Connect to your own OpenAPI compatible external tool servers.": "Подключитесь к вашим собственным внешним инструментальным серверам, совместимым с OpenAPI.", + "Connections": "Подключения", "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "Ограничивает усилия по обоснованию для моделей обоснования. Применимо только к моделям обоснования от конкретных поставщиков, которые поддерживают усилия по обоснованию.", "Contact Admin for WebUI Access": "Обратитесь к администратору для получения доступа к WebUI", "Content": "Содержание", @@ -370,7 +370,7 @@ "Embedding model set to \"{{embedding_model}}\"": "Модель встраивания установлена в \"{{embedding_model}}\"", "Enable API Key": "Включить ключ API", "Enable autocomplete generation for chat messages": "Включить генерацию автозаполнения для сообщений чата", - "Enable Code Execution": "Включить выполнение кода", + "Enable Code Execution": "Включить исполнение кода", "Enable Code Interpreter": "Включить интерпретатор кода", "Enable Community Sharing": "Включить совместное использование", "Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "Включите блокировку памяти (mlock), чтобы предотвратить выгрузку данных модели из ОЗУ. Эта опция блокирует рабочий набор страниц модели в оперативной памяти, гарантируя, что они не будут выгружены на диск. Это может помочь поддерживать производительность, избегая ошибок страниц и обеспечивая быстрый доступ к данным.", @@ -589,7 +589,7 @@ "Image Prompt Generation Prompt": "Промпт для создание промпта изображения", "Image Settings": "Настройки изображения", "Images": "Изображения", - "Import Chats": "Импортировать Чаты", + "Import Chats": "Импортировать чаты", "Import Config from JSON File": "Импорт конфигурации из JSON-файла", "Import Functions": "Импортировать Функции", "Import Models": "Импортировать Модели", @@ -636,11 +636,11 @@ "Kokoro.js (Browser)": "Kokoro.js (Браузер)", "Kokoro.js Dtype": "", "Label": "Пометка", - "Landing Page Mode": "Режим Целевой Страницы", + "Landing Page Mode": "Режим целевой страницы", "Language": "Язык", - "Last Active": "Последний Активный", - "Last Modified": "Последнее Изменение", - "Last reply": "Последний Ответ", + "Last Active": "Последний активный", + "Last Modified": "Последнее изменение", + "Last reply": "Последний ответ", "LDAP": "", "LDAP server updated": "LDAP сервер обновлен", "Leaderboard": "Таблица Лидеров", @@ -655,7 +655,7 @@ "Listening...": "Слушаю...", "Llama.cpp": "", "LLMs can make mistakes. Verify important information.": "LLMs могут допускать ошибки. Проверяйте важную информацию.", - "Loader": "", + "Loader": "Загрузчик", "Loading Kokoro.js...": "", "Local": "", "Local Models": "Локальные модели", @@ -673,7 +673,7 @@ "Manage Ollama API Connections": "Управление соединениями API Ollama", "Manage OpenAI API Connections": "Управление соединениями API OpenAI", "Manage Pipelines": "Управление конвейерами", - "Manage Tool Servers": "", + "Manage Tool Servers": "Управление серверами инструментов", "March": "Март", "Max Tokens (num_predict)": "Максимальное количество токенов (num_predict)", "Max Upload Count": "Максимальное количество загрузок", @@ -835,7 +835,7 @@ "Profile Image": "Изображение профиля", "Prompt": "Промпт", "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Промпт (например, Расскажи мне интересный факт о Римской империи)", - "Prompt Autocompletion": "", + "Prompt Autocompletion": "Автодополнение промпта", "Prompt Content": "Содержание промпта", "Prompt created successfully": "Промпт успешно создан", "Prompt suggestions": "Предложения промптов", @@ -900,7 +900,7 @@ "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": "Прямое сохранение журналов чата в хранилище вашего браузера больше не поддерживается. Пожалуйста, потратьте минуту, чтобы скачать и удалить ваши журналы чата, нажав на кнопку ниже. Не волнуйтесь, вы легко сможете повторно импортировать свои журналы чата в бэкенд через", "Scroll to bottom when switching between branches": "Прокручивать вниз при переключении веток", "Search": "Поиск", - "Search a model": "Поиск модели", + "Search a model": "Поиск по моделям", "Search Base": "Поиск в базе", "Search Chats": "Поиск в чатах", "Search Collection": "Поиск коллекции", @@ -916,7 +916,7 @@ "Search Tools": "Поиск инструментов", "SearchApi API Key": "Ключ SearchApi API", "SearchApi Engine": "Движок SearchApi", - "Searched {{count}} sites": "Поиск по {{count}} сайтам]", + "Searched {{count}} sites": "Поиск по {{count}} сайтам", "Searching \"{{searchQuery}}\"": "Поиск по запросу \"{{searchQuery}}\"", "Searching Knowledge for \"{{searchQuery}}\"": "Поиск знания для \"{{searchQuery}}\"", "Searxng Query URL": "URL-адрес запроса Searxng", @@ -962,7 +962,7 @@ "Set Task Model": "Установить модель задачи", "Set the number of layers, which will be off-loaded to GPU. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "Задайте количество слоев, которые будут загружаться в графический процессор. Увеличение этого значения может значительно повысить производительность моделей, оптимизированных для ускорения работы графического процессора, но также может потреблять больше энергии и ресурсов графического процессора.", "Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "Задайте количество рабочих потоков, используемых для вычислений. Этот параметр определяет, сколько потоков используется для одновременной обработки входящих запросов. Увеличение этого значения может повысить производительность при высоких рабочих нагрузках с параллелизмом, но также может потреблять больше ресурсов процессора.", - "Set Voice": "Установить голос", + "Set Voice": "Задать голос", "Set whisper model": "Выбрать модель whiser", "Sets a flat bias against tokens that have appeared at least once. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "Устанавливает нулевое значение для символов, которые появились хотя бы один раз. Более высокое значение (например, 1,5) будет более строгим наказанием за повторения, в то время как более низкое значение (например, 0,9) будет более мягким. При значении 0 он отключается.", "Sets a scaling bias against tokens to penalize repetitions, based on how many times they have appeared. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. At 0, it is disabled.": "Устанавливает смещение масштабирования для токенов, чтобы наказывать за повторения, в зависимости от того, сколько раз они появлялись. Более высокое значение (например, 1,5) будет наказывать за повторения более строго, в то время как более низкое значение (например, 0,9) будет более мягким. При значении 0 оно отключается.", @@ -1111,7 +1111,7 @@ "Uh-oh! There was an issue with the response.": "Печаль-беда! Возникла проблема с ответом.", "UI": "Пользовательский интерфейс", "Unarchive All": "Разархивировать ВСЁ", - "Unarchive All Archived Chats": "Разархивировать ВСЕ Заархивированные Чаты", + "Unarchive All Archived Chats": "Разархивировать ВСЕ Заархивированные чаты", "Unarchive Chat": "Разархивировать чат", "Unlock mysteries": "Разблокируйте тайны", "Unpin": "Открепить", @@ -1143,7 +1143,7 @@ "user": "пользователь", "User": "Пользователь", "User location successfully retrieved.": "Местоположение пользователя успешно получено.", - "User Webhooks": "", + "User Webhooks": "Пользовательские веб-хуки", "Username": "Имя пользователя", "Users": "Пользователи", "Using the default arena model with all models. Click the plus button to add custom models.": "Использование модели арены по умолчанию со всеми моделями. Нажмите кнопку «плюс», чтобы добавить пользовательские модели.", From d65471c4201381d0d4fc8b99d595c8dce8871235 Mon Sep 17 00:00:00 2001 From: Silentoplayz <50341825+Silentoplayz@users.noreply.github.com> Date: Wed, 2 Apr 2025 11:28:45 -0400 Subject: [PATCH 029/129] fix my dev environment works again! --- backend/open_webui/env.py | 4 ++-- backend/open_webui/utils/auth.py | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index e3819fdc5ed..cd2b063ac38 100644 --- a/backend/open_webui/env.py +++ b/backend/open_webui/env.py @@ -66,7 +66,7 @@ #################################### GLOBAL_LOG_LEVEL = os.environ.get("GLOBAL_LOG_LEVEL", "").upper() -if GLOBAL_LOG_LEVEL in logging.getLevelNamesMapping(): +if GLOBAL_LOG_LEVEL in logging._levelToName: logging.basicConfig(stream=sys.stdout, level=GLOBAL_LOG_LEVEL, force=True) else: GLOBAL_LOG_LEVEL = "INFO" @@ -99,7 +99,7 @@ for source in log_sources: log_env_var = source + "_LOG_LEVEL" SRC_LOG_LEVELS[source] = os.environ.get(log_env_var, "").upper() - if SRC_LOG_LEVELS[source] not in logging.getLevelNamesMapping(): + if SRC_LOG_LEVELS[source] not in logging._levelToName: SRC_LOG_LEVELS[source] = GLOBAL_LOG_LEVEL log.info(f"{log_env_var}: {SRC_LOG_LEVELS[source]}") diff --git a/backend/open_webui/utils/auth.py b/backend/open_webui/utils/auth.py index 6dd3234b061..54ad6a0bf22 100644 --- a/backend/open_webui/utils/auth.py +++ b/backend/open_webui/utils/auth.py @@ -8,7 +8,9 @@ import os -from datetime import UTC, datetime, timedelta +from datetime import datetime, timedelta +import pytz +from pytz import UTC from typing import Optional, Union, List, Dict from open_webui.models.users import Users From ee68c9ea5556c23f76d62b50eeab28908446dc5d Mon Sep 17 00:00:00 2001 From: Silentoplayz <50341825+Silentoplayz@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:25:03 -0400 Subject: [PATCH 030/129] Update Chats.svelte Added Archived Chats option in Chats settings section --- src/lib/components/chat/Settings/Chats.svelte | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/lib/components/chat/Settings/Chats.svelte b/src/lib/components/chat/Settings/Chats.svelte index 2eaea240ffc..7a252458f3a 100644 --- a/src/lib/components/chat/Settings/Chats.svelte +++ b/src/lib/components/chat/Settings/Chats.svelte @@ -16,6 +16,7 @@ import { onMount, getContext } from 'svelte'; import { goto } from '$app/navigation'; import { toast } from 'svelte-sonner'; + import ArchivedChatsModal from '$lib/components/layout/Sidebar/ArchivedChatsModal.svelte'; const i18n = getContext('i18n'); @@ -26,6 +27,7 @@ let showArchiveConfirm = false; let showDeleteConfirm = false; + let showArchivedChatsModal = false; let chatImportInputElement: HTMLInputElement; @@ -95,8 +97,16 @@ await chats.set(await getChatList(localStorage.token, $currentChatPage)); scrollPaginationEnabled.set(true); }; + + const handleArchivedChatsChange = async () => { + currentChatPage.set(1); + await chats.set(await getChatList(localStorage.token, $currentChatPage)); + scrollPaginationEnabled.set(true); + }; + +
@@ -157,6 +167,32 @@
+ + {#if showArchiveConfirm}
From 548c7f17d7ec26144f22402f50348b4eb07b4bad Mon Sep 17 00:00:00 2001 From: CityOfBunbury <165870542+CityOfBunbury@users.noreply.github.com> Date: Thu, 3 Apr 2025 08:24:14 +0800 Subject: [PATCH 031/129] Added OAUTH_USE_PICTURE_CLAIM env var Added OAUTH_USE_PICTURE_CLAIM to config.py Added check to oauth.py on OAUTH_USE_PICTURE_CLAIM, to decide whether to user the profile picture in the claim or the default user.png --- backend/open_webui/config.py | 6 +++ backend/open_webui/utils/oauth.py | 75 +++++++++++++++++-------------- 2 files changed, 47 insertions(+), 34 deletions(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 0ac92bd23bd..6dad20f61dd 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -331,6 +331,12 @@ def __getattr__(self, key): # OAuth config #################################### +OAUTH_USE_PICTURE_CLAIM = PersistentConfig( + "OAUTH_USE_PICTURE_CLAIM", + "oauth.oidc.use_picture_claim", + os.environ.get("OAUTH_USE_PICTURE_CLAIM", "True").lower() == "true", +) + ENABLE_OAUTH_SIGNUP = PersistentConfig( "ENABLE_OAUTH_SIGNUP", "oauth.enable_signup", diff --git a/backend/open_webui/utils/oauth.py b/backend/open_webui/utils/oauth.py index ab50247d8bd..75c3842a64d 100644 --- a/backend/open_webui/utils/oauth.py +++ b/backend/open_webui/utils/oauth.py @@ -23,6 +23,7 @@ OAUTH_PROVIDERS, ENABLE_OAUTH_ROLE_MANAGEMENT, ENABLE_OAUTH_GROUP_MANAGEMENT, + OAUTH_USE_PICTURE_CLAIM, OAUTH_ROLES_CLAIM, OAUTH_GROUPS_CLAIM, OAUTH_EMAIL_CLAIM, @@ -57,6 +58,7 @@ auth_manager_config.OAUTH_MERGE_ACCOUNTS_BY_EMAIL = OAUTH_MERGE_ACCOUNTS_BY_EMAIL auth_manager_config.ENABLE_OAUTH_ROLE_MANAGEMENT = ENABLE_OAUTH_ROLE_MANAGEMENT auth_manager_config.ENABLE_OAUTH_GROUP_MANAGEMENT = ENABLE_OAUTH_GROUP_MANAGEMENT +auth_manager_config.OAUTH_USE_PICTURE_CLAIM = OAUTH_USE_PICTURE_CLAIM auth_manager_config.OAUTH_ROLES_CLAIM = OAUTH_ROLES_CLAIM auth_manager_config.OAUTH_GROUPS_CLAIM = OAUTH_GROUPS_CLAIM auth_manager_config.OAUTH_EMAIL_CLAIM = OAUTH_EMAIL_CLAIM @@ -325,41 +327,46 @@ async def handle_callback(self, request, provider, response): if existing_user: raise HTTPException(400, detail=ERROR_MESSAGES.EMAIL_TAKEN) - picture_claim = auth_manager_config.OAUTH_PICTURE_CLAIM - picture_url = user_data.get( - picture_claim, OAUTH_PROVIDERS[provider].get("picture_url", "") - ) - if picture_url: - # Download the profile image into a base64 string - try: - access_token = token.get("access_token") - get_kwargs = {} - if access_token: - get_kwargs["headers"] = { - "Authorization": f"Bearer {access_token}", - } - async with aiohttp.ClientSession() as session: - async with session.get(picture_url, **get_kwargs) as resp: - if resp.ok: - 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}" - else: - picture_url = "/user.png" - except Exception as e: - log.error( - f"Error downloading profile image '{picture_url}': {e}" - ) + # Check if we should use the picture claim based on configuration + if auth_manager_config.OAUTH_USE_PICTURE_CLAIM: + picture_claim = auth_manager_config.OAUTH_PICTURE_CLAIM + picture_url = user_data.get( + picture_claim, OAUTH_PROVIDERS[provider].get("picture_url", "") + ) + if picture_url: + # Download the profile image into a base64 string + try: + access_token = token.get("access_token") + get_kwargs = {} + if access_token: + get_kwargs["headers"] = { + "Authorization": f"Bearer {access_token}", + } + async with aiohttp.ClientSession() as session: + async with session.get(picture_url, **get_kwargs) as resp: + if resp.ok: + 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}" + else: + picture_url = "/user.png" + except Exception as e: + log.error( + f"Error downloading profile image '{picture_url}': {e}" + ) + picture_url = "/user.png" + if not picture_url: picture_url = "/user.png" - if not picture_url: + else: + # If OAUTH_USE_PICTURE_CLAIM is False, just use the default image picture_url = "/user.png" username_claim = auth_manager_config.OAUTH_USERNAME_CLAIM From dd5bafe8afcc22c53da5c38989a5b19bf11cc198 Mon Sep 17 00:00:00 2001 From: silentoplayz <50341825+silentoplayz@users.noreply.github.com> Date: Thu, 3 Apr 2025 00:36:16 +0000 Subject: [PATCH 032/129] Update env.py Revert --- backend/open_webui/env.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index cd2b063ac38..e3819fdc5ed 100644 --- a/backend/open_webui/env.py +++ b/backend/open_webui/env.py @@ -66,7 +66,7 @@ #################################### GLOBAL_LOG_LEVEL = os.environ.get("GLOBAL_LOG_LEVEL", "").upper() -if GLOBAL_LOG_LEVEL in logging._levelToName: +if GLOBAL_LOG_LEVEL in logging.getLevelNamesMapping(): logging.basicConfig(stream=sys.stdout, level=GLOBAL_LOG_LEVEL, force=True) else: GLOBAL_LOG_LEVEL = "INFO" @@ -99,7 +99,7 @@ for source in log_sources: log_env_var = source + "_LOG_LEVEL" SRC_LOG_LEVELS[source] = os.environ.get(log_env_var, "").upper() - if SRC_LOG_LEVELS[source] not in logging._levelToName: + if SRC_LOG_LEVELS[source] not in logging.getLevelNamesMapping(): SRC_LOG_LEVELS[source] = GLOBAL_LOG_LEVEL log.info(f"{log_env_var}: {SRC_LOG_LEVELS[source]}") From 0644abe402bff77876829ae3ee0dca1f203dba6b Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 2 Apr 2025 17:55:24 -0700 Subject: [PATCH 033/129] fix: admin folder deletion issue --- backend/open_webui/routers/folders.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/routers/folders.py b/backend/open_webui/routers/folders.py index cf37f9329da..2c41c92854b 100644 --- a/backend/open_webui/routers/folders.py +++ b/backend/open_webui/routers/folders.py @@ -236,7 +236,8 @@ async def delete_folder_by_id( chat_delete_permission = has_permission( user.id, "chat.delete", request.app.state.config.USER_PERMISSIONS ) - if not chat_delete_permission: + + if user.role != "admin" and not chat_delete_permission: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.ACCESS_PROHIBITED, From 94bf49440d981eb42b6a181403248ca7fadb3df7 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 2 Apr 2025 18:15:14 -0700 Subject: [PATCH 034/129] enh: unload hybrid model if set to False --- backend/open_webui/routers/retrieval.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/routers/retrieval.py b/backend/open_webui/routers/retrieval.py index 979cd2c70c2..250d27eb394 100644 --- a/backend/open_webui/routers/retrieval.py +++ b/backend/open_webui/routers/retrieval.py @@ -124,7 +124,7 @@ def get_ef( def get_rf( - reranking_model: str, + reranking_model: Optional[str] = None, auto_update: bool = False, ): rf = None @@ -762,6 +762,9 @@ async def update_query_settings( form_data.hybrid if form_data.hybrid else False ) + if not request.app.state.config.ENABLE_RAG_HYBRID_SEARCH: + request.app.state.rf = None + return { "status": True, "template": request.app.state.config.RAG_TEMPLATE, From 7eea95a48c60e7d3833481bb0bf7369f7a77590d Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 2 Apr 2025 18:36:03 -0700 Subject: [PATCH 035/129] feat: direct tools user permissions --- backend/open_webui/config.py | 6 ++++++ backend/open_webui/routers/users.py | 1 + src/lib/components/admin/Users/Groups.svelte | 1 + .../components/admin/Users/Groups/EditGroupModal.svelte | 7 +++++++ src/lib/components/admin/Users/Groups/Permissions.svelte | 9 +++++++++ src/lib/components/chat/SettingsModal.svelte | 2 +- 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 02f61696ecc..0bafc98ae78 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1034,6 +1034,11 @@ def oidc_oauth_register(client): == "true" ) +USER_PERMISSIONS_FEATURES_DIRECT_TOOL_SERVERS = ( + os.environ.get("USER_PERMISSIONS_FEATURES_DIRECT_TOOL_SERVERS", "False").lower() + == "true" +) + USER_PERMISSIONS_FEATURES_WEB_SEARCH = ( os.environ.get("USER_PERMISSIONS_FEATURES_WEB_SEARCH", "True").lower() == "true" ) @@ -1071,6 +1076,7 @@ def oidc_oauth_register(client): "temporary_enforced": USER_PERMISSIONS_CHAT_TEMPORARY_ENFORCED, }, "features": { + "direct_tool_servers": USER_PERMISSIONS_FEATURES_DIRECT_TOOL_SERVERS, "web_search": USER_PERMISSIONS_FEATURES_WEB_SEARCH, "image_generation": USER_PERMISSIONS_FEATURES_IMAGE_GENERATION, "code_interpreter": USER_PERMISSIONS_FEATURES_CODE_INTERPRETER, diff --git a/backend/open_webui/routers/users.py b/backend/open_webui/routers/users.py index 4cf9102e144..d1046bcedb8 100644 --- a/backend/open_webui/routers/users.py +++ b/backend/open_webui/routers/users.py @@ -93,6 +93,7 @@ class ChatPermissions(BaseModel): class FeaturesPermissions(BaseModel): + direct_tool_servers: bool = False web_search: bool = True image_generation: bool = True code_interpreter: bool = True diff --git a/src/lib/components/admin/Users/Groups.svelte b/src/lib/components/admin/Users/Groups.svelte index e2375a624e9..e287feb1d53 100644 --- a/src/lib/components/admin/Users/Groups.svelte +++ b/src/lib/components/admin/Users/Groups.svelte @@ -67,6 +67,7 @@ temporary_enforced: false }, features: { + direct_tool_servers: false, web_search: true, image_generation: true, code_interpreter: true diff --git a/src/lib/components/admin/Users/Groups/EditGroupModal.svelte b/src/lib/components/admin/Users/Groups/EditGroupModal.svelte index e492cc9b6d2..5b6bf6aabc7 100644 --- a/src/lib/components/admin/Users/Groups/EditGroupModal.svelte +++ b/src/lib/components/admin/Users/Groups/EditGroupModal.svelte @@ -38,6 +38,12 @@ prompts: false, tools: false }, + sharing: { + public_models: false, + public_knowledge: false, + public_prompts: false, + public_tools: false + }, chat: { controls: true, file_upload: true, @@ -46,6 +52,7 @@ temporary: true }, features: { + direct_tool_servers: false, web_search: true, image_generation: true, code_interpreter: true diff --git a/src/lib/components/admin/Users/Groups/Permissions.svelte b/src/lib/components/admin/Users/Groups/Permissions.svelte index 389477166f0..5dac0de94c6 100644 --- a/src/lib/components/admin/Users/Groups/Permissions.svelte +++ b/src/lib/components/admin/Users/Groups/Permissions.svelte @@ -28,6 +28,7 @@ temporary_enforced: false }, features: { + direct_tool_servers: false, web_search: true, image_generation: true, code_interpreter: true @@ -295,6 +296,14 @@
{$i18n.t('Features Permissions')}
+
+
+ {$i18n.t('Direct Tool Servers')} +
+ + +
+
{$i18n.t('Web Search')} diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index 15bf9c0baeb..ed2e9eb7a6d 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/src/lib/components/chat/SettingsModal.svelte @@ -488,7 +488,7 @@ {/if} {:else if tabId === 'tools'} - {#if $user?.role === 'admin' || ($user?.role === 'user' && $config?.features?.enable_direct_tools)} + {#if $user?.role === 'admin' || ($user?.role === 'user' && $user?.permissions?.features?.direct_tool_servers)}
@@ -268,7 +269,7 @@
-
+
{$i18n.t('API keys')}
diff --git a/src/lib/components/chat/Settings/Audio.svelte b/src/lib/components/chat/Settings/Audio.svelte index 0131aaae0dd..9b896628d4b 100644 --- a/src/lib/components/chat/Settings/Audio.svelte +++ b/src/lib/components/chat/Settings/Audio.svelte @@ -293,7 +293,7 @@
@@ -330,7 +330,7 @@
diff --git a/src/lib/components/chat/Settings/General.svelte b/src/lib/components/chat/Settings/General.svelte index d0c812ad4c4..b3e6cec8a4b 100644 --- a/src/lib/components/chat/Settings/General.svelte +++ b/src/lib/components/chat/Settings/General.svelte @@ -309,14 +309,15 @@
{#if $user?.role === 'admin' || $user?.permissions.chat?.controls} -
+
{$i18n.t('System Prompt')}
-