"src/lib/vscode:/vscode.git/clone" did not exist on "4ab5050379b8a5a25eed97e704875a3443e96740"
Commit ae376ec8 authored by Jun Siang Cheah's avatar Jun Siang Cheah
Browse files

Merge remote-tracking branch 'upstream/dev' into feat/oauth

parents af4f8aa5 1bb7fc7c
<script lang="ts">
export let className = 'w-4 h-4';
export let strokeWidth = '1.5';
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width={strokeWidth}
stroke="currentColor"
class={className}
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M6.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM12.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM18.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z"
/>
</svg>
<script lang="ts">
export let className = 'size-4';
</script>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class={className}>
<path
d="M21.721 12.752a9.711 9.711 0 0 0-.945-5.003 12.754 12.754 0 0 1-4.339 2.708 18.991 18.991 0 0 1-.214 4.772 17.165 17.165 0 0 0 5.498-2.477ZM14.634 15.55a17.324 17.324 0 0 0 .332-4.647c-.952.227-1.945.347-2.966.347-1.021 0-2.014-.12-2.966-.347a17.515 17.515 0 0 0 .332 4.647 17.385 17.385 0 0 0 5.268 0ZM9.772 17.119a18.963 18.963 0 0 0 4.456 0A17.182 17.182 0 0 1 12 21.724a17.18 17.18 0 0 1-2.228-4.605ZM7.777 15.23a18.87 18.87 0 0 1-.214-4.774 12.753 12.753 0 0 1-4.34-2.708 9.711 9.711 0 0 0-.944 5.004 17.165 17.165 0 0 0 5.498 2.477ZM21.356 14.752a9.765 9.765 0 0 1-7.478 6.817 18.64 18.64 0 0 0 1.988-4.718 18.627 18.627 0 0 0 5.49-2.098ZM2.644 14.752c1.682.971 3.53 1.688 5.49 2.099a18.64 18.64 0 0 0 1.988 4.718 9.765 9.765 0 0 1-7.478-6.816ZM13.878 2.43a9.755 9.755 0 0 1 6.116 3.986 11.267 11.267 0 0 1-3.746 2.504 18.63 18.63 0 0 0-2.37-6.49ZM12 2.276a17.152 17.152 0 0 1 2.805 7.121c-.897.23-1.837.353-2.805.353-.968 0-1.908-.122-2.805-.353A17.151 17.151 0 0 1 12 2.276ZM10.122 2.43a18.629 18.629 0 0 0-2.37 6.49 11.266 11.266 0 0 1-3.746-2.504 9.754 9.754 0 0 1 6.116-3.985Z"
/>
</svg>
<script lang="ts">
export let className = 'size-4';
export let strokeWidth = '2';
</script>
<svg
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
fill="currentColor"
viewBox="0 0 24 24"
stroke-width={strokeWidth}
class={className}
>
<path
fill-rule="evenodd"
d="M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7Zm5.01 1H5v2.01h2.01V8Zm3 0H8v2.01h2.01V8Zm3 0H11v2.01h2.01V8Zm3 0H14v2.01h2.01V8Zm3 0H17v2.01h2.01V8Zm-12 3H5v2.01h2.01V11Zm3 0H8v2.01h2.01V11Zm3 0H11v2.01h2.01V11Zm3 0H14v2.01h2.01V11Zm3 0H17v2.01h2.01V11Zm-12 3H5v2.01h2.01V14ZM8 14l-.001 2 8.011.01V14H8Zm11.01 0H17v2.01h2.01V14Z"
clip-rule="evenodd"
/>
</svg>
<script lang="ts">
export let className = 'w-4 h-4';
export let strokeWidth = '2';
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width={strokeWidth}
stroke="currentColor"
class={className}
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M16.712 4.33a9.027 9.027 0 0 1 1.652 1.306c.51.51.944 1.064 1.306 1.652M16.712 4.33l-3.448 4.138m3.448-4.138a9.014 9.014 0 0 0-9.424 0M19.67 7.288l-4.138 3.448m4.138-3.448a9.014 9.014 0 0 1 0 9.424m-4.138-5.976a3.736 3.736 0 0 0-.88-1.388 3.737 3.737 0 0 0-1.388-.88m2.268 2.268a3.765 3.765 0 0 1 0 2.528m-2.268-4.796a3.765 3.765 0 0 0-2.528 0m4.796 4.796c-.181.506-.475.982-.88 1.388a3.736 3.736 0 0 1-1.388.88m2.268-2.268 4.138 3.448m0 0a9.027 9.027 0 0 1-1.306 1.652c-.51.51-1.064.944-1.652 1.306m0 0-3.448-4.138m3.448 4.138a9.014 9.014 0 0 1-9.424 0m5.976-4.138a3.765 3.765 0 0 1-2.528 0m0 0a3.736 3.736 0 0 1-1.388-.88 3.737 3.737 0 0 1-.88-1.388m2.268 2.268L7.288 19.67m0 0a9.024 9.024 0 0 1-1.652-1.306 9.027 9.027 0 0 1-1.306-1.652m0 0 4.138-3.448M4.33 16.712a9.014 9.014 0 0 1 0-9.424m4.138 5.976a3.765 3.765 0 0 1 0-2.528m0 0c.181-.506.475-.982.88-1.388a3.736 3.736 0 0 1 1.388-.88m-2.268 2.268L4.33 7.288m6.406 1.18L7.288 4.33m0 0a9.024 9.024 0 0 0-1.652 1.306A9.025 9.025 0 0 0 4.33 7.288"
/>
</svg>
<script lang="ts">
export let className = 'w-4 h-4';
export let strokeWidth = '2';
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width={strokeWidth}
stroke="currentColor"
class={className}
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z"
/>
</svg>
<script lang="ts">
import { onMount, tick, getContext } from 'svelte';
const i18n = getContext('i18n');
import ShortcutsModal from '../chat/ShortcutsModal.svelte';
import Tooltip from '../common/Tooltip.svelte';
import HelpMenu from './Help/HelpMenu.svelte';
let showShortcuts = false;
</script>
<div class=" hidden lg:flex fixed bottom-0 right-0 px-2 py-2 z-10">
<button
id="show-shortcuts-button"
class="hidden"
on:click={() => {
showShortcuts = !showShortcuts;
}}
/>
<HelpMenu
showDocsHandler={() => {
showShortcuts = !showShortcuts;
}}
showShortcutsHandler={() => {
showShortcuts = !showShortcuts;
}}
>
<Tooltip content={$i18n.t('Help')} placement="left">
<button
class="text-gray-600 dark:text-gray-300 bg-gray-300/20 size-5 flex items-center justify-center text-[0.7rem] rounded-full"
>
?
</button>
</Tooltip>
</HelpMenu>
</div>
<ShortcutsModal bind:show={showShortcuts} />
<script lang="ts">
import { DropdownMenu } from 'bits-ui';
import { getContext } from 'svelte';
import { showSettings } from '$lib/stores';
import { flyAndScale } from '$lib/utils/transitions';
import Dropdown from '$lib/components/common/Dropdown.svelte';
import QuestionMarkCircle from '$lib/components/icons/QuestionMarkCircle.svelte';
import Lifebuoy from '$lib/components/icons/Lifebuoy.svelte';
import Keyboard from '$lib/components/icons/Keyboard.svelte';
const i18n = getContext('i18n');
export let showDocsHandler: Function;
export let showShortcutsHandler: Function;
export let onClose: Function = () => {};
</script>
<Dropdown
on:change={(e) => {
if (e.detail === false) {
onClose();
}
}}
>
<slot />
<div slot="content">
<DropdownMenu.Content
class="w-full max-w-[200px] rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-lg"
sideOffset={4}
side="top"
align="end"
transition={flyAndScale}
>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
id="chat-share-button"
on:click={() => {
window.open('https://docs.openwebui.com', '_blank');
}}
>
<QuestionMarkCircle className="size-5" />
<div class="flex items-center">{$i18n.t('Documentation')}</div>
</DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
id="chat-share-button"
on:click={() => {
showShortcutsHandler();
}}
>
<Keyboard className="size-5" />
<div class="flex items-center">{$i18n.t('Keyboard shortcuts')}</div>
</DropdownMenu.Item>
</DropdownMenu.Content>
</div>
</Dropdown>
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
<div class="self-start flex flex-none items-center text-gray-600 dark:text-gray-400"> <div class="self-start flex flex-none items-center text-gray-600 dark:text-gray-400">
<!-- <div class="md:hidden flex self-center w-[1px] h-5 mx-2 bg-gray-300 dark:bg-stone-700" /> --> <!-- <div class="md:hidden flex self-center w-[1px] h-5 mx-2 bg-gray-300 dark:bg-stone-700" /> -->
{#if shareEnabled} {#if shareEnabled && chat && chat.id}
<Menu <Menu
{chat} {chat}
{shareEnabled} {shareEnabled}
......
...@@ -63,6 +63,13 @@ ...@@ -63,6 +63,13 @@
// Revoke the URL to release memory // Revoke the URL to release memory
window.URL.revokeObjectURL(url); window.URL.revokeObjectURL(url);
}; };
const downloadJSONExport = async () => {
let blob = new Blob([JSON.stringify([chat])], {
type: 'application/json'
});
saveAs(blob, `chat-export-${Date.now()}.json`);
};
</script> </script>
<Dropdown <Dropdown
...@@ -131,7 +138,6 @@ ...@@ -131,7 +138,6 @@
</svg> </svg>
<div class="flex items-center">{$i18n.t('Share')}</div> <div class="flex items-center">{$i18n.t('Share')}</div>
</DropdownMenu.Item> </DropdownMenu.Item>
<!-- <DropdownMenu.Item <!-- <DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer" class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer"
on:click={() => { on:click={() => {
...@@ -164,6 +170,14 @@ ...@@ -164,6 +170,14 @@
transition={flyAndScale} transition={flyAndScale}
sideOffset={8} sideOffset={8}
> >
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
downloadJSONExport();
}}
>
<div class="flex items-center line-clamp-1">{$i18n.t('Export chat (.json)')}</div>
</DropdownMenu.Item>
<DropdownMenu.Item <DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md" class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => { on:click={() => {
......
<script lang="ts">
import { getAdminDetails } from '$lib/apis/auths';
import { onMount, tick, getContext } from 'svelte';
const i18n = getContext('i18n');
let adminDetails = null;
onMount(async () => {
adminDetails = await getAdminDetails(localStorage.token).catch((err) => {
console.error(err);
return null;
});
});
</script>
<div class="fixed w-full h-full flex z-[999]">
<div
class="absolute w-full h-full backdrop-blur-lg bg-white/10 dark:bg-gray-900/50 flex justify-center"
>
<div class="m-auto pb-10 flex flex-col justify-center">
<div class="max-w-md">
<div class="text-center dark:text-white text-2xl font-medium z-50">
Account Activation Pending<br /> Contact Admin for WebUI Access
</div>
<div class=" mt-4 text-center text-sm dark:text-gray-200 w-full">
Your account status is currently pending activation.<br /> To access the WebUI, please reach
out to the administrator. Admins can manage user statuses from the Admin Panel.
</div>
{#if adminDetails}
<div class="mt-4 text-sm font-medium text-center">
<div>Admin: {adminDetails.name} ({adminDetails.email})</div>
</div>
{/if}
<div class=" mt-6 mx-auto relative group w-fit">
<button
class="relative z-20 flex px-5 py-2 rounded-full bg-white border border-gray-100 dark:border-none hover:bg-gray-100 text-gray-700 transition font-medium text-sm"
on:click={async () => {
location.href = '/';
}}
>
{$i18n.t('Check Again')}
</button>
<button
class="text-xs text-center w-full mt-2 text-gray-400 underline"
on:click={async () => {
localStorage.removeItem('token');
location.href = '/auth';
}}>{$i18n.t('Sign Out')}</button
>
</div>
</div>
</div>
</div>
</div>
...@@ -22,7 +22,8 @@ ...@@ -22,7 +22,8 @@
getChatListByTagName, getChatListByTagName,
updateChatById, updateChatById,
getAllChatTags, getAllChatTags,
archiveChatById archiveChatById,
cloneChatById
} from '$lib/apis/chats'; } from '$lib/apis/chats';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import { fade, slide } from 'svelte/transition'; import { fade, slide } from 'svelte/transition';
...@@ -182,6 +183,18 @@ ...@@ -182,6 +183,18 @@
} }
}; };
const cloneChatHandler = async (id) => {
const res = await cloneChatById(localStorage.token, id).catch((error) => {
toast.error(error);
return null;
});
if (res) {
goto(`/c/${res.id}`);
await chats.set(await getChatList(localStorage.token));
}
};
const saveSettings = async (updated) => { const saveSettings = async (updated) => {
await settings.set({ ...$settings, ...updated }); await settings.set({ ...$settings, ...updated });
await updateUserSettings(localStorage.token, { ui: $settings }); await updateUserSettings(localStorage.token, { ui: $settings });
...@@ -192,6 +205,10 @@ ...@@ -192,6 +205,10 @@
await archiveChatById(localStorage.token, id); await archiveChatById(localStorage.token, id);
await chats.set(await getChatList(localStorage.token)); await chats.set(await getChatList(localStorage.token));
}; };
const focusEdit = async (node: HTMLInputElement) => {
node.focus();
};
</script> </script>
<ShareChatModal bind:show={showShareChatModal} chatId={shareChatId} /> <ShareChatModal bind:show={showShareChatModal} chatId={shareChatId} />
...@@ -476,7 +493,11 @@ ...@@ -476,7 +493,11 @@
? 'bg-gray-100 dark:bg-gray-950' ? 'bg-gray-100 dark:bg-gray-950'
: 'group-hover:bg-gray-100 dark:group-hover:bg-gray-950'} whitespace-nowrap text-ellipsis" : 'group-hover:bg-gray-100 dark:group-hover:bg-gray-950'} whitespace-nowrap text-ellipsis"
> >
<input bind:value={chatTitle} class=" bg-transparent w-full outline-none mr-10" /> <input
use:focusEdit
bind:value={chatTitle}
class=" bg-transparent w-full outline-none mr-10"
/>
</div> </div>
{:else} {:else}
<a <a
...@@ -494,6 +515,10 @@ ...@@ -494,6 +515,10 @@
showSidebar.set(false); showSidebar.set(false);
} }
}} }}
on:dblclick={() => {
chatTitle = chat.title;
chatTitleEditId = chat.id;
}}
draggable="false" draggable="false"
> >
<div class=" flex self-center flex-1 w-full"> <div class=" flex self-center flex-1 w-full">
...@@ -601,6 +626,9 @@ ...@@ -601,6 +626,9 @@
<div class="flex self-center space-x-1 z-10"> <div class="flex self-center space-x-1 z-10">
<ChatMenu <ChatMenu
chatId={chat.id} chatId={chat.id}
cloneChatHandler={() => {
cloneChatHandler(chat.id);
}}
shareHandler={() => { shareHandler={() => {
shareChatId = selectedChatId; shareChatId = selectedChatId;
showShareChatModal = true; showShareChatModal = true;
......
...@@ -8,7 +8,12 @@ ...@@ -8,7 +8,12 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
import Modal from '$lib/components/common/Modal.svelte'; import Modal from '$lib/components/common/Modal.svelte';
import { archiveChatById, deleteChatById, getArchivedChatList } from '$lib/apis/chats'; import {
archiveChatById,
deleteChatById,
getAllArchivedChats,
getArchivedChatList
} from '$lib/apis/chats';
import Tooltip from '$lib/components/common/Tooltip.svelte'; import Tooltip from '$lib/components/common/Tooltip.svelte';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
...@@ -38,6 +43,7 @@ ...@@ -38,6 +43,7 @@
}; };
const exportChatsHandler = async () => { const exportChatsHandler = async () => {
const chats = await getAllArchivedChats(localStorage.token);
let blob = new Blob([JSON.stringify(chats)], { let blob = new Blob([JSON.stringify(chats)], {
type: 'application/json' type: 'application/json'
}); });
......
...@@ -10,10 +10,12 @@ ...@@ -10,10 +10,12 @@
import Tags from '$lib/components/chat/Tags.svelte'; import Tags from '$lib/components/chat/Tags.svelte';
import Share from '$lib/components/icons/Share.svelte'; import Share from '$lib/components/icons/Share.svelte';
import ArchiveBox from '$lib/components/icons/ArchiveBox.svelte'; import ArchiveBox from '$lib/components/icons/ArchiveBox.svelte';
import DocumentDuplicate from '$lib/components/icons/DocumentDuplicate.svelte';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
export let shareHandler: Function; export let shareHandler: Function;
export let cloneChatHandler: Function;
export let archiveChatHandler: Function; export let archiveChatHandler: Function;
export let renameHandler: Function; export let renameHandler: Function;
export let deleteHandler: Function; export let deleteHandler: Function;
...@@ -38,30 +40,30 @@ ...@@ -38,30 +40,30 @@
<div slot="content"> <div slot="content">
<DropdownMenu.Content <DropdownMenu.Content
class="w-full max-w-[160px] rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow" class="w-full max-w-[180px] rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow"
sideOffset={-2} sideOffset={-2}
side="bottom" side="bottom"
align="start" align="start"
transition={flyAndScale} transition={flyAndScale}
> >
<DropdownMenu.Item <DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md" class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => { on:click={() => {
shareHandler(); renameHandler();
}} }}
> >
<Share /> <Pencil strokeWidth="2" />
<div class="flex items-center">{$i18n.t('Share')}</div> <div class="flex items-center">{$i18n.t('Rename')}</div>
</DropdownMenu.Item> </DropdownMenu.Item>
<DropdownMenu.Item <DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md" class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => { on:click={() => {
renameHandler(); cloneChatHandler();
}} }}
> >
<Pencil strokeWidth="2" /> <DocumentDuplicate strokeWidth="2" />
<div class="flex items-center">{$i18n.t('Rename')}</div> <div class="flex items-center">{$i18n.t('Clone')}</div>
</DropdownMenu.Item> </DropdownMenu.Item>
<DropdownMenu.Item <DropdownMenu.Item
...@@ -74,6 +76,16 @@ ...@@ -74,6 +76,16 @@
<div class="flex items-center">{$i18n.t('Archive')}</div> <div class="flex items-center">{$i18n.t('Archive')}</div>
</DropdownMenu.Item> </DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
shareHandler();
}}
>
<Share />
<div class="flex items-center">{$i18n.t('Share')}</div>
</DropdownMenu.Item>
<DropdownMenu.Item <DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md" class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => { on:click={() => {
......
<script lang="ts"> <script lang="ts">
import { DropdownMenu } from 'bits-ui'; import { DropdownMenu } from 'bits-ui';
import { createEventDispatcher, getContext } from 'svelte'; import { createEventDispatcher, getContext, onMount } from 'svelte';
import { flyAndScale } from '$lib/utils/transitions'; import { flyAndScale } from '$lib/utils/transitions';
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import ArchiveBox from '$lib/components/icons/ArchiveBox.svelte'; import ArchiveBox from '$lib/components/icons/ArchiveBox.svelte';
import { showSettings } from '$lib/stores'; import { showSettings, activeUserCount, USAGE_POOL } from '$lib/stores';
import { fade, slide } from 'svelte/transition'; import { fade, slide } from 'svelte/transition';
import Tooltip from '$lib/components/common/Tooltip.svelte';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
...@@ -107,7 +108,7 @@ ...@@ -107,7 +108,7 @@
</button> </button>
{/if} {/if}
<hr class=" dark:border-gray-800 my-2 p-0" /> <hr class=" dark:border-gray-800 my-1.5 p-0" />
<button <button
class="flex rounded-md py-2 px-3 w-full hover:bg-gray-50 dark:hover:bg-gray-800 transition" class="flex rounded-md py-2 px-3 w-full hover:bg-gray-50 dark:hover:bg-gray-800 transition"
...@@ -139,6 +140,36 @@ ...@@ -139,6 +140,36 @@
<div class=" self-center font-medium">{$i18n.t('Sign Out')}</div> <div class=" self-center font-medium">{$i18n.t('Sign Out')}</div>
</button> </button>
{#if $activeUserCount}
<hr class=" dark:border-gray-800 my-1.5 p-0" />
<Tooltip
content={$USAGE_POOL && $USAGE_POOL.length > 0
? `Running: ${$USAGE_POOL.join(', ')} ✨`
: ''}
>
<div class="flex rounded-md py-1.5 px-3 text-xs gap-2.5 items-center">
<div class=" flex items-center">
<span class="relative flex size-2">
<span
class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75"
/>
<span class="relative inline-flex rounded-full size-2 bg-green-500" />
</span>
</div>
<div class=" ">
<span class=" font-medium">
{$i18n.t('Active Users')}:
</span>
<span class=" font-semibold">
{$activeUserCount}
</span>
</div>
</div>
</Tooltip>
{/if}
<!-- <DropdownMenu.Item class="flex items-center px-3 py-2 text-sm font-medium"> <!-- <DropdownMenu.Item class="flex items-center px-3 py-2 text-sm font-medium">
<div class="flex items-center">Profile</div> <div class="flex items-center">Profile</div>
</DropdownMenu.Item> --> </DropdownMenu.Item> -->
......
<script lang="ts"> <script lang="ts">
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import Sortable from 'sortablejs';
import fileSaver from 'file-saver'; import fileSaver from 'file-saver';
const { saveAs } = fileSaver; const { saveAs } = fileSaver;
import { onMount, getContext } from 'svelte'; import { onMount, getContext, tick } from 'svelte';
import { WEBUI_NAME, modelfiles, models, settings, user } from '$lib/stores'; import { WEBUI_NAME, mobile, models, settings, user } from '$lib/stores';
import { addNewModel, deleteModelById, getModelInfos } from '$lib/apis/models'; import { addNewModel, deleteModelById, getModelInfos, updateModelById } from '$lib/apis/models';
import { deleteModel } from '$lib/apis/ollama'; import { deleteModel } from '$lib/apis/ollama';
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import { getModels } from '$lib/apis'; import { getModels } from '$lib/apis';
import EllipsisHorizontal from '../icons/EllipsisHorizontal.svelte';
import ModelMenu from './Models/ModelMenu.svelte';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
let localModelfiles = []; let localModelfiles = [];
...@@ -20,6 +25,9 @@ ...@@ -20,6 +25,9 @@
let importFiles; let importFiles;
let modelsImportInputElement: HTMLInputElement; let modelsImportInputElement: HTMLInputElement;
let _models = [];
let sortable = null;
let searchValue = ''; let searchValue = '';
const deleteModelHandler = async (model) => { const deleteModelHandler = async (model) => {
...@@ -40,6 +48,7 @@ ...@@ -40,6 +48,7 @@
} }
await models.set(await getModels(localStorage.token)); await models.set(await getModels(localStorage.token));
_models = $models;
}; };
const cloneModelHandler = async (model) => { const cloneModelHandler = async (model) => {
...@@ -74,6 +83,42 @@ ...@@ -74,6 +83,42 @@
); );
}; };
const hideModelHandler = async (model) => {
let info = model.info;
if (!info) {
info = {
id: model.id,
name: model.name,
meta: {
suggestion_prompts: null
},
params: {}
};
}
info.meta = {
...info.meta,
hidden: !(info?.meta?.hidden ?? false)
};
console.log(info);
const res = await updateModelById(localStorage.token, info.id, info);
if (res) {
toast.success(
$i18n.t(`Model {{name}} is now {{status}}`, {
name: info.id,
status: info.meta.hidden ? 'hidden' : 'visible'
})
);
}
await models.set(await getModels(localStorage.token));
_models = $models;
};
const downloadModels = async (models) => { const downloadModels = async (models) => {
let blob = new Blob([JSON.stringify(models)], { let blob = new Blob([JSON.stringify(models)], {
type: 'application/json' type: 'application/json'
...@@ -81,13 +126,67 @@ ...@@ -81,13 +126,67 @@
saveAs(blob, `models-export-${Date.now()}.json`); saveAs(blob, `models-export-${Date.now()}.json`);
}; };
onMount(() => { const exportModelHandler = async (model) => {
let blob = new Blob([JSON.stringify([model])], {
type: 'application/json'
});
saveAs(blob, `${model.id}-${Date.now()}.json`);
};
const positionChangeHanlder = async () => {
// Get the new order of the models
const modelIds = Array.from(document.getElementById('model-list').children).map((child) =>
child.id.replace('model-item-', '')
);
// Update the position of the models
for (const [index, id] of modelIds.entries()) {
const model = $models.find((m) => m.id === id);
if (model) {
let info = model.info;
if (!info) {
info = {
id: model.id,
name: model.name,
meta: {
position: index
},
params: {}
};
}
info.meta = {
...info.meta,
position: index
};
await updateModelById(localStorage.token, info.id, info);
}
}
await tick();
await models.set(await getModels(localStorage.token));
};
onMount(async () => {
// Legacy code to sync localModelfiles with models // Legacy code to sync localModelfiles with models
_models = $models;
localModelfiles = JSON.parse(localStorage.getItem('modelfiles') ?? '[]'); localModelfiles = JSON.parse(localStorage.getItem('modelfiles') ?? '[]');
if (localModelfiles) { if (localModelfiles) {
console.log(localModelfiles); console.log(localModelfiles);
} }
if (!$mobile) {
// SortableJS
sortable = new Sortable(document.getElementById('model-list'), {
animation: 150,
onUpdate: async (event) => {
console.log(event);
positionChangeHanlder();
}
});
}
}); });
</script> </script>
...@@ -165,19 +264,24 @@ ...@@ -165,19 +264,24 @@
<hr class=" dark:border-gray-850" /> <hr class=" dark:border-gray-850" />
<div class=" my-2 mb-5"> <div class=" my-2 mb-5" id="model-list">
{#each $models.filter((m) => searchValue === '' || m.name {#each _models.filter((m) => searchValue === '' || m.name
.toLowerCase() .toLowerCase()
.includes(searchValue.toLowerCase())) as model} .includes(searchValue.toLowerCase())) as model}
<div <div
class=" flex space-x-4 cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl" class=" flex space-x-4 cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-xl"
id="model-item-{model.id}"
> >
<a <a
class=" flex flex-1 space-x-4 cursor-pointer w-full" class=" flex flex-1 space-x-3.5 cursor-pointer w-full"
href={`/?models=${encodeURIComponent(model.id)}`} href={`/?models=${encodeURIComponent(model.id)}`}
> >
<div class=" self-center w-10"> <div class=" self-start w-8 pt-0.5">
<div class=" rounded-full bg-stone-700"> <div
class=" rounded-full bg-stone-700 {model?.info?.meta?.hidden ?? false
? 'brightness-90 dark:brightness-50'
: ''} "
>
<img <img
src={model?.info?.meta?.profile_image_url ?? '/favicon.png'} src={model?.info?.meta?.profile_image_url ?? '/favicon.png'}
alt="modelfile profile" alt="modelfile profile"
...@@ -186,14 +290,16 @@ ...@@ -186,14 +290,16 @@
</div> </div>
</div> </div>
<div class=" flex-1 self-center"> <div
<div class=" font-bold line-clamp-1">{model.name}</div> class=" flex-1 self-center {model?.info?.meta?.hidden ?? false ? 'text-gray-500' : ''}"
<div class=" text-sm overflow-hidden text-ellipsis line-clamp-1"> >
<div class=" font-bold line-clamp-1">{model.name}</div>
<div class=" text-xs overflow-hidden text-ellipsis line-clamp-1">
{!!model?.info?.meta?.description ? model?.info?.meta?.description : model.id} {!!model?.info?.meta?.description ? model?.info?.meta?.description : model.id}
</div> </div>
</div> </div>
</a> </a>
<div class="flex flex-row space-x-1 self-center"> <div class="flex flex-row gap-0.5 self-center">
<a <a
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl" class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button" type="button"
...@@ -215,74 +321,32 @@ ...@@ -215,74 +321,32 @@
</svg> </svg>
</a> </a>
<button <ModelMenu
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl" {model}
type="button" shareHandler={() => {
on:click={() => { shareModelHandler(model);
}}
cloneHandler={() => {
cloneModelHandler(model); cloneModelHandler(model);
}} }}
> exportHandler={() => {
<svg exportModelHandler(model);
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-4 h-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75"
/>
</svg>
</button>
<button
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
on:click={() => {
shareModelHandler(model);
}} }}
> hideHandler={() => {
<svg hideModelHandler(model);
xmlns="http://www.w3.org/2000/svg" }}
fill="none" deleteHandler={() => {
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-4 h-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z"
/>
</svg>
</button>
<button
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
on:click={() => {
deleteModelHandler(model); deleteModelHandler(model);
}} }}
onClose={() => {}}
> >
<svg <button
xmlns="http://www.w3.org/2000/svg" class="self-center w-fit text-sm p-1.5 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
fill="none" type="button"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-4 h-4"
> >
<path <EllipsisHorizontal className="size-5" />
stroke-linecap="round" </button>
stroke-linejoin="round" </ModelMenu>
d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
/>
</svg>
</button>
</div> </div>
</div> </div>
{/each} {/each}
...@@ -307,13 +371,20 @@ ...@@ -307,13 +371,20 @@
for (const model of savedModels) { for (const model of savedModels) {
if (model?.info ?? false) { if (model?.info ?? false) {
await addNewModel(localStorage.token, model.info).catch((error) => { if ($models.find((m) => m.id === model.id)) {
return null; await updateModelById(localStorage.token, model.id, model.info).catch((error) => {
}); return null;
});
} else {
await addNewModel(localStorage.token, model.info).catch((error) => {
return null;
});
}
} }
} }
await models.set(await getModels(localStorage.token)); await models.set(await getModels(localStorage.token));
_models = $models;
}; };
reader.readAsText(importFiles[0]); reader.readAsText(importFiles[0]);
......
<script lang="ts">
import { DropdownMenu } from 'bits-ui';
import { flyAndScale } from '$lib/utils/transitions';
import { getContext } from 'svelte';
import Dropdown from '$lib/components/common/Dropdown.svelte';
import GarbageBin from '$lib/components/icons/GarbageBin.svelte';
import Pencil from '$lib/components/icons/Pencil.svelte';
import Tooltip from '$lib/components/common/Tooltip.svelte';
import Tags from '$lib/components/chat/Tags.svelte';
import Share from '$lib/components/icons/Share.svelte';
import ArchiveBox from '$lib/components/icons/ArchiveBox.svelte';
import DocumentDuplicate from '$lib/components/icons/DocumentDuplicate.svelte';
import ArrowDownTray from '$lib/components/icons/ArrowDownTray.svelte';
const i18n = getContext('i18n');
export let model;
export let shareHandler: Function;
export let cloneHandler: Function;
export let exportHandler: Function;
export let hideHandler: Function;
export let deleteHandler: Function;
export let onClose: Function;
let show = false;
</script>
<Dropdown
bind:show
on:change={(e) => {
if (e.detail === false) {
onClose();
}
}}
>
<Tooltip content={$i18n.t('More')}>
<slot />
</Tooltip>
<div slot="content">
<DropdownMenu.Content
class="w-full max-w-[160px] rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow"
sideOffset={-2}
side="bottom"
align="start"
transition={flyAndScale}
>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
shareHandler();
}}
>
<Share />
<div class="flex items-center">{$i18n.t('Share')}</div>
</DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
cloneHandler();
}}
>
<DocumentDuplicate />
<div class="flex items-center">{$i18n.t('Clone')}</div>
</DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
exportHandler();
}}
>
<ArrowDownTray />
<div class="flex items-center">{$i18n.t('Export')}</div>
</DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
hideHandler();
}}
>
{#if model?.info?.meta?.hidden ?? false}
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="size-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M3.98 8.223A10.477 10.477 0 0 0 1.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.451 10.451 0 0 1 12 4.5c4.756 0 8.773 3.162 10.065 7.498a10.522 10.522 0 0 1-4.293 5.774M6.228 6.228 3 3m3.228 3.228 3.65 3.65m7.894 7.894L21 21m-3.228-3.228-3.65-3.65m0 0a3 3 0 1 0-4.243-4.243m4.242 4.242L9.88 9.88"
/>
</svg>
{:else}
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="size-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z"
/>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
/>
</svg>
{/if}
<div class="flex items-center">
{$i18n.t(model?.info?.meta?.hidden ?? false ? 'Show Model' : 'Hide Model')}
</div>
</DropdownMenu.Item>
<hr class="border-gray-100 dark:border-gray-800 my-1" />
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
on:click={() => {
deleteHandler();
}}
>
<GarbageBin strokeWidth="2" />
<div class="flex items-center">{$i18n.t('Delete')}</div>
</DropdownMenu.Item>
</DropdownMenu.Content>
</div>
</Dropdown>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
import { OLLAMA_API_BASE_URL, OPENAI_API_BASE_URL, WEBUI_API_BASE_URL } from '$lib/constants'; import { OLLAMA_API_BASE_URL, OPENAI_API_BASE_URL, WEBUI_API_BASE_URL } from '$lib/constants';
import { WEBUI_NAME, config, user, models, settings } from '$lib/stores'; import { WEBUI_NAME, config, user, models, settings } from '$lib/stores';
import { cancelOllamaRequest, generateChatCompletion } from '$lib/apis/ollama'; import { generateChatCompletion } from '$lib/apis/ollama';
import { generateOpenAIChatCompletion } from '$lib/apis/openai'; import { generateOpenAIChatCompletion } from '$lib/apis/openai';
import { splitStream } from '$lib/utils'; import { splitStream } from '$lib/utils';
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
let selectedModelId = ''; let selectedModelId = '';
let loading = false; let loading = false;
let currentRequestId = null;
let stopResponseFlag = false; let stopResponseFlag = false;
let messagesContainerElement: HTMLDivElement; let messagesContainerElement: HTMLDivElement;
...@@ -46,14 +45,6 @@ ...@@ -46,14 +45,6 @@
} }
}; };
// const cancelHandler = async () => {
// if (currentRequestId) {
// const res = await cancelOllamaRequest(localStorage.token, currentRequestId);
// currentRequestId = null;
// loading = false;
// }
// };
const stopResponse = () => { const stopResponse = () => {
stopResponseFlag = true; stopResponseFlag = true;
console.log('stopResponse'); console.log('stopResponse');
...@@ -171,8 +162,6 @@ ...@@ -171,8 +162,6 @@
if (stopResponseFlag) { if (stopResponseFlag) {
controller.abort('User: Stop Response'); controller.abort('User: Stop Response');
} }
currentRequestId = null;
break; break;
} }
...@@ -229,7 +218,6 @@ ...@@ -229,7 +218,6 @@
loading = false; loading = false;
stopResponseFlag = false; stopResponseFlag = false;
currentRequestId = null;
} }
}; };
......
...@@ -2,8 +2,9 @@ import { browser, dev } from '$app/environment'; ...@@ -2,8 +2,9 @@ import { browser, dev } from '$app/environment';
// import { version } from '../../package.json'; // import { version } from '../../package.json';
export const APP_NAME = 'Open WebUI'; export const APP_NAME = 'Open WebUI';
export const WEBUI_BASE_URL = browser ? (dev ? `http://${location.hostname}:8080` : ``) : ``;
export const WEBUI_HOSTNAME = browser ? (dev ? `${location.hostname}:8080` : ``) : '';
export const WEBUI_BASE_URL = browser ? (dev ? `http://${WEBUI_HOSTNAME}` : ``) : ``;
export const WEBUI_API_BASE_URL = `${WEBUI_BASE_URL}/api/v1`; export const WEBUI_API_BASE_URL = `${WEBUI_BASE_URL}/api/v1`;
export const OLLAMA_API_BASE_URL = `${WEBUI_BASE_URL}/ollama`; export const OLLAMA_API_BASE_URL = `${WEBUI_BASE_URL}/ollama`;
......
...@@ -3,18 +3,20 @@ ...@@ -3,18 +3,20 @@
"(Beta)": "(تجريبي)", "(Beta)": "(تجريبي)",
"(e.g. `sh webui.sh --api`)": "( `sh webui.sh --api`مثال)", "(e.g. `sh webui.sh --api`)": "( `sh webui.sh --api`مثال)",
"(latest)": "(الأخير)", "(latest)": "(الأخير)",
"{{ models }}": "", "{{ models }}": "{{ نماذج }}",
"{{ owner }}: You cannot delete a base model": "", "{{ owner }}: You cannot delete a base model": "{{ المالك }}: لا يمكنك حذف نموذج أساسي",
"{{modelName}} is thinking...": "{{modelName}} ...يفكر", "{{modelName}} is thinking...": "{{modelName}} ...يفكر",
"{{user}}'s Chats": "دردشات {{user}}", "{{user}}'s Chats": "دردشات {{user}}",
"{{webUIName}} Backend Required": "{{webUIName}} مطلوب", "{{webUIName}} Backend Required": "{{webUIName}} مطلوب",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "يتم استخدام نموذج المهمة عند تنفيذ مهام مثل إنشاء عناوين للدردشات واستعلامات بحث الويب",
"a user": "مستخدم", "a user": "مستخدم",
"About": "عن", "About": "عن",
"Account": "الحساب", "Account": "الحساب",
"Accurate information": "معلومات دقيقة", "Accurate information": "معلومات دقيقة",
"Active Users": "",
"Add": "أضف", "Add": "أضف",
"Add a model id": "", "Add a model id": "إضافة معرف نموذج",
"Add a short description about what this model does": "", "Add a short description about what this model does": "أضف وصفا موجزا حول ما يفعله هذا النموذج",
"Add a short title for this prompt": "أضف عنوانًا قصيرًا لبداء المحادثة", "Add a short title for this prompt": "أضف عنوانًا قصيرًا لبداء المحادثة",
"Add a tag": "أضافة تاق", "Add a tag": "أضافة تاق",
"Add custom prompt": "أضافة مطالبة مخصصه", "Add custom prompt": "أضافة مطالبة مخصصه",
...@@ -30,12 +32,13 @@ ...@@ -30,12 +32,13 @@
"Admin Panel": "لوحة التحكم", "Admin Panel": "لوحة التحكم",
"Admin Settings": "اعدادات المشرف", "Admin Settings": "اعدادات المشرف",
"Advanced Parameters": "التعليمات المتقدمة", "Advanced Parameters": "التعليمات المتقدمة",
"Advanced Params": "", "Advanced Params": "المعلمات المتقدمة",
"all": "الكل", "all": "الكل",
"All Documents": "جميع الملفات", "All Documents": "جميع الملفات",
"All Users": "جميع المستخدمين", "All Users": "جميع المستخدمين",
"Allow": "يسمح", "Allow": "يسمح",
"Allow Chat Deletion": "يستطيع حذف المحادثات", "Allow Chat Deletion": "يستطيع حذف المحادثات",
"Allow non-local voices": "",
"alphanumeric characters and hyphens": "الأحرف الأبجدية الرقمية والواصلات", "alphanumeric characters and hyphens": "الأحرف الأبجدية الرقمية والواصلات",
"Already have an account?": "هل تملك حساب ؟", "Already have an account?": "هل تملك حساب ؟",
"an assistant": "مساعد", "an assistant": "مساعد",
...@@ -47,7 +50,7 @@ ...@@ -47,7 +50,7 @@
"API keys": "مفاتيح واجهة برمجة التطبيقات", "API keys": "مفاتيح واجهة برمجة التطبيقات",
"April": "أبريل", "April": "أبريل",
"Archive": "الأرشيف", "Archive": "الأرشيف",
"Archive All Chats": "", "Archive All Chats": "أرشفة جميع الدردشات",
"Archived Chats": "الأرشيف المحادثات", "Archived Chats": "الأرشيف المحادثات",
"are allowed - Activate this command by typing": "مسموح - قم بتنشيط هذا الأمر عن طريق الكتابة", "are allowed - Activate this command by typing": "مسموح - قم بتنشيط هذا الأمر عن طريق الكتابة",
"Are you sure?": "هل أنت متأكد ؟", "Are you sure?": "هل أنت متأكد ؟",
...@@ -62,13 +65,14 @@ ...@@ -62,13 +65,14 @@
"available!": "متاح", "available!": "متاح",
"Back": "خلف", "Back": "خلف",
"Bad Response": "استجابة خطاء", "Bad Response": "استجابة خطاء",
"Banners": "", "Banners": "لافتات",
"Base Model (From)": "", "Base Model (From)": "النموذج الأساسي (من)",
"before": "قبل", "before": "قبل",
"Being lazy": "كون كسول", "Being lazy": "كون كسول",
"Brave Search API Key": "مفتاح واجهة برمجة تطبيقات البحث الشجاع",
"Bypass SSL verification for Websites": "تجاوز التحقق من SSL للموقع", "Bypass SSL verification for Websites": "تجاوز التحقق من SSL للموقع",
"Cancel": "اللغاء", "Cancel": "اللغاء",
"Capabilities": "", "Capabilities": "قدرات",
"Change Password": "تغير الباسورد", "Change Password": "تغير الباسورد",
"Chat": "المحادثة", "Chat": "المحادثة",
"Chat Bubble UI": "UI الدردشة", "Chat Bubble UI": "UI الدردشة",
...@@ -91,17 +95,20 @@ ...@@ -91,17 +95,20 @@
"Click here to select documents.": "انقر هنا لاختيار المستندات", "Click here to select documents.": "انقر هنا لاختيار المستندات",
"click here.": "أضغط هنا", "click here.": "أضغط هنا",
"Click on the user role button to change a user's role.": "أضغط على أسم الصلاحيات لتغيرها للمستخدم", "Click on the user role button to change a user's role.": "أضغط على أسم الصلاحيات لتغيرها للمستخدم",
"Clone": "استنساخ",
"Close": "أغلق", "Close": "أغلق",
"Collection": "مجموعة", "Collection": "مجموعة",
"ComfyUI": "ComfyUI", "ComfyUI": "ComfyUI",
"ComfyUI Base URL": "ComfyUI الرابط الافتراضي", "ComfyUI Base URL": "ComfyUI الرابط الافتراضي",
"ComfyUI Base URL is required.": "ComfyUI الرابط مطلوب", "ComfyUI Base URL is required.": "ComfyUI الرابط مطلوب",
"Command": "الأوامر", "Command": "الأوامر",
"Concurrent Requests": "الطلبات المتزامنة",
"Confirm Password": "تأكيد كلمة المرور", "Confirm Password": "تأكيد كلمة المرور",
"Connections": "اتصالات", "Connections": "اتصالات",
"Content": "الاتصال", "Content": "الاتصال",
"Context Length": "طول السياق", "Context Length": "طول السياق",
"Continue Response": "متابعة الرد", "Continue Response": "متابعة الرد",
"Continue with {{provider}}": "",
"Conversation Mode": "وضع المحادثة", "Conversation Mode": "وضع المحادثة",
"Copied shared chat URL to clipboard!": "تم نسخ عنوان URL للدردشة المشتركة إلى الحافظة", "Copied shared chat URL to clipboard!": "تم نسخ عنوان URL للدردشة المشتركة إلى الحافظة",
"Copy": "نسخ", "Copy": "نسخ",
...@@ -110,7 +117,7 @@ ...@@ -110,7 +117,7 @@
"Copy Link": "أنسخ الرابط", "Copy Link": "أنسخ الرابط",
"Copying to clipboard was successful!": "تم النسخ إلى الحافظة بنجاح", "Copying to clipboard was successful!": "تم النسخ إلى الحافظة بنجاح",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "قم بإنشاء عبارة موجزة مكونة من 3-5 كلمات كرأس للاستعلام التالي، مع الالتزام الصارم بالحد الأقصى لعدد الكلمات الذي يتراوح بين 3-5 كلمات وتجنب استخدام الكلمة 'عنوان':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "قم بإنشاء عبارة موجزة مكونة من 3-5 كلمات كرأس للاستعلام التالي، مع الالتزام الصارم بالحد الأقصى لعدد الكلمات الذي يتراوح بين 3-5 كلمات وتجنب استخدام الكلمة 'عنوان':",
"Create a model": "", "Create a model": "إنشاء نموذج",
"Create Account": "إنشاء حساب", "Create Account": "إنشاء حساب",
"Create new key": "عمل مفتاح جديد", "Create new key": "عمل مفتاح جديد",
"Create new secret key": "عمل سر جديد", "Create new secret key": "عمل سر جديد",
...@@ -119,7 +126,7 @@ ...@@ -119,7 +126,7 @@
"Current Model": "الموديل المختار", "Current Model": "الموديل المختار",
"Current Password": "كلمة السر الحالية", "Current Password": "كلمة السر الحالية",
"Custom": "مخصص", "Custom": "مخصص",
"Customize models for a specific purpose": "", "Customize models for a specific purpose": "تخصيص النماذج لغرض معين",
"Dark": "مظلم", "Dark": "مظلم",
"Database": "قاعدة البيانات", "Database": "قاعدة البيانات",
"December": "ديسمبر", "December": "ديسمبر",
...@@ -127,29 +134,30 @@ ...@@ -127,29 +134,30 @@
"Default (Automatic1111)": "(Automatic1111) الإفتراضي", "Default (Automatic1111)": "(Automatic1111) الإفتراضي",
"Default (SentenceTransformers)": "(SentenceTransformers) الإفتراضي", "Default (SentenceTransformers)": "(SentenceTransformers) الإفتراضي",
"Default (Web API)": "(Web API) الإفتراضي", "Default (Web API)": "(Web API) الإفتراضي",
"Default Model": "النموذج الافتراضي",
"Default model updated": "الإفتراضي تحديث الموديل", "Default model updated": "الإفتراضي تحديث الموديل",
"Default Prompt Suggestions": "الإفتراضي Prompt الاقتراحات", "Default Prompt Suggestions": "الإفتراضي Prompt الاقتراحات",
"Default User Role": "الإفتراضي صلاحيات المستخدم", "Default User Role": "الإفتراضي صلاحيات المستخدم",
"delete": "حذف", "delete": "حذف",
"Delete": "حذف", "Delete": "حذف",
"Delete a model": "حذف الموديل", "Delete a model": "حذف الموديل",
"Delete All Chats": "", "Delete All Chats": "حذف جميع الدردشات",
"Delete chat": "حذف المحادثه", "Delete chat": "حذف المحادثه",
"Delete Chat": "حذف المحادثه.", "Delete Chat": "حذف المحادثه.",
"delete this link": "أحذف هذا الرابط", "delete this link": "أحذف هذا الرابط",
"Delete User": "حذف المستخدم", "Delete User": "حذف المستخدم",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف",
"Deleted {{name}}": "", "Deleted {{name}}": "حذف {{name}}",
"Description": "وصف", "Description": "وصف",
"Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل", "Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل",
"Disabled": "تعطيل", "Discover a model": "اكتشف نموذجا",
"Discover a model": "",
"Discover a prompt": "اكتشاف موجه", "Discover a prompt": "اكتشاف موجه",
"Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة", "Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة",
"Discover, download, and explore model presets": "اكتشاف وتنزيل واستكشاف الإعدادات المسبقة للنموذج", "Discover, download, and explore model presets": "اكتشاف وتنزيل واستكشاف الإعدادات المسبقة للنموذج",
"Display the username instead of You in the Chat": "اعرض اسم المستخدم بدلاً منك في الدردشة", "Display the username instead of You in the Chat": "اعرض اسم المستخدم بدلاً منك في الدردشة",
"Document": "المستند", "Document": "المستند",
"Document Settings": "أعدادات المستند", "Document Settings": "أعدادات المستند",
"Documentation": "",
"Documents": "مستندات", "Documents": "مستندات",
"does not make any external connections, and your data stays securely on your locally hosted server.": "لا يجري أي اتصالات خارجية، وتظل بياناتك آمنة على الخادم المستضاف محليًا.", "does not make any external connections, and your data stays securely on your locally hosted server.": "لا يجري أي اتصالات خارجية، وتظل بياناتك آمنة على الخادم المستضاف محليًا.",
"Don't Allow": "لا تسمح بذلك", "Don't Allow": "لا تسمح بذلك",
...@@ -164,22 +172,31 @@ ...@@ -164,22 +172,31 @@
"Edit Doc": "تعديل الملف", "Edit Doc": "تعديل الملف",
"Edit User": "تعديل المستخدم", "Edit User": "تعديل المستخدم",
"Email": "البريد", "Email": "البريد",
"Embedding Batch Size": "",
"Embedding Model": "نموذج التضمين", "Embedding Model": "نموذج التضمين",
"Embedding Model Engine": "تضمين محرك النموذج", "Embedding Model Engine": "تضمين محرك النموذج",
"Embedding model set to \"{{embedding_model}}\"": "تم تعيين نموذج التضمين على \"{{embedding_model}}\"", "Embedding model set to \"{{embedding_model}}\"": "تم تعيين نموذج التضمين على \"{{embedding_model}}\"",
"Enable Chat History": "تمكين سجل الدردشة", "Enable Chat History": "تمكين سجل الدردشة",
"Enable Community Sharing": "تمكين مشاركة المجتمع",
"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة", "Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
"Enabled": "تفعيل", "Enable Web Search": "تمكين بحث الويب",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.", "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 {{role}} message here": "أدخل رسالة {{role}} هنا",
"Enter a detail about yourself for your LLMs to recall": "ادخل معلومات عنك تريد أن يتذكرها الموديل", "Enter a detail about yourself for your LLMs to recall": "ادخل معلومات عنك تريد أن يتذكرها الموديل",
"Enter Brave Search API Key": "أدخل مفتاح واجهة برمجة تطبيقات البحث الشجاع",
"Enter Chunk Overlap": "أدخل الChunk Overlap", "Enter Chunk Overlap": "أدخل الChunk Overlap",
"Enter Chunk Size": "أدخل Chunk الحجم", "Enter Chunk Size": "أدخل Chunk الحجم",
"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 Image Size (e.g. 512x512)": "(e.g. 512x512) أدخل حجم الصورة ",
"Enter language codes": "أدخل كود اللغة", "Enter language codes": "أدخل كود اللغة",
"Enter model tag (e.g. {{modelTag}})": "(e.g. {{modelTag}}) أدخل الموديل تاق", "Enter model tag (e.g. {{modelTag}})": "(e.g. {{modelTag}}) أدخل الموديل تاق",
"Enter Number of Steps (e.g. 50)": "(e.g. 50) أدخل عدد الخطوات", "Enter Number of Steps (e.g. 50)": "(e.g. 50) أدخل عدد الخطوات",
"Enter Score": "أدخل النتيجة", "Enter Score": "أدخل النتيجة",
"Enter Searxng Query URL": "أدخل عنوان URL لاستعلام Searxng",
"Enter Serper API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serper",
"Enter Serpstack API Key": "أدخل مفتاح واجهة برمجة تطبيقات Serpstack",
"Enter stop sequence": "أدخل تسلسل التوقف", "Enter stop sequence": "أدخل تسلسل التوقف",
"Enter Top K": "أدخل Top K", "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://127.0.0.1:7860/)": "الرابط (e.g. http://127.0.0.1:7860/)",
...@@ -188,15 +205,18 @@ ...@@ -188,15 +205,18 @@
"Enter Your Full Name": "أدخل الاسم كامل", "Enter Your Full Name": "أدخل الاسم كامل",
"Enter Your Password": "ادخل كلمة المرور", "Enter Your Password": "ادخل كلمة المرور",
"Enter Your Role": "أدخل الصلاحيات", "Enter Your Role": "أدخل الصلاحيات",
"Error": "", "Error": "خطأ",
"Experimental": "تجريبي", "Experimental": "تجريبي",
"Export": "تصدير",
"Export All Chats (All Users)": "تصدير جميع الدردشات (جميع المستخدمين)", "Export All Chats (All Users)": "تصدير جميع الدردشات (جميع المستخدمين)",
"Export chat (.json)": "",
"Export Chats": "تصدير جميع الدردشات", "Export Chats": "تصدير جميع الدردشات",
"Export Documents Mapping": "تصدير وثائق الخرائط", "Export Documents Mapping": "تصدير وثائق الخرائط",
"Export Models": "", "Export Models": "نماذج التصدير",
"Export Prompts": "مطالبات التصدير", "Export Prompts": "مطالبات التصدير",
"Failed to create API Key.": "فشل في إنشاء مفتاح API.", "Failed to create API Key.": "فشل في إنشاء مفتاح API.",
"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة", "Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
"Failed to update settings": "",
"February": "فبراير", "February": "فبراير",
"Feel free to add specific details": "لا تتردد في إضافة تفاصيل محددة", "Feel free to add specific details": "لا تتردد في إضافة تفاصيل محددة",
"File Mode": "وضع الملف", "File Mode": "وضع الملف",
...@@ -206,12 +226,14 @@ ...@@ -206,12 +226,14 @@
"Focus chat input": "التركيز على إدخال الدردشة", "Focus chat input": "التركيز على إدخال الدردشة",
"Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه", "Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه",
"Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:", "Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:",
"Frequencey Penalty": "", "Frequency Penalty": "عقوبة التردد",
"Full Screen Mode": "وضع ملء الشاشة",
"General": "عام", "General": "عام",
"General Settings": "الاعدادات العامة", "General Settings": "الاعدادات العامة",
"Generating search query": "إنشاء استعلام بحث",
"Generation Info": "معلومات الجيل", "Generation Info": "معلومات الجيل",
"Good Response": "استجابة جيدة", "Good Response": "استجابة جيدة",
"Google PSE API Key": "مفتاح واجهة برمجة تطبيقات PSE من Google",
"Google PSE Engine Id": "معرف محرك PSE من Google",
"h:mm a": "الساعة:الدقائق صباحا/مساء", "h:mm a": "الساعة:الدقائق صباحا/مساء",
"has no conversations.": "ليس لديه محادثات.", "has no conversations.": "ليس لديه محادثات.",
"Hello, {{name}}": " {{name}} مرحبا", "Hello, {{name}}": " {{name}} مرحبا",
...@@ -225,17 +247,18 @@ ...@@ -225,17 +247,18 @@
"Images": "الصور", "Images": "الصور",
"Import Chats": "استيراد الدردشات", "Import Chats": "استيراد الدردشات",
"Import Documents Mapping": "استيراد خرائط المستندات", "Import Documents Mapping": "استيراد خرائط المستندات",
"Import Models": "", "Import Models": "استيراد النماذج",
"Import Prompts": "مطالبات الاستيراد", "Import Prompts": "مطالبات الاستيراد",
"Include `--api` flag when running stable-diffusion-webui": "قم بتضمين علامة `-api` عند تشغيل Stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "قم بتضمين علامة `-api` عند تشغيل Stable-diffusion-webui",
"Info": "", "Info": "معلومات",
"Input commands": "إدخال الأوامر", "Input commands": "إدخال الأوامر",
"Install from Github URL": "التثبيت من عنوان URL لجيثب",
"Interface": "واجهه المستخدم", "Interface": "واجهه المستخدم",
"Invalid Tag": "تاق غير صالحة", "Invalid Tag": "تاق غير صالحة",
"January": "يناير", "January": "يناير",
"join our Discord for help.": "انضم إلى Discord للحصول على المساعدة.", "join our Discord for help.": "انضم إلى Discord للحصول على المساعدة.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "", "JSON Preview": "معاينة JSON",
"July": "يوليو", "July": "يوليو",
"June": "يونيو", "June": "يونيو",
"JWT Expiration": "JWT تجريبي", "JWT Expiration": "JWT تجريبي",
...@@ -252,11 +275,12 @@ ...@@ -252,11 +275,12 @@
"Make sure to enclose them with": "تأكد من إرفاقها", "Make sure to enclose them with": "تأكد من إرفاقها",
"Manage Models": "إدارة النماذج", "Manage Models": "إدارة النماذج",
"Manage Ollama Models": "Ollama إدارة موديلات ", "Manage Ollama Models": "Ollama إدارة موديلات ",
"Manage Pipelines": "إدارة خطوط الأنابيب",
"March": "مارس", "March": "مارس",
"Max Tokens (num_predict)": "", "Max Tokens (num_predict)": "ماكس توكنز (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "يمكن تنزيل 3 نماذج كحد أقصى في وقت واحد. الرجاء معاودة المحاولة في وقت لاحق.",
"May": "مايو", "May": "مايو",
"Memories accessible by LLMs will be shown here.": "", "Memories accessible by LLMs will be shown here.": "سيتم عرض الذكريات التي يمكن الوصول إليها بواسطة LLMs هنا.",
"Memory": "الذاكرة", "Memory": "الذاكرة",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "لن تتم مشاركة الرسائل التي ترسلها بعد إنشاء الرابط الخاص بك. سيتمكن المستخدمون الذين لديهم عنوان URL من عرض الدردشة المشتركة", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "لن تتم مشاركة الرسائل التي ترسلها بعد إنشاء الرابط الخاص بك. سيتمكن المستخدمون الذين لديهم عنوان URL من عرض الدردشة المشتركة",
"Minimum Score": "الحد الأدنى من النقاط", "Minimum Score": "الحد الأدنى من النقاط",
...@@ -268,11 +292,12 @@ ...@@ -268,11 +292,12 @@
"Model '{{modelName}}' has been successfully downloaded.": "تم تحميل النموذج '{{modelName}}' بنجاح", "Model '{{modelName}}' has been successfully downloaded.": "تم تحميل النموذج '{{modelName}}' بنجاح",
"Model '{{modelTag}}' is already in queue for downloading.": "النموذج '{{modelTag}}' موجود بالفعل في قائمة الانتظار للتحميل", "Model '{{modelTag}}' is already in queue for downloading.": "النموذج '{{modelTag}}' موجود بالفعل في قائمة الانتظار للتحميل",
"Model {{modelId}} not found": "لم يتم العثور على النموذج {{modelId}}.", "Model {{modelId}} not found": "لم يتم العثور على النموذج {{modelId}}.",
"Model {{modelName}} is not vision capable": "", "Model {{modelName}} is not vision capable": "نموذج {{modelName}} غير قادر على الرؤية",
"Model {{name}} is now {{status}}": "نموذج {{name}} هو الآن {{status}}",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "تم اكتشاف مسار نظام الملفات النموذجي. الاسم المختصر للنموذج مطلوب للتحديث، ولا يمكن الاستمرار.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "تم اكتشاف مسار نظام الملفات النموذجي. الاسم المختصر للنموذج مطلوب للتحديث، ولا يمكن الاستمرار.",
"Model ID": "", "Model ID": "رقم الموديل",
"Model not selected": "لم تختار موديل", "Model not selected": "لم تختار موديل",
"Model Params": "", "Model Params": "معلمات النموذج",
"Model Whitelisting": "القائمة البيضاء للموديل", "Model Whitelisting": "القائمة البيضاء للموديل",
"Model(s) Whitelisted": "القائمة البيضاء الموديل", "Model(s) Whitelisted": "القائمة البيضاء الموديل",
"Modelfile Content": "محتوى الملف النموذجي", "Modelfile Content": "محتوى الملف النموذجي",
...@@ -280,21 +305,25 @@ ...@@ -280,21 +305,25 @@
"More": "المزيد", "More": "المزيد",
"Name": "الأسم", "Name": "الأسم",
"Name Tag": "أسم التاق", "Name Tag": "أسم التاق",
"Name your model": "", "Name your model": "قم بتسمية النموذج الخاص بك",
"New Chat": "دردشة جديدة", "New Chat": "دردشة جديدة",
"New Password": "كلمة المرور الجديدة", "New Password": "كلمة المرور الجديدة",
"No results found": "لا توجد نتايج", "No results found": "لا توجد نتايج",
"No search query generated": "لم يتم إنشاء استعلام بحث",
"No source available": "لا يوجد مصدر متاح", "No source available": "لا يوجد مصدر متاح",
"None": "اي",
"Not factually correct": "ليس صحيحا من حيث الواقع", "Not factually correct": "ليس صحيحا من حيث الواقع",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "ملاحظة: إذا قمت بتعيين الحد الأدنى من النقاط، فلن يؤدي البحث إلا إلى إرجاع المستندات التي لها نقاط أكبر من أو تساوي الحد الأدنى من النقاط.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "ملاحظة: إذا قمت بتعيين الحد الأدنى من النقاط، فلن يؤدي البحث إلا إلى إرجاع المستندات التي لها نقاط أكبر من أو تساوي الحد الأدنى من النقاط.",
"Notifications": "إشعارات", "Notifications": "إشعارات",
"November": "نوفمبر", "November": "نوفمبر",
"num_thread (Ollama)": "num_thread (أولاما)",
"October": "اكتوبر", "October": "اكتوبر",
"Off": "أغلاق", "Off": "أغلاق",
"Okay, Let's Go!": "حسنا دعنا نذهب!", "Okay, Let's Go!": "حسنا دعنا نذهب!",
"OLED Dark": "OLED داكن", "OLED Dark": "OLED داكن",
"Ollama": "Ollama", "Ollama": "Ollama",
"Ollama API": "", "Ollama API": "أولاما API",
"Ollama API disabled": "أولاما API معطلة",
"Ollama Version": "Ollama الاصدار", "Ollama Version": "Ollama الاصدار",
"On": "تشغيل", "On": "تشغيل",
"Only": "فقط", "Only": "فقط",
...@@ -319,6 +348,8 @@ ...@@ -319,6 +348,8 @@
"pending": "قيد الانتظار", "pending": "قيد الانتظار",
"Permission denied when accessing microphone: {{error}}": "{{error}} تم رفض الإذن عند الوصول إلى الميكروفون ", "Permission denied when accessing microphone: {{error}}": "{{error}} تم رفض الإذن عند الوصول إلى الميكروفون ",
"Personalization": "التخصيص", "Personalization": "التخصيص",
"Pipelines": "خطوط الانابيب",
"Pipelines Valves": "صمامات خطوط الأنابيب",
"Plain text (.txt)": "نص عادي (.txt)", "Plain text (.txt)": "نص عادي (.txt)",
"Playground": "مكان التجربة", "Playground": "مكان التجربة",
"Positive attitude": "موقف ايجابي", "Positive attitude": "موقف ايجابي",
...@@ -348,6 +379,7 @@ ...@@ -348,6 +379,7 @@
"Reranking Model": "إعادة تقييم النموذج", "Reranking Model": "إعادة تقييم النموذج",
"Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب", "Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب",
"Reranking model set to \"{{reranking_model}}\"": "تم ضبط نموذج إعادة الترتيب على \"{{reranking_model}}\"", "Reranking model set to \"{{reranking_model}}\"": "تم ضبط نموذج إعادة الترتيب على \"{{reranking_model}}\"",
"Reset Upload Directory": "",
"Reset Vector Storage": "إعادة تعيين تخزين المتجهات", "Reset Vector Storage": "إعادة تعيين تخزين المتجهات",
"Response AutoCopy to Clipboard": "النسخ التلقائي للاستجابة إلى الحافظة", "Response AutoCopy to Clipboard": "النسخ التلقائي للاستجابة إلى الحافظة",
"Role": "منصب", "Role": "منصب",
...@@ -363,23 +395,36 @@ ...@@ -363,23 +395,36 @@
"Scan for documents from {{path}}": "{{path}} مسح على الملفات من", "Scan for documents from {{path}}": "{{path}} مسح على الملفات من",
"Search": "البحث", "Search": "البحث",
"Search a model": "البحث عن موديل", "Search a model": "البحث عن موديل",
"Search Chats": "", "Search Chats": "البحث في الدردشات",
"Search Documents": "البحث المستندات", "Search Documents": "البحث المستندات",
"Search Models": "", "Search Models": "نماذج البحث",
"Search Prompts": "أبحث حث", "Search Prompts": "أبحث حث",
"Search Result Count": "عدد نتائج البحث",
"Searched {{count}} sites_zero": "تم البحث في {{count}} sites_zero",
"Searched {{count}} sites_one": "تم البحث في {{count}} sites_one",
"Searched {{count}} sites_two": "تم البحث في {{count}} sites_two",
"Searched {{count}} sites_few": "تم البحث في {{count}} sites_few",
"Searched {{count}} sites_many": "تم البحث في {{count}} sites_many",
"Searched {{count}} sites_other": "تم البحث في {{count}} sites_other",
"Searching the web for '{{searchQuery}}'": "البحث في الويب عن \"{{searchQuery}}\"",
"Searxng Query URL": "عنوان URL لاستعلام Searxng",
"See readme.md for instructions": "readme.md للحصول على التعليمات", "See readme.md for instructions": "readme.md للحصول على التعليمات",
"See what's new": "ما الجديد", "See what's new": "ما الجديد",
"Seed": "Seed", "Seed": "Seed",
"Select a base model": "", "Select a base model": "حدد نموذجا أساسيا",
"Select a mode": "أختار موديل", "Select a mode": "أختار موديل",
"Select a model": "أختار الموديل", "Select a model": "أختار الموديل",
"Select a pipeline": "حدد مسارا",
"Select a pipeline url": "حدد عنوان URL لخط الأنابيب",
"Select an Ollama instance": "أختار سيرفر ", "Select an Ollama instance": "أختار سيرفر ",
"Select model": " أختار موديل", "Select model": " أختار موديل",
"Selected model(s) do not support image inputs": "", "Selected model(s) do not support image inputs": "النموذج (النماذج) المحددة لا تدعم مدخلات الصور",
"Send": "تم", "Send": "تم",
"Send a Message": "يُرجى إدخال طلبك هنا", "Send a Message": "يُرجى إدخال طلبك هنا",
"Send message": "يُرجى إدخال طلبك هنا.", "Send message": "يُرجى إدخال طلبك هنا.",
"September": "سبتمبر", "September": "سبتمبر",
"Serper API Key": "مفتاح واجهة برمجة تطبيقات سيربر",
"Serpstack API Key": "مفتاح واجهة برمجة تطبيقات Serpstack",
"Server connection verified": "تم التحقق من اتصال الخادم", "Server connection verified": "تم التحقق من اتصال الخادم",
"Set as default": "الافتراضي", "Set as default": "الافتراضي",
"Set Default Model": "تفعيد الموديل الافتراضي", "Set Default Model": "تفعيد الموديل الافتراضي",
...@@ -388,15 +433,17 @@ ...@@ -388,15 +433,17 @@
"Set Model": "ضبط النموذج", "Set Model": "ضبط النموذج",
"Set reranking model (e.g. {{model}})": "ضبط نموذج إعادة الترتيب (على سبيل المثال: {{model}})", "Set reranking model (e.g. {{model}})": "ضبط نموذج إعادة الترتيب (على سبيل المثال: {{model}})",
"Set Steps": "ضبط الخطوات", "Set Steps": "ضبط الخطوات",
"Set Title Auto-Generation Model": "قم بتعيين نموذج إنشاء العنوان تلقائيًا", "Set Task Model": "تعيين نموذج المهمة",
"Set Voice": "ضبط الصوت", "Set Voice": "ضبط الصوت",
"Settings": "الاعدادات", "Settings": "الاعدادات",
"Settings saved successfully!": "تم حفظ الاعدادات بنجاح", "Settings saved successfully!": "تم حفظ الاعدادات بنجاح",
"Settings updated successfully": "",
"Share": "كشاركة", "Share": "كشاركة",
"Share Chat": "مشاركة الدردشة", "Share Chat": "مشاركة الدردشة",
"Share to OpenWebUI Community": "OpenWebUI شارك في مجتمع", "Share to OpenWebUI Community": "OpenWebUI شارك في مجتمع",
"short-summary": "ملخص قصير", "short-summary": "ملخص قصير",
"Show": "عرض", "Show": "عرض",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "إظهار الاختصارات", "Show shortcuts": "إظهار الاختصارات",
"Showcased creativity": "أظهر الإبداع", "Showcased creativity": "أظهر الإبداع",
"sidebar": "الشريط الجانبي", "sidebar": "الشريط الجانبي",
...@@ -447,19 +494,21 @@ ...@@ -447,19 +494,21 @@
"Top P": "Top P", "Top P": "Top P",
"Trouble accessing Ollama?": "هل تواجه مشكلة في الوصول", "Trouble accessing Ollama?": "هل تواجه مشكلة في الوصول",
"TTS Settings": "TTS اعدادات", "TTS Settings": "TTS اعدادات",
"Type": "", "Type": "نوع",
"Type Hugging Face Resolve (Download) URL": "اكتب عنوان URL لحل مشكلة الوجه (تنزيل).", "Type Hugging Face Resolve (Download) URL": "اكتب عنوان URL لحل مشكلة الوجه (تنزيل).",
"Uh-oh! There was an issue connecting to {{provider}}.": "{{provider}}خطاء أوه! حدثت مشكلة في الاتصال بـ ", "Uh-oh! There was an issue connecting to {{provider}}.": "{{provider}}خطاء أوه! حدثت مشكلة في الاتصال بـ ",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع ملف غير معروف '{{file_type}}', ولكن القبول والتعامل كنص عادي ", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع ملف غير معروف '{{file_type}}', ولكن القبول والتعامل كنص عادي ",
"Update and Copy Link": "تحديث ونسخ الرابط", "Update and Copy Link": "تحديث ونسخ الرابط",
"Update password": "تحديث كلمة المرور", "Update password": "تحديث كلمة المرور",
"Upload a GGUF model": "GGUF رفع موديل نوع", "Upload a GGUF model": "GGUF رفع موديل نوع",
"Upload files": "رفع الملفات", "Upload Files": "تحميل الملفات",
"Upload Progress": "جاري التحميل", "Upload Progress": "جاري التحميل",
"URL Mode": "رابط الموديل", "URL Mode": "رابط الموديل",
"Use '#' in the prompt input to load and select your documents.": "أستخدم '#' في المحادثة لربطهامن المستندات", "Use '#' in the prompt input to load and select your documents.": "أستخدم '#' في المحادثة لربطهامن المستندات",
"Use Gravatar": "Gravatar أستخدم", "Use Gravatar": "Gravatar أستخدم",
"Use Initials": "Initials أستخدم", "Use Initials": "Initials أستخدم",
"use_mlock (Ollama)": "use_mlock (أولاما)",
"use_mmap (Ollama)": "use_mmap (أولاما)",
"user": "مستخدم", "user": "مستخدم",
"User Permissions": "صلاحيات المستخدم", "User Permissions": "صلاحيات المستخدم",
"Users": "المستخدمين", "Users": "المستخدمين",
...@@ -468,11 +517,13 @@ ...@@ -468,11 +517,13 @@
"variable": "المتغير", "variable": "المتغير",
"variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.", "variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.",
"Version": "إصدار", "Version": "إصدار",
"Warning": "", "Warning": "تحذير",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.",
"Web": "Web", "Web": "Web",
"Web Loader Settings": "Web تحميل اعدادات", "Web Loader Settings": "Web تحميل اعدادات",
"Web Params": "Web تحميل اعدادات", "Web Params": "Web تحميل اعدادات",
"Web Search": "بحث الويب",
"Web Search Engine": "محرك بحث الويب",
"Webhook URL": "Webhook الرابط", "Webhook URL": "Webhook الرابط",
"WebUI Add-ons": "WebUI الأضافات", "WebUI Add-ons": "WebUI الأضافات",
"WebUI Settings": "WebUI اعدادات", "WebUI Settings": "WebUI اعدادات",
...@@ -480,12 +531,13 @@ ...@@ -480,12 +531,13 @@
"What’s New in": "ما هو الجديد", "What’s New in": "ما هو الجديد",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "عند إيقاف تشغيل السجل، لن تظهر الدردشات الجديدة على هذا المتصفح في سجلك على أي من أجهزتك.", "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "عند إيقاف تشغيل السجل، لن تظهر الدردشات الجديدة على هذا المتصفح في سجلك على أي من أجهزتك.",
"Whisper (Local)": "Whisper (Local)", "Whisper (Local)": "Whisper (Local)",
"Widescreen Mode": "",
"Workspace": "مساحة العمل", "Workspace": "مساحة العمل",
"Write a prompt suggestion (e.g. Who are you?)": "اكتب اقتراحًا سريعًا (على سبيل المثال، من أنت؟)", "Write a prompt suggestion (e.g. Who are you?)": "اكتب اقتراحًا سريعًا (على سبيل المثال، من أنت؟)",
"Write a summary in 50 words that summarizes [topic or keyword].": "اكتب ملخصًا في 50 كلمة يلخص [الموضوع أو الكلمة الرئيسية]", "Write a summary in 50 words that summarizes [topic or keyword].": "اكتب ملخصًا في 50 كلمة يلخص [الموضوع أو الكلمة الرئيسية]",
"Yesterday": "أمس", "Yesterday": "أمس",
"You": "انت", "You": "انت",
"You cannot clone a base model": "", "You cannot clone a base model": "لا يمكنك استنساخ نموذج أساسي",
"You have no archived conversations.": "لا تملك محادثات محفوظه", "You have no archived conversations.": "لا تملك محادثات محفوظه",
"You have shared this chat": "تم مشاركة هذه المحادثة", "You have shared this chat": "تم مشاركة هذه المحادثة",
"You're a helpful assistant.": "مساعدك المفيد هنا", "You're a helpful assistant.": "مساعدك المفيد هنا",
......
...@@ -3,18 +3,20 @@ ...@@ -3,18 +3,20 @@
"(Beta)": "(Бета)", "(Beta)": "(Бета)",
"(e.g. `sh webui.sh --api`)": "(например `sh webui.sh --api`)", "(e.g. `sh webui.sh --api`)": "(например `sh webui.sh --api`)",
"(latest)": "(последна)", "(latest)": "(последна)",
"{{ models }}": "", "{{ models }}": "{{ модели }}",
"{{ owner }}: You cannot delete a base model": "", "{{ owner }}: You cannot delete a base model": "{{ owner }}: Не можете да изтриете базов модел",
"{{modelName}} is thinking...": "{{modelName}} мисли ...", "{{modelName}} is thinking...": "{{modelName}} мисли ...",
"{{user}}'s Chats": "{{user}}'s чатове", "{{user}}'s Chats": "{{user}}'s чатове",
"{{webUIName}} Backend Required": "{{webUIName}} Изисква се Бекенд", "{{webUIName}} Backend Required": "{{webUIName}} Изисква се Бекенд",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Моделът на задачите се използва при изпълнение на задачи като генериране на заглавия за чатове и заявки за търсене в мрежата",
"a user": "потребител", "a user": "потребител",
"About": "Относно", "About": "Относно",
"Account": "Акаунт", "Account": "Акаунт",
"Accurate information": "Точни информация", "Accurate information": "Точни информация",
"Active Users": "",
"Add": "Добавяне", "Add": "Добавяне",
"Add a model id": "", "Add a model id": "Добавяне на ИД на модел",
"Add a short description about what this model does": "", "Add a short description about what this model does": "Добавете кратко описание за това какво прави този модел",
"Add a short title for this prompt": "Добавяне на кратко заглавие за този промпт", "Add a short title for this prompt": "Добавяне на кратко заглавие за този промпт",
"Add a tag": "Добавяне на таг", "Add a tag": "Добавяне на таг",
"Add custom prompt": "Добавяне на собствен промпт", "Add custom prompt": "Добавяне на собствен промпт",
...@@ -30,12 +32,13 @@ ...@@ -30,12 +32,13 @@
"Admin Panel": "Панел на Администратор", "Admin Panel": "Панел на Администратор",
"Admin Settings": "Настройки на Администратор", "Admin Settings": "Настройки на Администратор",
"Advanced Parameters": "Разширени Параметри", "Advanced Parameters": "Разширени Параметри",
"Advanced Params": "", "Advanced Params": "Разширени параметри",
"all": "всички", "all": "всички",
"All Documents": "Всички Документи", "All Documents": "Всички Документи",
"All Users": "Всички Потребители", "All Users": "Всички Потребители",
"Allow": "Позволи", "Allow": "Позволи",
"Allow Chat Deletion": "Позволи Изтриване на Чат", "Allow Chat Deletion": "Позволи Изтриване на Чат",
"Allow non-local voices": "",
"alphanumeric characters and hyphens": "алфанумерични знаци и тире", "alphanumeric characters and hyphens": "алфанумерични знаци и тире",
"Already have an account?": "Вече имате акаунт? ", "Already have an account?": "Вече имате акаунт? ",
"an assistant": "асистент", "an assistant": "асистент",
...@@ -47,7 +50,7 @@ ...@@ -47,7 +50,7 @@
"API keys": "API Ключове", "API keys": "API Ключове",
"April": "Април", "April": "Април",
"Archive": "Архивирани Чатове", "Archive": "Архивирани Чатове",
"Archive All Chats": "", "Archive All Chats": "Архив Всички чатове",
"Archived Chats": "Архивирани Чатове", "Archived Chats": "Архивирани Чатове",
"are allowed - Activate this command by typing": "са разрешени - Активирайте тази команда чрез въвеждане", "are allowed - Activate this command by typing": "са разрешени - Активирайте тази команда чрез въвеждане",
"Are you sure?": "Сигурни ли сте?", "Are you sure?": "Сигурни ли сте?",
...@@ -62,13 +65,14 @@ ...@@ -62,13 +65,14 @@
"available!": "наличен!", "available!": "наличен!",
"Back": "Назад", "Back": "Назад",
"Bad Response": "Невалиден отговор от API", "Bad Response": "Невалиден отговор от API",
"Banners": "", "Banners": "Банери",
"Base Model (From)": "", "Base Model (From)": "Базов модел (от)",
"before": "преди", "before": "преди",
"Being lazy": "Да бъдеш мързелив", "Being lazy": "Да бъдеш мързелив",
"Brave Search API Key": "Смел ключ за API за търсене",
"Bypass SSL verification for Websites": "Изключване на SSL проверката за сайтове", "Bypass SSL verification for Websites": "Изключване на SSL проверката за сайтове",
"Cancel": "Отказ", "Cancel": "Отказ",
"Capabilities": "", "Capabilities": "Възможности",
"Change Password": "Промяна на Парола", "Change Password": "Промяна на Парола",
"Chat": "Чат", "Chat": "Чат",
"Chat Bubble UI": "UI за чат бублон", "Chat Bubble UI": "UI за чат бублон",
...@@ -91,17 +95,20 @@ ...@@ -91,17 +95,20 @@
"Click here to select documents.": "Натиснете тук, за да изберете документи.", "Click here to select documents.": "Натиснете тук, за да изберете документи.",
"click here.": "натиснете тук.", "click here.": "натиснете тук.",
"Click on the user role button to change a user's role.": "Натиснете върху бутона за промяна на ролята на потребителя.", "Click on the user role button to change a user's role.": "Натиснете върху бутона за промяна на ролята на потребителя.",
"Clone": "Клонинг",
"Close": "Затвори", "Close": "Затвори",
"Collection": "Колекция", "Collection": "Колекция",
"ComfyUI": "ComfyUI", "ComfyUI": "ComfyUI",
"ComfyUI Base URL": "ComfyUI Base URL", "ComfyUI Base URL": "ComfyUI Base URL",
"ComfyUI Base URL is required.": "ComfyUI Base URL е задължително.", "ComfyUI Base URL is required.": "ComfyUI Base URL е задължително.",
"Command": "Команда", "Command": "Команда",
"Concurrent Requests": "Едновременни искания",
"Confirm Password": "Потвърди Парола", "Confirm Password": "Потвърди Парола",
"Connections": "Връзки", "Connections": "Връзки",
"Content": "Съдържание", "Content": "Съдържание",
"Context Length": "Дължина на Контекста", "Context Length": "Дължина на Контекста",
"Continue Response": "Продължи отговора", "Continue Response": "Продължи отговора",
"Continue with {{provider}}": "",
"Conversation Mode": "Режим на Чат", "Conversation Mode": "Режим на Чат",
"Copied shared chat URL to clipboard!": "Копирана е връзката за чат!", "Copied shared chat URL to clipboard!": "Копирана е връзката за чат!",
"Copy": "Копирай", "Copy": "Копирай",
...@@ -110,7 +117,7 @@ ...@@ -110,7 +117,7 @@
"Copy Link": "Копиране на връзка", "Copy Link": "Копиране на връзка",
"Copying to clipboard was successful!": "Копирането в клипборда беше успешно!", "Copying to clipboard was successful!": "Копирането в клипборда беше успешно!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Създайте кратка фраза от 3-5 думи като заглавие за следващото запитване, като стриктно спазвате ограничението от 3-5 думи и избягвате използването на думата 'заглавие':", "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Създайте кратка фраза от 3-5 думи като заглавие за следващото запитване, като стриктно спазвате ограничението от 3-5 думи и избягвате използването на думата 'заглавие':",
"Create a model": "", "Create a model": "Създаване на модел",
"Create Account": "Създаване на Акаунт", "Create Account": "Създаване на Акаунт",
"Create new key": "Създаване на нов ключ", "Create new key": "Създаване на нов ключ",
"Create new secret key": "Създаване на нов секретен ключ", "Create new secret key": "Създаване на нов секретен ключ",
...@@ -119,7 +126,7 @@ ...@@ -119,7 +126,7 @@
"Current Model": "Текущ модел", "Current Model": "Текущ модел",
"Current Password": "Текуща Парола", "Current Password": "Текуща Парола",
"Custom": "Персонализиран", "Custom": "Персонализиран",
"Customize models for a specific purpose": "", "Customize models for a specific purpose": "Персонализиране на модели за конкретна цел",
"Dark": "Тъмен", "Dark": "Тъмен",
"Database": "База данни", "Database": "База данни",
"December": "Декември", "December": "Декември",
...@@ -127,29 +134,30 @@ ...@@ -127,29 +134,30 @@
"Default (Automatic1111)": "По подразбиране (Automatic1111)", "Default (Automatic1111)": "По подразбиране (Automatic1111)",
"Default (SentenceTransformers)": "По подразбиране (SentenceTransformers)", "Default (SentenceTransformers)": "По подразбиране (SentenceTransformers)",
"Default (Web API)": "По подразбиране (Web API)", "Default (Web API)": "По подразбиране (Web API)",
"Default Model": "Модел по подразбиране",
"Default model updated": "Моделът по подразбиране е обновен", "Default model updated": "Моделът по подразбиране е обновен",
"Default Prompt Suggestions": "Промпт Предложения по подразбиране", "Default Prompt Suggestions": "Промпт Предложения по подразбиране",
"Default User Role": "Роля на потребителя по подразбиране", "Default User Role": "Роля на потребителя по подразбиране",
"delete": "изтриване", "delete": "изтриване",
"Delete": "Изтриване", "Delete": "Изтриване",
"Delete a model": "Изтриване на модел", "Delete a model": "Изтриване на модел",
"Delete All Chats": "", "Delete All Chats": "Изтриване на всички чатове",
"Delete chat": "Изтриване на чат", "Delete chat": "Изтриване на чат",
"Delete Chat": "Изтриване на Чат", "Delete Chat": "Изтриване на Чат",
"delete this link": "Изтриване на този линк", "delete this link": "Изтриване на този линк",
"Delete User": "Изтриване на потребител", "Delete User": "Изтриване на потребител",
"Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}", "Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}",
"Deleted {{name}}": "", "Deleted {{name}}": "Изтрито {{име}}",
"Description": "Описание", "Description": "Описание",
"Didn't fully follow instructions": "Не следва инструкциите", "Didn't fully follow instructions": "Не следва инструкциите",
"Disabled": "Деактивиран", "Discover a model": "Открийте модел",
"Discover a model": "",
"Discover a prompt": "Откриване на промпт", "Discover a prompt": "Откриване на промпт",
"Discover, download, and explore custom prompts": "Откриване, сваляне и преглед на персонализирани промптове", "Discover, download, and explore custom prompts": "Откриване, сваляне и преглед на персонализирани промптове",
"Discover, download, and explore model presets": "Откриване, сваляне и преглед на пресетове на модели", "Discover, download, and explore model presets": "Откриване, сваляне и преглед на пресетове на модели",
"Display the username instead of You in the Chat": "Показване на потребителското име вместо Вие в чата", "Display the username instead of You in the Chat": "Показване на потребителското име вместо Вие в чата",
"Document": "Документ", "Document": "Документ",
"Document Settings": "Документ Настройки", "Document Settings": "Документ Настройки",
"Documentation": "",
"Documents": "Документи", "Documents": "Документи",
"does not make any external connections, and your data stays securely on your locally hosted server.": "няма външни връзки, и вашите данни остават сигурни на локално назначен сървър.", "does not make any external connections, and your data stays securely on your locally hosted server.": "няма външни връзки, и вашите данни остават сигурни на локално назначен сървър.",
"Don't Allow": "Не Позволявай", "Don't Allow": "Не Позволявай",
...@@ -164,22 +172,31 @@ ...@@ -164,22 +172,31 @@
"Edit Doc": "Редактиране на документ", "Edit Doc": "Редактиране на документ",
"Edit User": "Редактиране на потребител", "Edit User": "Редактиране на потребител",
"Email": "Имейл", "Email": "Имейл",
"Embedding Batch Size": "",
"Embedding Model": "Модел за вграждане", "Embedding Model": "Модел за вграждане",
"Embedding Model Engine": "Модел за вграждане", "Embedding Model Engine": "Модел за вграждане",
"Embedding model set to \"{{embedding_model}}\"": "Модел за вграждане е настроен на \"{{embedding_model}}\"", "Embedding model set to \"{{embedding_model}}\"": "Модел за вграждане е настроен на \"{{embedding_model}}\"",
"Enable Chat History": "Вклюване на Чат История", "Enable Chat History": "Вклюване на Чат История",
"Enable Community Sharing": "Разрешаване на споделяне в общност",
"Enable New Sign Ups": "Вклюване на Нови Потребители", "Enable New Sign Ups": "Вклюване на Нови Потребители",
"Enabled": "Включено", "Enable Web Search": "Разрешаване на търсене в уеб",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.",
"Enter {{role}} message here": "Въведете съобщение за {{role}} тук", "Enter {{role}} message here": "Въведете съобщение за {{role}} тук",
"Enter a detail about yourself for your LLMs to recall": "Въведете подробности за себе си, за да се herinnerат вашите LLMs", "Enter a detail about yourself for your LLMs to recall": "Въведете подробности за себе си, за да се herinnerат вашите LLMs",
"Enter Brave Search API Key": "Въведете Brave Search API ключ",
"Enter Chunk Overlap": "Въведете Chunk Overlap", "Enter Chunk Overlap": "Въведете Chunk Overlap",
"Enter Chunk Size": "Въведете Chunk Size", "Enter Chunk Size": "Въведете Chunk Size",
"Enter Github Raw URL": "Въведете URL адреса на Github Raw",
"Enter Google PSE API Key": "Въведете Google PSE API ключ",
"Enter Google PSE Engine Id": "Въведете идентификатор на двигателя на Google PSE",
"Enter Image Size (e.g. 512x512)": "Въведете размер на изображението (напр. 512x512)", "Enter Image Size (e.g. 512x512)": "Въведете размер на изображението (напр. 512x512)",
"Enter language codes": "Въведете кодове на езика", "Enter language codes": "Въведете кодове на езика",
"Enter model tag (e.g. {{modelTag}})": "Въведете таг на модел (напр. {{modelTag}})", "Enter model tag (e.g. {{modelTag}})": "Въведете таг на модел (напр. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Въведете брой стъпки (напр. 50)", "Enter Number of Steps (e.g. 50)": "Въведете брой стъпки (напр. 50)",
"Enter Score": "Въведете оценка", "Enter Score": "Въведете оценка",
"Enter Searxng Query URL": "Въведете URL адреса на заявката на Searxng",
"Enter Serper API Key": "Въведете Serper API ключ",
"Enter Serpstack API Key": "Въведете Serpstack API ключ",
"Enter stop sequence": "Въведете стоп последователност", "Enter stop sequence": "Въведете стоп последователност",
"Enter Top K": "Въведете Top K", "Enter Top K": "Въведете Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Въведете URL (напр. http://127.0.0.1:7860/)", "Enter URL (e.g. http://127.0.0.1:7860/)": "Въведете URL (напр. http://127.0.0.1:7860/)",
...@@ -188,15 +205,18 @@ ...@@ -188,15 +205,18 @@
"Enter Your Full Name": "Въведете вашето пълно име", "Enter Your Full Name": "Въведете вашето пълно име",
"Enter Your Password": "Въведете вашата парола", "Enter Your Password": "Въведете вашата парола",
"Enter Your Role": "Въведете вашата роля", "Enter Your Role": "Въведете вашата роля",
"Error": "", "Error": "Грешка",
"Experimental": "Експериментално", "Experimental": "Експериментално",
"Export": "Износ",
"Export All Chats (All Users)": "Експортване на всички чатове (За всички потребители)", "Export All Chats (All Users)": "Експортване на всички чатове (За всички потребители)",
"Export chat (.json)": "",
"Export Chats": "Експортване на чатове", "Export Chats": "Експортване на чатове",
"Export Documents Mapping": "Експортване на документен мапинг", "Export Documents Mapping": "Експортване на документен мапинг",
"Export Models": "", "Export Models": "Експортиране на модели",
"Export Prompts": "Експортване на промптове", "Export Prompts": "Експортване на промптове",
"Failed to create API Key.": "Неуспешно създаване на API ключ.", "Failed to create API Key.": "Неуспешно създаване на API ключ.",
"Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда", "Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда",
"Failed to update settings": "",
"February": "Февруари", "February": "Февруари",
"Feel free to add specific details": "Feel free to add specific details", "Feel free to add specific details": "Feel free to add specific details",
"File Mode": "Файл Мод", "File Mode": "Файл Мод",
...@@ -206,12 +226,14 @@ ...@@ -206,12 +226,14 @@
"Focus chat input": "Фокусиране на чат вход", "Focus chat input": "Фокусиране на чат вход",
"Followed instructions perfectly": "Следвайте инструкциите перфектно", "Followed instructions perfectly": "Следвайте инструкциите перфектно",
"Format your variables using square brackets like this:": "Форматирайте вашите променливи, като използвате квадратни скоби, както следва:", "Format your variables using square brackets like this:": "Форматирайте вашите променливи, като използвате квадратни скоби, както следва:",
"Frequencey Penalty": "", "Frequency Penalty": "Наказание за честота",
"Full Screen Mode": "На Цял екран",
"General": "Основни", "General": "Основни",
"General Settings": "Основни Настройки", "General Settings": "Основни Настройки",
"Generating search query": "Генериране на заявка за търсене",
"Generation Info": "Информация за Генерация", "Generation Info": "Информация за Генерация",
"Good Response": "Добра отговор", "Good Response": "Добра отговор",
"Google PSE API Key": "Google PSE API ключ",
"Google PSE Engine Id": "Идентификатор на двигателя на Google PSE",
"h:mm a": "h:mm a", "h:mm a": "h:mm a",
"has no conversations.": "няма разговори.", "has no conversations.": "няма разговори.",
"Hello, {{name}}": "Здравей, {{name}}", "Hello, {{name}}": "Здравей, {{name}}",
...@@ -225,17 +247,18 @@ ...@@ -225,17 +247,18 @@
"Images": "Изображения", "Images": "Изображения",
"Import Chats": "Импортване на чатове", "Import Chats": "Импортване на чатове",
"Import Documents Mapping": "Импортване на документен мапинг", "Import Documents Mapping": "Импортване на документен мапинг",
"Import Models": "", "Import Models": "Импортиране на модели",
"Import Prompts": "Импортване на промптове", "Import Prompts": "Импортване на промптове",
"Include `--api` flag when running stable-diffusion-webui": "Включете флага `--api`, когато стартирате stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Включете флага `--api`, когато стартирате stable-diffusion-webui",
"Info": "", "Info": "Информация",
"Input commands": "Въведете команди", "Input commands": "Въведете команди",
"Install from Github URL": "Инсталиране от URL адреса на Github",
"Interface": "Интерфейс", "Interface": "Интерфейс",
"Invalid Tag": "Невалиден тег", "Invalid Tag": "Невалиден тег",
"January": "Януари", "January": "Януари",
"join our Discord for help.": "свържете се с нашия Discord за помощ.", "join our Discord for help.": "свържете се с нашия Discord за помощ.",
"JSON": "JSON", "JSON": "JSON",
"JSON Preview": "", "JSON Preview": "JSON Преглед",
"July": "Июл", "July": "Июл",
"June": "Июн", "June": "Июн",
"JWT Expiration": "JWT Expiration", "JWT Expiration": "JWT Expiration",
...@@ -252,8 +275,9 @@ ...@@ -252,8 +275,9 @@
"Make sure to enclose them with": "Уверете се, че са заключени с", "Make sure to enclose them with": "Уверете се, че са заключени с",
"Manage Models": "Управление на Моделите", "Manage Models": "Управление на Моделите",
"Manage Ollama Models": "Управление на Ollama Моделите", "Manage Ollama Models": "Управление на Ollama Моделите",
"Manage Pipelines": "Управление на тръбопроводи",
"March": "Март", "March": "Март",
"Max Tokens (num_predict)": "", "Max Tokens (num_predict)": "Макс токени (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 модели могат да бъдат сваляни едновременно. Моля, опитайте отново по-късно.", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 модели могат да бъдат сваляни едновременно. Моля, опитайте отново по-късно.",
"May": "Май", "May": "Май",
"Memories accessible by LLMs will be shown here.": "Мемории достъпни от LLMs ще бъдат показани тук.", "Memories accessible by LLMs will be shown here.": "Мемории достъпни от LLMs ще бъдат показани тук.",
...@@ -268,11 +292,12 @@ ...@@ -268,11 +292,12 @@
"Model '{{modelName}}' has been successfully downloaded.": "Моделът '{{modelName}}' беше успешно свален.", "Model '{{modelName}}' has been successfully downloaded.": "Моделът '{{modelName}}' беше успешно свален.",
"Model '{{modelTag}}' is already in queue for downloading.": "Моделът '{{modelTag}}' е вече в очакване за сваляне.", "Model '{{modelTag}}' is already in queue for downloading.": "Моделът '{{modelTag}}' е вече в очакване за сваляне.",
"Model {{modelId}} not found": "Моделът {{modelId}} не е намерен", "Model {{modelId}} not found": "Моделът {{modelId}} не е намерен",
"Model {{modelName}} is not vision capable": "", "Model {{modelName}} is not vision capable": "Моделът {{modelName}} не може да се вижда",
"Model {{name}} is now {{status}}": "Моделът {{name}} сега е {{status}}",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Открит е път до файловата система на модела. За актуализацията се изисква съкратено име на модела, не може да продължи.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Открит е път до файловата система на модела. За актуализацията се изисква съкратено име на модела, не може да продължи.",
"Model ID": "", "Model ID": "ИД на модел",
"Model not selected": "Не е избран модел", "Model not selected": "Не е избран модел",
"Model Params": "", "Model Params": "Модел Params",
"Model Whitelisting": "Модел Whitelisting", "Model Whitelisting": "Модел Whitelisting",
"Model(s) Whitelisted": "Модели Whitelisted", "Model(s) Whitelisted": "Модели Whitelisted",
"Modelfile Content": "Съдържание на модфайл", "Modelfile Content": "Съдържание на модфайл",
...@@ -280,21 +305,25 @@ ...@@ -280,21 +305,25 @@
"More": "Повече", "More": "Повече",
"Name": "Име", "Name": "Име",
"Name Tag": "Име Таг", "Name Tag": "Име Таг",
"Name your model": "", "Name your model": "Дайте име на вашия модел",
"New Chat": "Нов чат", "New Chat": "Нов чат",
"New Password": "Нова парола", "New Password": "Нова парола",
"No results found": "Няма намерени резултати", "No results found": "Няма намерени резултати",
"No search query generated": "Не е генерирана заявка за търсене",
"No source available": "Няма наличен източник", "No source available": "Няма наличен източник",
"None": "Никой",
"Not factually correct": "Не е фактологически правилно", "Not factually correct": "Не е фактологически правилно",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Забележка: Ако зададете минимален резултат, търсенето ще върне само документи с резултат, по-голям или равен на минималния резултат.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Забележка: Ако зададете минимален резултат, търсенето ще върне само документи с резултат, по-голям или равен на минималния резултат.",
"Notifications": "Десктоп Известия", "Notifications": "Десктоп Известия",
"November": "Ноември", "November": "Ноември",
"num_thread (Ollama)": "num_thread (Ollama)",
"October": "Октомври", "October": "Октомври",
"Off": "Изкл.", "Off": "Изкл.",
"Okay, Let's Go!": "ОК, Нека започваме!", "Okay, Let's Go!": "ОК, Нека започваме!",
"OLED Dark": "OLED тъмно", "OLED Dark": "OLED тъмно",
"Ollama": "Ollama", "Ollama": "Ollama",
"Ollama API": "", "Ollama API": "Ollama API",
"Ollama API disabled": "Ollama API деактивиран",
"Ollama Version": "Ollama Версия", "Ollama Version": "Ollama Версия",
"On": "Вкл.", "On": "Вкл.",
"Only": "Само", "Only": "Само",
...@@ -319,6 +348,8 @@ ...@@ -319,6 +348,8 @@
"pending": "в очакване", "pending": "в очакване",
"Permission denied when accessing microphone: {{error}}": "Permission denied when accessing microphone: {{error}}", "Permission denied when accessing microphone: {{error}}": "Permission denied when accessing microphone: {{error}}",
"Personalization": "Персонализация", "Personalization": "Персонализация",
"Pipelines": "Тръбопроводи",
"Pipelines Valves": "Тръбопроводи Вентили",
"Plain text (.txt)": "Plain text (.txt)", "Plain text (.txt)": "Plain text (.txt)",
"Playground": "Плейграунд", "Playground": "Плейграунд",
"Positive attitude": "Позитивна ативност", "Positive attitude": "Позитивна ативност",
...@@ -348,6 +379,7 @@ ...@@ -348,6 +379,7 @@
"Reranking Model": "Reranking Model", "Reranking Model": "Reranking Model",
"Reranking model disabled": "Reranking model disabled", "Reranking model disabled": "Reranking model disabled",
"Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"", "Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"",
"Reset Upload Directory": "",
"Reset Vector Storage": "Ресет Vector Storage", "Reset Vector Storage": "Ресет Vector Storage",
"Response AutoCopy to Clipboard": "Аувтоматично копиране на отговор в клипборда", "Response AutoCopy to Clipboard": "Аувтоматично копиране на отговор в клипборда",
"Role": "Роля", "Role": "Роля",
...@@ -363,23 +395,32 @@ ...@@ -363,23 +395,32 @@
"Scan for documents from {{path}}": "Сканиране за документи в {{path}}", "Scan for documents from {{path}}": "Сканиране за документи в {{path}}",
"Search": "Търси", "Search": "Търси",
"Search a model": "Търси модел", "Search a model": "Търси модел",
"Search Chats": "", "Search Chats": "Търсене на чатове",
"Search Documents": "Търси Документи", "Search Documents": "Търси Документи",
"Search Models": "", "Search Models": "Търсене на модели",
"Search Prompts": "Търси Промптове", "Search Prompts": "Търси Промптове",
"Search Result Count": "Брой резултати от търсенето",
"Searched {{count}} sites_one": "Търси се в {{count}} sites_one",
"Searched {{count}} sites_other": "Търси се в {{count}} sites_other",
"Searching the web for '{{searchQuery}}'": "Търсене в уеб за '{{searchQuery}}'",
"Searxng Query URL": "URL адрес на заявка на Searxng",
"See readme.md for instructions": "Виж readme.md за инструкции", "See readme.md for instructions": "Виж readme.md за инструкции",
"See what's new": "Виж какво е новото", "See what's new": "Виж какво е новото",
"Seed": "Seed", "Seed": "Seed",
"Select a base model": "", "Select a base model": "Изберете базов модел",
"Select a mode": "Изберете режим", "Select a mode": "Изберете режим",
"Select a model": "Изберете модел", "Select a model": "Изберете модел",
"Select a pipeline": "Изберете тръбопровод",
"Select a pipeline url": "Избор на URL адрес на канал",
"Select an Ollama instance": "Изберете Ollama инстанция", "Select an Ollama instance": "Изберете Ollama инстанция",
"Select model": "Изберете модел", "Select model": "Изберете модел",
"Selected model(s) do not support image inputs": "", "Selected model(s) do not support image inputs": "Избраният(те) модел(и) не поддържа въвеждане на изображения",
"Send": "Изпрати", "Send": "Изпрати",
"Send a Message": "Изпращане на Съобщение", "Send a Message": "Изпращане на Съобщение",
"Send message": "Изпращане на съобщение", "Send message": "Изпращане на съобщение",
"September": "Септември", "September": "Септември",
"Serper API Key": "Serper API ключ",
"Serpstack API Key": "Serpstack API ключ",
"Server connection verified": "Server connection verified", "Server connection verified": "Server connection verified",
"Set as default": "Задай по подразбиране", "Set as default": "Задай по подразбиране",
"Set Default Model": "Задай Модел По Подразбиране", "Set Default Model": "Задай Модел По Подразбиране",
...@@ -388,15 +429,17 @@ ...@@ -388,15 +429,17 @@
"Set Model": "Задай Модел", "Set Model": "Задай Модел",
"Set reranking model (e.g. {{model}})": "Задай reranking model (e.g. {{model}})", "Set reranking model (e.g. {{model}})": "Задай reranking model (e.g. {{model}})",
"Set Steps": "Задай Стъпки", "Set Steps": "Задай Стъпки",
"Set Title Auto-Generation Model": "Задай Модел за Автоматично Генериране на Заглавие", "Set Task Model": "Задаване на модел на задача",
"Set Voice": "Задай Глас", "Set Voice": "Задай Глас",
"Settings": "Настройки", "Settings": "Настройки",
"Settings saved successfully!": "Настройките са запазени успешно!", "Settings saved successfully!": "Настройките са запазени успешно!",
"Settings updated successfully": "",
"Share": "Подели", "Share": "Подели",
"Share Chat": "Подели Чат", "Share Chat": "Подели Чат",
"Share to OpenWebUI Community": "Споделите с OpenWebUI Общността", "Share to OpenWebUI Community": "Споделите с OpenWebUI Общността",
"short-summary": "short-summary", "short-summary": "short-summary",
"Show": "Покажи", "Show": "Покажи",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "Покажи", "Show shortcuts": "Покажи",
"Showcased creativity": "Показана креативност", "Showcased creativity": "Показана креативност",
"sidebar": "sidebar", "sidebar": "sidebar",
...@@ -447,19 +490,21 @@ ...@@ -447,19 +490,21 @@
"Top P": "Top P", "Top P": "Top P",
"Trouble accessing Ollama?": "Проблеми с достъпът до Ollama?", "Trouble accessing Ollama?": "Проблеми с достъпът до Ollama?",
"TTS Settings": "TTS Настройки", "TTS Settings": "TTS Настройки",
"Type": "", "Type": "Вид",
"Type Hugging Face Resolve (Download) URL": "Въведете Hugging Face Resolve (Download) URL", "Type Hugging Face Resolve (Download) URL": "Въведете Hugging Face Resolve (Download) URL",
"Uh-oh! There was an issue connecting to {{provider}}.": "О, не! Възникна проблем при свързването с {{provider}}.", "Uh-oh! There was an issue connecting to {{provider}}.": "О, не! Възникна проблем при свързването с {{provider}}.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Непознат файлов тип '{{file_type}}', но се приема и обработва като текст", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Непознат файлов тип '{{file_type}}', но се приема и обработва като текст",
"Update and Copy Link": "Обнови и копирай връзка", "Update and Copy Link": "Обнови и копирай връзка",
"Update password": "Обновяване на парола", "Update password": "Обновяване на парола",
"Upload a GGUF model": "Качване на GGUF модел", "Upload a GGUF model": "Качване на GGUF модел",
"Upload files": "Качване на файлове", "Upload Files": "Качване на файлове",
"Upload Progress": "Прогрес на качването", "Upload Progress": "Прогрес на качването",
"URL Mode": "URL Mode", "URL Mode": "URL Mode",
"Use '#' in the prompt input to load and select your documents.": "Използвайте '#' във промпта за да заредите и изберете вашите документи.", "Use '#' in the prompt input to load and select your documents.": "Използвайте '#' във промпта за да заредите и изберете вашите документи.",
"Use Gravatar": "Използвайте Gravatar", "Use Gravatar": "Използвайте Gravatar",
"Use Initials": "Използвайте Инициали", "Use Initials": "Използвайте Инициали",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "потребител", "user": "потребител",
"User Permissions": "Права на потребителя", "User Permissions": "Права на потребителя",
"Users": "Потребители", "Users": "Потребители",
...@@ -468,11 +513,13 @@ ...@@ -468,11 +513,13 @@
"variable": "променлива", "variable": "променлива",
"variable to have them replaced with clipboard content.": "променливи да се заменят съдържанието от клипборд.", "variable to have them replaced with clipboard content.": "променливи да се заменят съдържанието от клипборд.",
"Version": "Версия", "Version": "Версия",
"Warning": "", "Warning": "Предупреждение",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Предупреждение: Ако актуализирате или промените вашия модел за вграждане, трябва да повторите импортирането на всички документи.", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Предупреждение: Ако актуализирате или промените вашия модел за вграждане, трябва да повторите импортирането на всички документи.",
"Web": "Уеб", "Web": "Уеб",
"Web Loader Settings": "Настройки за зареждане на уеб", "Web Loader Settings": "Настройки за зареждане на уеб",
"Web Params": "Параметри за уеб", "Web Params": "Параметри за уеб",
"Web Search": "Търсене в уеб",
"Web Search Engine": "Уеб търсачка",
"Webhook URL": "Уебхук URL", "Webhook URL": "Уебхук URL",
"WebUI Add-ons": "WebUI Добавки", "WebUI Add-ons": "WebUI Добавки",
"WebUI Settings": "WebUI Настройки", "WebUI Settings": "WebUI Настройки",
...@@ -480,12 +527,13 @@ ...@@ -480,12 +527,13 @@
"What’s New in": "Какво е новото в", "What’s New in": "Какво е новото в",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Когато историята е изключена, нови чатове в този браузър ще не се показват в историята на никои от вашия профил.", "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Когато историята е изключена, нови чатове в този браузър ще не се показват в историята на никои от вашия профил.",
"Whisper (Local)": "Whisper (Локален)", "Whisper (Local)": "Whisper (Локален)",
"Widescreen Mode": "",
"Workspace": "Работно пространство", "Workspace": "Работно пространство",
"Write a prompt suggestion (e.g. Who are you?)": "Напиши предложение за промпт (напр. Кой сте вие?)", "Write a prompt suggestion (e.g. Who are you?)": "Напиши предложение за промпт (напр. Кой сте вие?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Напиши описание в 50 знака, което описва [тема или ключова дума].", "Write a summary in 50 words that summarizes [topic or keyword].": "Напиши описание в 50 знака, което описва [тема или ключова дума].",
"Yesterday": "вчера", "Yesterday": "вчера",
"You": "вие", "You": "вие",
"You cannot clone a base model": "", "You cannot clone a base model": "Не можете да клонирате базов модел",
"You have no archived conversations.": "Нямате архивирани разговори.", "You have no archived conversations.": "Нямате архивирани разговори.",
"You have shared this chat": "Вие сте споделели този чат", "You have shared this chat": "Вие сте споделели този чат",
"You're a helpful assistant.": "Вие сте полезен асистент.", "You're a helpful assistant.": "Вие сте полезен асистент.",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment