Merge branch 'dev' into dev_es-ES
This commit is contained in:
@@ -40,6 +40,11 @@ code {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.editor-selection {
|
||||
background: rgba(180, 213, 255, 0.5);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.font-secondary {
|
||||
font-family: 'InstrumentSerif', sans-serif;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { WEBUI_API_BASE_URL } from '$lib/constants';
|
||||
import { getTimeRange } from '$lib/utils';
|
||||
|
||||
export const createNewChat = async (token: string, chat: object) => {
|
||||
export const createNewChat = async (token: string, chat: object, folderId: string | null) => {
|
||||
let error = null;
|
||||
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/chats/new`, {
|
||||
@@ -12,7 +12,8 @@ export const createNewChat = async (token: string, chat: object) => {
|
||||
authorization: `Bearer ${token}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
chat: chat
|
||||
chat: chat,
|
||||
folder_id: folderId ?? null
|
||||
})
|
||||
})
|
||||
.then(async (res) => {
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import { WEBUI_API_BASE_URL } from '$lib/constants';
|
||||
|
||||
export const createNewFolder = async (token: string, name: string) => {
|
||||
type FolderForm = {
|
||||
name: string;
|
||||
data?: Record<string, any>;
|
||||
};
|
||||
|
||||
export const createNewFolder = async (token: string, folderForm: FolderForm) => {
|
||||
let error = null;
|
||||
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/folders/`, {
|
||||
@@ -10,9 +15,7 @@ export const createNewFolder = async (token: string, name: string) => {
|
||||
'Content-Type': 'application/json',
|
||||
authorization: `Bearer ${token}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
name: name
|
||||
})
|
||||
body: JSON.stringify(folderForm)
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (!res.ok) throw await res.json();
|
||||
@@ -92,11 +95,6 @@ export const getFolderById = async (token: string, id: string) => {
|
||||
return res;
|
||||
};
|
||||
|
||||
type FolderForm = {
|
||||
name: string;
|
||||
data?: Record<string, any>;
|
||||
};
|
||||
|
||||
export const updateFolderById = async (token: string, id: string, folderForm: FolderForm) => {
|
||||
let error = null;
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||
bind:value={STT_SUPPORTED_CONTENT_TYPES}
|
||||
placeholder={$i18n.t(
|
||||
'e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)'
|
||||
'e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)'
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -211,11 +211,9 @@
|
||||
{:else}
|
||||
<div>
|
||||
<div class=" flex items-center gap-3 justify-between text-xs uppercase px-1 font-bold">
|
||||
<div class="w-full">Group</div>
|
||||
<div class="w-full basis-3/5">Group</div>
|
||||
|
||||
<div class="w-full">Users</div>
|
||||
|
||||
<div class="w-full"></div>
|
||||
<div class="w-full basis-2/5 text-right">Users</div>
|
||||
</div>
|
||||
|
||||
<hr class="mt-1.5 border-gray-100 dark:border-gray-850" />
|
||||
|
||||
@@ -61,22 +61,22 @@
|
||||
showEdit = true;
|
||||
}}
|
||||
>
|
||||
<div class="flex items-center gap-1.5 w-full font-medium">
|
||||
<div class="flex items-center gap-1.5 w-full font-medium flex-1">
|
||||
<div>
|
||||
<UserCircleSolid className="size-4" />
|
||||
</div>
|
||||
{group.name}
|
||||
<div class="line-clamp-1">
|
||||
{group.name}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-1.5 w-full font-medium">
|
||||
<div class="flex items-center gap-1.5 w-fit font-medium text-right justify-end">
|
||||
{group.user_ids.length}
|
||||
|
||||
<div>
|
||||
<User className="size-3.5" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-full flex justify-end">
|
||||
<div class=" rounded-lg p-1 hover:bg-gray-100 dark:hover:bg-gray-850 transition">
|
||||
<Pencil className="size-3.5" />
|
||||
</div>
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-3 max-h-[22rem] overflow-y-auto scrollbar-hidden">
|
||||
<div class="mt-3 scrollbar-hidden">
|
||||
<div class="flex flex-col gap-2.5">
|
||||
{#if filteredUsers.length > 0}
|
||||
{#each filteredUsers as user, userIdx (user.id)}
|
||||
@@ -78,16 +78,6 @@
|
||||
<div class="flex w-full items-center justify-between">
|
||||
<Tooltip content={user.email} placement="top-start">
|
||||
<div class="flex">
|
||||
<img
|
||||
class=" rounded-full size-5 object-cover mr-2.5"
|
||||
src={user.profile_image_url.startsWith(WEBUI_BASE_URL) ||
|
||||
user.profile_image_url.startsWith('https://www.gravatar.com/avatar/') ||
|
||||
user.profile_image_url.startsWith('data:')
|
||||
? user.profile_image_url
|
||||
: `${WEBUI_BASE_URL}/user.png`}
|
||||
alt="user"
|
||||
/>
|
||||
|
||||
<div class=" font-medium self-center">{user.name}</div>
|
||||
</div>
|
||||
</Tooltip>
|
||||
|
||||
@@ -392,7 +392,7 @@
|
||||
<div class="flex flex-row w-max">
|
||||
<img
|
||||
class=" rounded-full w-6 h-6 object-cover mr-2.5"
|
||||
src={user.profile_image_url.startsWith(WEBUI_BASE_URL) ||
|
||||
src={user?.profile_image_url?.startsWith(WEBUI_BASE_URL) ||
|
||||
user.profile_image_url.startsWith('https://www.gravatar.com/avatar/') ||
|
||||
user.profile_image_url.startsWith('data:')
|
||||
? user.profile_image_url
|
||||
|
||||
@@ -709,6 +709,7 @@
|
||||
navigator.msMaxTouchPoints > 0
|
||||
))}
|
||||
largeTextAsFile={$settings?.largeTextAsFile ?? false}
|
||||
floatingMenuPlacement={'top-start'}
|
||||
onChange={(e) => {
|
||||
const { md } = e;
|
||||
content = md;
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
chatTitle,
|
||||
showArtifacts,
|
||||
tools,
|
||||
toolServers
|
||||
toolServers,
|
||||
selectedFolder
|
||||
} from '$lib/stores';
|
||||
import {
|
||||
convertMessagesToHistory,
|
||||
@@ -1227,7 +1228,7 @@
|
||||
await handleOpenAIError(error, message);
|
||||
}
|
||||
|
||||
if (sources) {
|
||||
if (sources && !message?.sources) {
|
||||
message.sources = sources;
|
||||
}
|
||||
|
||||
@@ -1351,6 +1352,12 @@
|
||||
);
|
||||
|
||||
history.messages[message.id] = message;
|
||||
|
||||
await tick();
|
||||
if (autoScroll) {
|
||||
scrollToBottom();
|
||||
}
|
||||
|
||||
await chatCompletedHandler(
|
||||
chatId,
|
||||
message.model,
|
||||
@@ -1360,6 +1367,8 @@
|
||||
}
|
||||
|
||||
console.log(data);
|
||||
await tick();
|
||||
|
||||
if (autoScroll) {
|
||||
scrollToBottom();
|
||||
}
|
||||
@@ -1978,25 +1987,33 @@
|
||||
let _chatId = $chatId;
|
||||
|
||||
if (!$temporaryChatEnabled) {
|
||||
chat = await createNewChat(localStorage.token, {
|
||||
id: _chatId,
|
||||
title: $i18n.t('New Chat'),
|
||||
models: selectedModels,
|
||||
system: $settings.system ?? undefined,
|
||||
params: params,
|
||||
history: history,
|
||||
messages: createMessagesList(history, history.currentId),
|
||||
tags: [],
|
||||
timestamp: Date.now()
|
||||
});
|
||||
chat = await createNewChat(
|
||||
localStorage.token,
|
||||
{
|
||||
id: _chatId,
|
||||
title: $i18n.t('New Chat'),
|
||||
models: selectedModels,
|
||||
system: $settings.system ?? undefined,
|
||||
params: params,
|
||||
history: history,
|
||||
messages: createMessagesList(history, history.currentId),
|
||||
tags: [],
|
||||
timestamp: Date.now()
|
||||
},
|
||||
$selectedFolder?.id
|
||||
);
|
||||
|
||||
_chatId = chat.id;
|
||||
await chatId.set(_chatId);
|
||||
|
||||
window.history.replaceState(history.state, '', `/c/${_chatId}`);
|
||||
|
||||
await tick();
|
||||
|
||||
await chats.set(await getChatList(localStorage.token, $currentChatPage));
|
||||
currentChatPage.set(1);
|
||||
|
||||
window.history.replaceState(history.state, '', `/c/${_chatId}`);
|
||||
selectedFolder.set(null);
|
||||
} else {
|
||||
_chatId = 'local';
|
||||
await chatId.set('local');
|
||||
@@ -2060,12 +2077,13 @@
|
||||
>
|
||||
{#if !loading}
|
||||
<div in:fade={{ duration: 50 }} class="w-full h-full flex flex-col">
|
||||
{#if $settings?.backgroundImageUrl ?? null}
|
||||
{#if $settings?.backgroundImageUrl ?? $config?.license_metadata?.background_image_url ?? null}
|
||||
<div
|
||||
class="absolute {$showSidebar
|
||||
? 'md:max-w-[calc(100%-260px)] md:translate-x-[260px]'
|
||||
: ''} top-0 left-0 w-full h-full bg-cover bg-center bg-no-repeat"
|
||||
style="background-image: url({$settings.backgroundImageUrl}) "
|
||||
style="background-image: url({$settings?.backgroundImageUrl ??
|
||||
$config?.license_metadata?.background_image_url}) "
|
||||
/>
|
||||
|
||||
<div
|
||||
@@ -2096,8 +2114,8 @@
|
||||
showBanners={!showCommands}
|
||||
/>
|
||||
|
||||
<div class="flex flex-col flex-auto z-10 w-full @container">
|
||||
{#if $settings?.landingPageMode === 'chat' || createMessagesList(history, history.currentId).length > 0}
|
||||
<div class="flex flex-col flex-auto z-10 w-full @container overflow-auto">
|
||||
{#if ($settings?.landingPageMode === 'chat' && !$selectedFolder) || createMessagesList(history, history.currentId).length > 0}
|
||||
<div
|
||||
class=" pb-2.5 flex flex-col justify-between w-full flex-auto overflow-auto h-0 max-w-full z-10 scrollbar-hidden"
|
||||
id="messages-container"
|
||||
@@ -2114,6 +2132,9 @@
|
||||
bind:history
|
||||
bind:autoScroll
|
||||
bind:prompt
|
||||
setInputText={(text) => {
|
||||
messageInput?.setText(text);
|
||||
}}
|
||||
{selectedModels}
|
||||
{atSelectedModel}
|
||||
{sendPrompt}
|
||||
@@ -2147,7 +2168,9 @@
|
||||
bind:atSelectedModel
|
||||
bind:showCommands
|
||||
toolServers={$toolServers}
|
||||
transparentBackground={$settings?.backgroundImageUrl ?? false}
|
||||
transparentBackground={$settings?.backgroundImageUrl ??
|
||||
$config?.license_metadata?.background_image_url ??
|
||||
false}
|
||||
{stopResponse}
|
||||
{createMessagePair}
|
||||
onChange={(input) => {
|
||||
@@ -2192,7 +2215,7 @@
|
||||
</div>
|
||||
</div>
|
||||
{:else}
|
||||
<div class="overflow-auto w-full h-full flex items-center">
|
||||
<div class="flex items-center h-full">
|
||||
<Placeholder
|
||||
{history}
|
||||
{selectedModels}
|
||||
@@ -2207,7 +2230,9 @@
|
||||
bind:webSearchEnabled
|
||||
bind:atSelectedModel
|
||||
bind:showCommands
|
||||
transparentBackground={$settings?.backgroundImageUrl ?? false}
|
||||
transparentBackground={$settings?.backgroundImageUrl ??
|
||||
$config?.license_metadata?.background_image_url ??
|
||||
false}
|
||||
toolServers={$toolServers}
|
||||
{stopResponse}
|
||||
{createMessagePair}
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
|
||||
import { KokoroWorker } from '$lib/workers/KokoroWorker';
|
||||
import InputVariablesModal from './MessageInput/InputVariablesModal.svelte';
|
||||
import Voice from '../icons/Voice.svelte';
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
export let transparentBackground = false;
|
||||
@@ -505,6 +506,11 @@
|
||||
return null;
|
||||
}
|
||||
|
||||
if (fileUploadCapableModels.length !== selectedModels.length) {
|
||||
toast.error($i18n.t('Model(s) do not support file upload'));
|
||||
return null;
|
||||
}
|
||||
|
||||
const tempItemId = uuidv4();
|
||||
const fileItem = {
|
||||
type: 'file',
|
||||
@@ -1279,6 +1285,13 @@
|
||||
};
|
||||
|
||||
reader.readAsDataURL(blob);
|
||||
} else if (item?.kind === 'file') {
|
||||
const file = item.getAsFile();
|
||||
if (file) {
|
||||
const _files = [file];
|
||||
await inputFilesHandler(_files);
|
||||
e.preventDefault();
|
||||
}
|
||||
} else if (item.type === 'text/plain') {
|
||||
if (($settings?.largeTextAsFile ?? false) && !shiftKey) {
|
||||
const text = clipboardData.getData('text/plain');
|
||||
@@ -1504,6 +1517,7 @@
|
||||
|
||||
if (clipboardData && clipboardData.items) {
|
||||
for (const item of clipboardData.items) {
|
||||
console.log(item);
|
||||
if (item.type.indexOf('image') !== -1) {
|
||||
const blob = item.getAsFile();
|
||||
const reader = new FileReader();
|
||||
@@ -1519,6 +1533,13 @@
|
||||
};
|
||||
|
||||
reader.readAsDataURL(blob);
|
||||
} else if (item?.kind === 'file') {
|
||||
const file = item.getAsFile();
|
||||
if (file) {
|
||||
const _files = [file];
|
||||
await inputFilesHandler(_files);
|
||||
e.preventDefault();
|
||||
}
|
||||
} else if (item.type === 'text/plain') {
|
||||
if (($settings?.largeTextAsFile ?? false) && !shiftKey) {
|
||||
const text = clipboardData.getData('text/plain');
|
||||
@@ -1882,7 +1903,7 @@
|
||||
}}
|
||||
aria-label={$i18n.t('Voice mode')}
|
||||
>
|
||||
<Headphone className="size-5" />
|
||||
<Voice className="size-5" strokeWidth="2.5" />
|
||||
</button>
|
||||
</Tooltip>
|
||||
</div>
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
...file,
|
||||
name: file?.meta?.name,
|
||||
description: `${file?.collection?.name} - ${file?.collection?.description}`,
|
||||
knowledge: true, // DO NOT REMOVE, USED TO INDICATE KNOWLEDGE BASE FILE
|
||||
type: 'file'
|
||||
}))
|
||||
]
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
|
||||
<div slot="content">
|
||||
<DropdownMenu.Content
|
||||
class="w-full max-w-[200px] rounded-xl px-1 py-1 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-sm"
|
||||
class="w-full max-w-[240px] rounded-xl px-1 py-1 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-sm"
|
||||
sideOffset={10}
|
||||
alignOffset={-8}
|
||||
side="top"
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
|
||||
let messages = [];
|
||||
|
||||
export let setInputText: Function = () => {};
|
||||
|
||||
export let sendPrompt: Function;
|
||||
export let continueResponse: Function;
|
||||
export let regenerateResponse: Function;
|
||||
@@ -426,6 +428,7 @@
|
||||
messageId={message.id}
|
||||
idx={messageIdx}
|
||||
{user}
|
||||
{setInputText}
|
||||
{gotoMessage}
|
||||
{showPreviousMessage}
|
||||
{showNextMessage}
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
export let history;
|
||||
export let selectedModels = [];
|
||||
|
||||
export let done = true;
|
||||
export let model = null;
|
||||
export let sources = null;
|
||||
|
||||
@@ -133,6 +134,7 @@
|
||||
{model}
|
||||
{save}
|
||||
{preview}
|
||||
{done}
|
||||
sourceIds={(sources ?? []).reduce((acc, s) => {
|
||||
let ids = [];
|
||||
s.document.forEach((document, index) => {
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
export let id = '';
|
||||
export let content;
|
||||
export let done = true;
|
||||
export let model = null;
|
||||
export let save = false;
|
||||
export let preview = false;
|
||||
@@ -47,6 +48,7 @@
|
||||
<MarkdownTokens
|
||||
{tokens}
|
||||
{id}
|
||||
{done}
|
||||
{save}
|
||||
{preview}
|
||||
{onTaskClick}
|
||||
|
||||
@@ -14,8 +14,11 @@
|
||||
import KatexRenderer from './KatexRenderer.svelte';
|
||||
import Source from './Source.svelte';
|
||||
import HtmlToken from './HTMLToken.svelte';
|
||||
import TextToken from './MarkdownInlineTokens/TextToken.svelte';
|
||||
import CodespanToken from './MarkdownInlineTokens/CodespanToken.svelte';
|
||||
|
||||
export let id: string;
|
||||
export let done = true;
|
||||
export let tokens: Token[];
|
||||
export let onSourceClick: Function = () => {};
|
||||
</script>
|
||||
@@ -28,7 +31,7 @@
|
||||
{:else if token.type === 'link'}
|
||||
{#if token.tokens}
|
||||
<a href={token.href} target="_blank" rel="nofollow" title={token.title}>
|
||||
<svelte:self id={`${id}-a`} tokens={token.tokens} {onSourceClick} />
|
||||
<svelte:self id={`${id}-a`} tokens={token.tokens} {onSourceClick} {done} />
|
||||
</a>
|
||||
{:else}
|
||||
<a href={token.href} target="_blank" rel="nofollow" title={token.title}>{token.text}</a>
|
||||
@@ -40,15 +43,7 @@
|
||||
{:else if token.type === 'em'}
|
||||
<em><svelte:self id={`${id}-em`} tokens={token.tokens} {onSourceClick} /></em>
|
||||
{:else if token.type === 'codespan'}
|
||||
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||
<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
|
||||
<code
|
||||
class="codespan cursor-pointer"
|
||||
on:click={() => {
|
||||
copyToClipboard(unescapeHtml(token.text));
|
||||
toast.success($i18n.t('Copied to clipboard'));
|
||||
}}>{unescapeHtml(token.text)}</code
|
||||
>
|
||||
<CodespanToken {token} {done} />
|
||||
{:else if token.type === 'br'}
|
||||
<br />
|
||||
{:else if token.type === 'del'}
|
||||
@@ -66,6 +61,6 @@
|
||||
onload="this.style.height=(this.contentWindow.document.body.scrollHeight+20)+'px';"
|
||||
></iframe>
|
||||
{:else if token.type === 'text'}
|
||||
{token.raw}
|
||||
<TextToken {token} {done} />
|
||||
{/if}
|
||||
{/each}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
<script lang="ts">
|
||||
import { copyToClipboard, unescapeHtml } from '$lib/utils';
|
||||
import { toast } from 'svelte-sonner';
|
||||
import { fade } from 'svelte/transition';
|
||||
|
||||
import { getContext } from 'svelte';
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
export let token;
|
||||
export let done = true;
|
||||
</script>
|
||||
|
||||
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||
<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
|
||||
{#if done}
|
||||
<code
|
||||
class="codespan cursor-pointer"
|
||||
on:click={() => {
|
||||
copyToClipboard(unescapeHtml(token.text));
|
||||
toast.success($i18n.t('Copied to clipboard'));
|
||||
}}>{unescapeHtml(token.text)}</code
|
||||
>
|
||||
{:else}
|
||||
<code
|
||||
transition:fade={{ duration: 100 }}
|
||||
class="codespan cursor-pointer"
|
||||
on:click={() => {
|
||||
copyToClipboard(unescapeHtml(token.text));
|
||||
toast.success($i18n.t('Copied to clipboard'));
|
||||
}}>{unescapeHtml(token.text)}</code
|
||||
>
|
||||
{/if}
|
||||
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { fade } from 'svelte/transition';
|
||||
|
||||
export let token;
|
||||
export let done = true;
|
||||
|
||||
let texts = [];
|
||||
$: texts = (token?.raw ?? '').split(' ');
|
||||
</script>
|
||||
|
||||
{#if done}
|
||||
{token?.raw}
|
||||
{:else}
|
||||
{#each texts as text}
|
||||
<span class="" transition:fade={{ duration: 100 }}>
|
||||
{text}
|
||||
</span>
|
||||
{/each}
|
||||
{/if}
|
||||
@@ -28,6 +28,8 @@
|
||||
export let top = true;
|
||||
export let attributes = {};
|
||||
|
||||
export let done = true;
|
||||
|
||||
export let save = false;
|
||||
export let preview = false;
|
||||
|
||||
@@ -85,7 +87,12 @@
|
||||
<hr class=" border-gray-100 dark:border-gray-850" />
|
||||
{:else if token.type === 'heading'}
|
||||
<svelte:element this={headerComponent(token.depth)} dir="auto">
|
||||
<MarkdownInlineTokens id={`${id}-${tokenIdx}-h`} tokens={token.tokens} {onSourceClick} />
|
||||
<MarkdownInlineTokens
|
||||
id={`${id}-${tokenIdx}-h`}
|
||||
tokens={token.tokens}
|
||||
{done}
|
||||
{onSourceClick}
|
||||
/>
|
||||
</svelte:element>
|
||||
{:else if token.type === 'code'}
|
||||
{#if token.raw.includes('```')}
|
||||
@@ -132,6 +139,7 @@
|
||||
<MarkdownInlineTokens
|
||||
id={`${id}-${tokenIdx}-header-${headerIdx}`}
|
||||
tokens={header.tokens}
|
||||
{done}
|
||||
{onSourceClick}
|
||||
/>
|
||||
</div>
|
||||
@@ -152,6 +160,7 @@
|
||||
<MarkdownInlineTokens
|
||||
id={`${id}-${tokenIdx}-row-${rowIdx}-${cellIdx}`}
|
||||
tokens={cell.tokens}
|
||||
{done}
|
||||
{onSourceClick}
|
||||
/>
|
||||
</div>
|
||||
@@ -183,7 +192,13 @@
|
||||
<AlertRenderer {token} {alert} />
|
||||
{:else}
|
||||
<blockquote dir="auto">
|
||||
<svelte:self id={`${id}-${tokenIdx}`} tokens={token.tokens} {onTaskClick} {onSourceClick} />
|
||||
<svelte:self
|
||||
id={`${id}-${tokenIdx}`}
|
||||
tokens={token.tokens}
|
||||
{done}
|
||||
{onTaskClick}
|
||||
{onSourceClick}
|
||||
/>
|
||||
</blockquote>
|
||||
{/if}
|
||||
{:else if token.type === 'list'}
|
||||
@@ -213,6 +228,7 @@
|
||||
id={`${id}-${tokenIdx}-${itemIdx}`}
|
||||
tokens={item.tokens}
|
||||
top={token.loose}
|
||||
{done}
|
||||
{onTaskClick}
|
||||
{onSourceClick}
|
||||
/>
|
||||
@@ -245,6 +261,7 @@
|
||||
id={`${id}-${tokenIdx}-${itemIdx}`}
|
||||
tokens={item.tokens}
|
||||
top={token.loose}
|
||||
{done}
|
||||
{onTaskClick}
|
||||
{onSourceClick}
|
||||
/>
|
||||
@@ -254,6 +271,7 @@
|
||||
id={`${id}-${tokenIdx}-${itemIdx}`}
|
||||
tokens={item.tokens}
|
||||
top={token.loose}
|
||||
{done}
|
||||
{onTaskClick}
|
||||
{onSourceClick}
|
||||
/>
|
||||
@@ -275,6 +293,7 @@
|
||||
id={`${id}-${tokenIdx}-d`}
|
||||
tokens={marked.lexer(token.text)}
|
||||
attributes={token?.attributes}
|
||||
{done}
|
||||
{onTaskClick}
|
||||
{onSourceClick}
|
||||
/>
|
||||
@@ -295,6 +314,7 @@
|
||||
<MarkdownInlineTokens
|
||||
id={`${id}-${tokenIdx}-p`}
|
||||
tokens={token.tokens ?? []}
|
||||
{done}
|
||||
{onSourceClick}
|
||||
/>
|
||||
</p>
|
||||
@@ -302,7 +322,12 @@
|
||||
{#if top}
|
||||
<p>
|
||||
{#if token.tokens}
|
||||
<MarkdownInlineTokens id={`${id}-${tokenIdx}-t`} tokens={token.tokens} {onSourceClick} />
|
||||
<MarkdownInlineTokens
|
||||
id={`${id}-${tokenIdx}-t`}
|
||||
tokens={token.tokens}
|
||||
{done}
|
||||
{onSourceClick}
|
||||
/>
|
||||
{:else}
|
||||
{unescapeHtml(token.text)}
|
||||
{/if}
|
||||
@@ -311,6 +336,7 @@
|
||||
<MarkdownInlineTokens
|
||||
id={`${id}-${tokenIdx}-p`}
|
||||
tokens={token.tokens ?? []}
|
||||
{done}
|
||||
{onSourceClick}
|
||||
/>
|
||||
{:else}
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
export let user;
|
||||
|
||||
export let setInputText: Function = () => {};
|
||||
export let gotoMessage;
|
||||
export let showPreviousMessage;
|
||||
export let showNextMessage;
|
||||
@@ -74,6 +75,7 @@
|
||||
{selectedModels}
|
||||
isLastMessage={messageId === history.currentId}
|
||||
siblings={history.messages[history.messages[messageId].parentId]?.childrenIds ?? []}
|
||||
{setInputText}
|
||||
{gotoMessage}
|
||||
{showPreviousMessage}
|
||||
{showNextMessage}
|
||||
@@ -96,6 +98,7 @@
|
||||
{messageId}
|
||||
{selectedModels}
|
||||
isLastMessage={messageId === history?.currentId}
|
||||
{setInputText}
|
||||
{updateChat}
|
||||
{editMessage}
|
||||
{saveMessage}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
export let isLastMessage;
|
||||
export let readOnly = false;
|
||||
|
||||
export let setInputText: Function = () => {};
|
||||
export let updateChat: Function;
|
||||
export let editMessage: Function;
|
||||
export let saveMessage: Function;
|
||||
@@ -259,6 +260,7 @@
|
||||
gotoMessage={(message, messageIdx) => gotoMessage(modelIdx, messageIdx)}
|
||||
showPreviousMessage={() => showPreviousMessage(modelIdx)}
|
||||
showNextMessage={() => showNextMessage(modelIdx)}
|
||||
{setInputText}
|
||||
{updateChat}
|
||||
{editMessage}
|
||||
{saveMessage}
|
||||
|
||||
@@ -117,6 +117,7 @@
|
||||
|
||||
export let siblings;
|
||||
|
||||
export let setInputText: Function = () => {};
|
||||
export let gotoMessage: Function = () => {};
|
||||
export let showPreviousMessage: Function;
|
||||
export let showNextMessage: Function;
|
||||
@@ -165,7 +166,7 @@
|
||||
text = `${text}\n\n${$config?.ui?.response_watermark}`;
|
||||
}
|
||||
|
||||
const res = await _copyToClipboard(text, $settings?.copyFormatted ?? false);
|
||||
const res = await _copyToClipboard(text, null, $settings?.copyFormatted ?? false);
|
||||
if (res) {
|
||||
toast.success($i18n.t('Copying to clipboard was successful!'));
|
||||
}
|
||||
@@ -804,6 +805,9 @@
|
||||
floatingButtons={message?.done && !readOnly}
|
||||
save={!readOnly}
|
||||
preview={!readOnly}
|
||||
done={($settings?.chatFadeStreamingText ?? true)
|
||||
? (message?.done ?? false)
|
||||
: true}
|
||||
{model}
|
||||
onTaskClick={async (e) => {
|
||||
console.log(e);
|
||||
@@ -1461,12 +1465,18 @@
|
||||
/>
|
||||
{/if}
|
||||
|
||||
{#if isLastMessage && message.done && !readOnly && (message?.followUps ?? []).length > 0}
|
||||
{#if (isLastMessage || ($settings?.keepFollowUpPrompts ?? false)) && message.done && !readOnly && (message?.followUps ?? []).length > 0}
|
||||
<div class="mt-2.5" in:fade={{ duration: 100 }}>
|
||||
<FollowUps
|
||||
followUps={message?.followUps}
|
||||
onClick={(prompt) => {
|
||||
submitMessage(message?.id, prompt);
|
||||
if ($settings?.insertFollowUpPrompt ?? false) {
|
||||
// Insert the follow-up prompt into the input box
|
||||
setInputText(prompt);
|
||||
} else {
|
||||
// Submit the follow-up prompt directly
|
||||
submitMessage(message?.id, prompt);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
import ModelItemMenu from './ModelItemMenu.svelte';
|
||||
import EllipsisHorizontal from '$lib/components/icons/EllipsisHorizontal.svelte';
|
||||
import { toast } from 'svelte-sonner';
|
||||
import Tag from '$lib/components/icons/Tag.svelte';
|
||||
import Label from '$lib/components/icons/Label.svelte';
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
@@ -42,7 +44,8 @@
|
||||
</script>
|
||||
|
||||
<button
|
||||
aria-label="model-item"
|
||||
aria-roledescription="model-item"
|
||||
aria-label={item.label}
|
||||
class="flex group/item w-full text-left font-medium line-clamp-1 select-none items-center rounded-button py-2 pl-3 pr-1.5 text-sm text-gray-700 dark:text-gray-100 outline-hidden transition-all duration-75 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg cursor-pointer data-highlighted:bg-muted {index ===
|
||||
selectedModelIdx
|
||||
? 'bg-gray-100 dark:bg-gray-800 group-hover:bg-transparent'
|
||||
@@ -54,7 +57,7 @@
|
||||
}}
|
||||
>
|
||||
<div class="flex flex-col flex-1 gap-1.5">
|
||||
{#if (item?.model?.tags ?? []).length > 0}
|
||||
<!-- {#if (item?.model?.tags ?? []).length > 0}
|
||||
<div
|
||||
class="flex gap-0.5 self-center items-start h-full w-full translate-y-[0.5px] overflow-x-auto scrollbar-none"
|
||||
>
|
||||
@@ -68,7 +71,7 @@
|
||||
</Tooltip>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
{/if} -->
|
||||
|
||||
<div class="flex items-center gap-2">
|
||||
<div class="flex items-center min-w-fit">
|
||||
@@ -135,6 +138,26 @@
|
||||
|
||||
<!-- {JSON.stringify(item.info)} -->
|
||||
|
||||
{#if (item?.model?.tags ?? []).length > 0}
|
||||
{#key item.model.id}
|
||||
<Tooltip elementId="tags-{item.model.id}">
|
||||
<div slot="tooltip" id="tags-{item.model.id}">
|
||||
{#each item.model?.tags.sort((a, b) => a.name.localeCompare(b.name)) as tag}
|
||||
<Tooltip content={tag.name} className="flex-shrink-0">
|
||||
<div class=" text-xs font-semibold rounded-sm uppercase text-white">
|
||||
{tag.name}
|
||||
</div>
|
||||
</Tooltip>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
<div class="translate-y-[1px]">
|
||||
<Tag />
|
||||
</div>
|
||||
</Tooltip>
|
||||
{/key}
|
||||
{/if}
|
||||
|
||||
{#if item.model?.direct}
|
||||
<Tooltip content={`${$i18n.t('Direct')}`}>
|
||||
<div class="translate-y-[1px]">
|
||||
|
||||
@@ -7,7 +7,15 @@
|
||||
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
import { config, user, models as _models, temporaryChatEnabled } from '$lib/stores';
|
||||
import {
|
||||
config,
|
||||
user,
|
||||
models as _models,
|
||||
temporaryChatEnabled,
|
||||
selectedFolder,
|
||||
chats,
|
||||
currentChatPage
|
||||
} from '$lib/stores';
|
||||
import { sanitizeResponseContent, extractCurlyBraceWords } from '$lib/utils';
|
||||
import { WEBUI_BASE_URL } from '$lib/constants';
|
||||
|
||||
@@ -15,6 +23,9 @@
|
||||
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
||||
import EyeSlash from '$lib/components/icons/EyeSlash.svelte';
|
||||
import MessageInput from './MessageInput.svelte';
|
||||
import FolderPlaceholder from './Placeholder/FolderPlaceholder.svelte';
|
||||
import FolderTitle from './Placeholder/FolderTitle.svelte';
|
||||
import { getChatList } from '$lib/apis/chats';
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
@@ -77,103 +88,121 @@
|
||||
class="w-full text-3xl text-gray-800 dark:text-gray-100 text-center flex items-center gap-4 font-primary"
|
||||
>
|
||||
<div class="w-full flex flex-col justify-center items-center">
|
||||
<div class="flex flex-row justify-center gap-3 @sm:gap-3.5 w-fit px-5 max-w-xl">
|
||||
<div class="flex shrink-0 justify-center">
|
||||
<div class="flex -space-x-4 mb-0.5" in:fade={{ duration: 100 }}>
|
||||
{#each models as model, modelIdx}
|
||||
<Tooltip
|
||||
content={(models[modelIdx]?.info?.meta?.tags ?? [])
|
||||
.map((tag) => tag.name.toUpperCase())
|
||||
.join(', ')}
|
||||
placement="top"
|
||||
>
|
||||
<button
|
||||
aria-hidden={models.length <= 1}
|
||||
aria-label={$i18n.t('Get information on {{name}} in the UI', {
|
||||
name: models[modelIdx]?.name
|
||||
})}
|
||||
on:click={() => {
|
||||
selectedModelIdx = modelIdx;
|
||||
}}
|
||||
{#if $selectedFolder}
|
||||
<FolderTitle
|
||||
folder={$selectedFolder}
|
||||
onUpdate={async (folder) => {
|
||||
selectedFolder.set(folder);
|
||||
|
||||
await chats.set(await getChatList(localStorage.token, $currentChatPage));
|
||||
currentChatPage.set(1);
|
||||
}}
|
||||
onDelete={async () => {
|
||||
await chats.set(await getChatList(localStorage.token, $currentChatPage));
|
||||
currentChatPage.set(1);
|
||||
|
||||
selectedFolder.set(null);
|
||||
}}
|
||||
/>
|
||||
{:else}
|
||||
<div class="flex flex-row justify-center gap-3 @sm:gap-3.5 w-fit px-5 max-w-xl">
|
||||
<div class="flex shrink-0 justify-center">
|
||||
<div class="flex -space-x-4 mb-0.5" in:fade={{ duration: 100 }}>
|
||||
{#each models as model, modelIdx}
|
||||
<Tooltip
|
||||
content={(models[modelIdx]?.info?.meta?.tags ?? [])
|
||||
.map((tag) => tag.name.toUpperCase())
|
||||
.join(', ')}
|
||||
placement="top"
|
||||
>
|
||||
<img
|
||||
crossorigin="anonymous"
|
||||
src={model?.info?.meta?.profile_image_url ??
|
||||
($i18n.language === 'dg-DG'
|
||||
? `${WEBUI_BASE_URL}/doge.png`
|
||||
: `${WEBUI_BASE_URL}/static/favicon.png`)}
|
||||
class=" size-9 @sm:size-10 rounded-full border-[1px] border-gray-100 dark:border-none"
|
||||
aria-hidden="true"
|
||||
draggable="false"
|
||||
/>
|
||||
</button>
|
||||
<button
|
||||
aria-hidden={models.length <= 1}
|
||||
aria-label={$i18n.t('Get information on {{name}} in the UI', {
|
||||
name: models[modelIdx]?.name
|
||||
})}
|
||||
on:click={() => {
|
||||
selectedModelIdx = modelIdx;
|
||||
}}
|
||||
>
|
||||
<img
|
||||
crossorigin="anonymous"
|
||||
src={model?.info?.meta?.profile_image_url ??
|
||||
($i18n.language === 'dg-DG'
|
||||
? `${WEBUI_BASE_URL}/doge.png`
|
||||
: `${WEBUI_BASE_URL}/static/favicon.png`)}
|
||||
class=" size-9 @sm:size-10 rounded-full border-[1px] border-gray-100 dark:border-none"
|
||||
aria-hidden="true"
|
||||
draggable="false"
|
||||
/>
|
||||
</button>
|
||||
</Tooltip>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class=" text-3xl @sm:text-3xl line-clamp-1 flex items-center"
|
||||
in:fade={{ duration: 100 }}
|
||||
>
|
||||
{#if models[selectedModelIdx]?.name}
|
||||
<Tooltip
|
||||
content={models[selectedModelIdx]?.name}
|
||||
placement="top"
|
||||
className=" flex items-center "
|
||||
>
|
||||
<span class="line-clamp-1">
|
||||
{models[selectedModelIdx]?.name}
|
||||
</span>
|
||||
</Tooltip>
|
||||
{/each}
|
||||
{:else}
|
||||
{$i18n.t('Hello, {{name}}', { name: $user?.name })}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class=" text-3xl @sm:text-3xl line-clamp-1 flex items-center"
|
||||
in:fade={{ duration: 100 }}
|
||||
>
|
||||
{#if models[selectedModelIdx]?.name}
|
||||
<Tooltip
|
||||
content={models[selectedModelIdx]?.name}
|
||||
placement="top"
|
||||
className=" flex items-center "
|
||||
>
|
||||
<span class="line-clamp-1">
|
||||
{models[selectedModelIdx]?.name}
|
||||
</span>
|
||||
</Tooltip>
|
||||
{:else}
|
||||
{$i18n.t('Hello, {{name}}', { name: $user?.name })}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex mt-1 mb-2">
|
||||
<div in:fade={{ duration: 100, delay: 50 }}>
|
||||
{#if models[selectedModelIdx]?.info?.meta?.description ?? null}
|
||||
<Tooltip
|
||||
className=" w-fit"
|
||||
content={marked.parse(
|
||||
sanitizeResponseContent(
|
||||
models[selectedModelIdx]?.info?.meta?.description ?? ''
|
||||
).replaceAll('\n', '<br>')
|
||||
)}
|
||||
placement="top"
|
||||
>
|
||||
<div
|
||||
class="mt-0.5 px-2 text-sm font-normal text-gray-500 dark:text-gray-400 line-clamp-2 max-w-xl markdown"
|
||||
>
|
||||
{@html marked.parse(
|
||||
<div class="flex mt-1 mb-2">
|
||||
<div in:fade={{ duration: 100, delay: 50 }}>
|
||||
{#if models[selectedModelIdx]?.info?.meta?.description ?? null}
|
||||
<Tooltip
|
||||
className=" w-fit"
|
||||
content={marked.parse(
|
||||
sanitizeResponseContent(
|
||||
models[selectedModelIdx]?.info?.meta?.description ?? ''
|
||||
).replaceAll('\n', '<br>')
|
||||
)}
|
||||
</div>
|
||||
</Tooltip>
|
||||
placement="top"
|
||||
>
|
||||
<div
|
||||
class="mt-0.5 px-2 text-sm font-normal text-gray-500 dark:text-gray-400 line-clamp-2 max-w-xl markdown"
|
||||
>
|
||||
{@html marked.parse(
|
||||
sanitizeResponseContent(
|
||||
models[selectedModelIdx]?.info?.meta?.description ?? ''
|
||||
).replaceAll('\n', '<br>')
|
||||
)}
|
||||
</div>
|
||||
</Tooltip>
|
||||
|
||||
{#if models[selectedModelIdx]?.info?.meta?.user}
|
||||
<div class="mt-0.5 text-sm font-normal text-gray-400 dark:text-gray-500">
|
||||
By
|
||||
{#if models[selectedModelIdx]?.info?.meta?.user.community}
|
||||
<a
|
||||
href="https://openwebui.com/m/{models[selectedModelIdx]?.info?.meta?.user
|
||||
.username}"
|
||||
>{models[selectedModelIdx]?.info?.meta?.user.name
|
||||
? models[selectedModelIdx]?.info?.meta?.user.name
|
||||
: `@${models[selectedModelIdx]?.info?.meta?.user.username}`}</a
|
||||
>
|
||||
{:else}
|
||||
{models[selectedModelIdx]?.info?.meta?.user.name}
|
||||
{/if}
|
||||
</div>
|
||||
{#if models[selectedModelIdx]?.info?.meta?.user}
|
||||
<div class="mt-0.5 text-sm font-normal text-gray-400 dark:text-gray-500">
|
||||
By
|
||||
{#if models[selectedModelIdx]?.info?.meta?.user.community}
|
||||
<a
|
||||
href="https://openwebui.com/m/{models[selectedModelIdx]?.info?.meta?.user
|
||||
.username}"
|
||||
>{models[selectedModelIdx]?.info?.meta?.user.name
|
||||
? models[selectedModelIdx]?.info?.meta?.user.name
|
||||
: `@${models[selectedModelIdx]?.info?.meta?.user.username}`}</a
|
||||
>
|
||||
{:else}
|
||||
{models[selectedModelIdx]?.info?.meta?.user.name}
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="text-base font-normal @md:max-w-3xl w-full py-3 {atSelectedModel ? 'mt-2' : ''}">
|
||||
<MessageInput
|
||||
@@ -214,16 +243,26 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-auto max-w-2xl font-primary mt-2" in:fade={{ duration: 200, delay: 200 }}>
|
||||
<div class="mx-5">
|
||||
<Suggestions
|
||||
suggestionPrompts={atSelectedModel?.info?.meta?.suggestion_prompts ??
|
||||
models[selectedModelIdx]?.info?.meta?.suggestion_prompts ??
|
||||
$config?.default_prompt_suggestions ??
|
||||
[]}
|
||||
inputValue={prompt}
|
||||
{onSelect}
|
||||
/>
|
||||
|
||||
{#if $selectedFolder}
|
||||
<div
|
||||
class="mx-auto px-4 md:max-w-3xl md:px-6 font-primary min-h-62"
|
||||
in:fade={{ duration: 200, delay: 200 }}
|
||||
>
|
||||
<FolderPlaceholder folder={$selectedFolder} />
|
||||
</div>
|
||||
</div>
|
||||
{:else}
|
||||
<div class="mx-auto max-w-2xl font-primary mt-2" in:fade={{ duration: 200, delay: 200 }}>
|
||||
<div class="mx-5">
|
||||
<Suggestions
|
||||
suggestionPrompts={atSelectedModel?.info?.meta?.suggestion_prompts ??
|
||||
models[selectedModelIdx]?.info?.meta?.suggestion_prompts ??
|
||||
$config?.default_prompt_suggestions ??
|
||||
[]}
|
||||
inputValue={prompt}
|
||||
{onSelect}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
<script lang="ts">
|
||||
import { getContext, onMount } from 'svelte';
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
import dayjs from 'dayjs';
|
||||
import localizedFormat from 'dayjs/plugin/localizedFormat';
|
||||
import { getTimeRange } from '$lib/utils';
|
||||
|
||||
dayjs.extend(localizedFormat);
|
||||
|
||||
export let chats = [];
|
||||
|
||||
let chatList = null;
|
||||
|
||||
const init = async () => {
|
||||
if (chats.length === 0) {
|
||||
chatList = [];
|
||||
} else {
|
||||
chatList = chats.map((chat) => ({
|
||||
...chat,
|
||||
time_range: getTimeRange(chat.updated_at)
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
$: if (chats) {
|
||||
init();
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if chatList}
|
||||
<div class="text-left text-sm w-full mb-3">
|
||||
{#if chatList.length === 0}
|
||||
<div
|
||||
class="text-xs text-gray-500 dark:text-gray-400 text-center px-5 min-h-20 w-full h-full flex justify-center items-center"
|
||||
>
|
||||
{$i18n.t('No chats found')}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{#each chatList as chat, idx (chat.id)}
|
||||
{#if (idx === 0 || (idx > 0 && chat.time_range !== chatList[idx - 1].time_range)) && chat?.time_range}
|
||||
<div
|
||||
class="w-full text-xs text-gray-500 dark:text-gray-500 font-medium {idx === 0
|
||||
? ''
|
||||
: 'pt-5'} pb-2 px-2"
|
||||
>
|
||||
{$i18n.t(chat.time_range)}
|
||||
<!-- localisation keys for time_range to be recognized from the i18next parser (so they don't get automatically removed):
|
||||
{$i18n.t('Today')}
|
||||
{$i18n.t('Yesterday')}
|
||||
{$i18n.t('Previous 7 days')}
|
||||
{$i18n.t('Previous 30 days')}
|
||||
{$i18n.t('January')}
|
||||
{$i18n.t('February')}
|
||||
{$i18n.t('March')}
|
||||
{$i18n.t('April')}
|
||||
{$i18n.t('May')}
|
||||
{$i18n.t('June')}
|
||||
{$i18n.t('July')}
|
||||
{$i18n.t('August')}
|
||||
{$i18n.t('September')}
|
||||
{$i18n.t('October')}
|
||||
{$i18n.t('November')}
|
||||
{$i18n.t('December')}
|
||||
-->
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<a
|
||||
class=" w-full flex justify-between items-center rounded-lg text-sm py-2 px-3 hover:bg-gray-50 dark:hover:bg-gray-850"
|
||||
draggable="false"
|
||||
href={`/c/${chat.id}`}
|
||||
on:click={() => (show = false)}
|
||||
>
|
||||
<div class="text-ellipsis line-clamp-1 w-full sm:basis-3/5">
|
||||
{chat?.title}
|
||||
</div>
|
||||
|
||||
<div class="hidden sm:flex sm:basis-2/5 items-center justify-end">
|
||||
<div class=" text-gray-500 dark:text-gray-400 text-xs">
|
||||
{dayjs(chat?.updated_at * 1000).calendar()}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
{/each}
|
||||
|
||||
<!-- {#if !allChatsLoaded && loadHandler}
|
||||
<Loader
|
||||
on:visible={(e) => {
|
||||
if (!chatListLoading) {
|
||||
loadHandler();
|
||||
}
|
||||
}}
|
||||
>
|
||||
<div class="w-full flex justify-center py-1 text-xs animate-pulse items-center gap-2">
|
||||
<Spinner className=" size-4" />
|
||||
<div class=" ">Loading...</div>
|
||||
</div>
|
||||
</Loader>
|
||||
{/if} -->
|
||||
</div>
|
||||
{/if}
|
||||
@@ -0,0 +1,51 @@
|
||||
<script>
|
||||
import { getContext } from 'svelte';
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
import { fade } from 'svelte/transition';
|
||||
|
||||
import ChatList from './ChatList.svelte';
|
||||
import FolderKnowledge from './FolderKnowledge.svelte';
|
||||
|
||||
export let folder = null;
|
||||
|
||||
let selectedTab = 'chats';
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<!-- <div class="mb-1">
|
||||
<div
|
||||
class="flex gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full bg-transparent py-1 touch-auto pointer-events-auto"
|
||||
>
|
||||
<button
|
||||
class="min-w-fit p-1.5 {selectedTab === 'knowledge'
|
||||
? ''
|
||||
: 'text-gray-300 dark:text-gray-600 hover:text-gray-700 dark:hover:text-white'} transition"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
selectedTab = 'knowledge';
|
||||
}}>{$i18n.t('Knowledge')}</button
|
||||
>
|
||||
|
||||
<button
|
||||
class="min-w-fit p-1.5 {selectedTab === 'chats'
|
||||
? ''
|
||||
: 'text-gray-300 dark:text-gray-600 hover:text-gray-700 dark:hover:text-white'} transition"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
selectedTab = 'chats';
|
||||
}}
|
||||
>
|
||||
{$i18n.t('Chats')}
|
||||
</button>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<div class="">
|
||||
{#if selectedTab === 'knowledge'}
|
||||
<FolderKnowledge />
|
||||
{:else if selectedTab === 'chats'}
|
||||
<ChatList chats={folder?.items?.chats ?? []} />
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,147 @@
|
||||
<script lang="ts">
|
||||
import { getContext } from 'svelte';
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
import DOMPurify from 'dompurify';
|
||||
|
||||
import fileSaver from 'file-saver';
|
||||
const { saveAs } = fileSaver;
|
||||
|
||||
import { toast } from 'svelte-sonner';
|
||||
|
||||
import { selectedFolder } from '$lib/stores';
|
||||
|
||||
import { deleteFolderById, updateFolderById } from '$lib/apis/folders';
|
||||
import { getChatsByFolderId } from '$lib/apis/chats';
|
||||
|
||||
import FolderModal from '$lib/components/layout/Sidebar/Folders/FolderModal.svelte';
|
||||
|
||||
import Folder from '$lib/components/icons/Folder.svelte';
|
||||
import XMark from '$lib/components/icons/XMark.svelte';
|
||||
import FolderMenu from '$lib/components/layout/Sidebar/Folders/FolderMenu.svelte';
|
||||
import EllipsisHorizontal from '$lib/components/icons/EllipsisHorizontal.svelte';
|
||||
import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
|
||||
|
||||
export let folder = null;
|
||||
|
||||
export let onUpdate: Function = (folderId) => {};
|
||||
export let onDelete: Function = (folderId) => {};
|
||||
|
||||
let showFolderModal = false;
|
||||
let showDeleteConfirm = false;
|
||||
|
||||
const updateHandler = async ({ name, data }) => {
|
||||
if (name === '') {
|
||||
toast.error($i18n.t('Folder name cannot be empty.'));
|
||||
return;
|
||||
}
|
||||
|
||||
const currentName = folder.name;
|
||||
|
||||
name = name.trim();
|
||||
folder.name = name;
|
||||
|
||||
const res = await updateFolderById(localStorage.token, folder.id, {
|
||||
name,
|
||||
...(data ? { data } : {})
|
||||
}).catch((error) => {
|
||||
toast.error(`${error}`);
|
||||
|
||||
folder.name = currentName;
|
||||
return null;
|
||||
});
|
||||
|
||||
if (res) {
|
||||
folder.name = name;
|
||||
if (data) {
|
||||
folder.data = data;
|
||||
}
|
||||
|
||||
toast.success($i18n.t('Folder updated successfully'));
|
||||
selectedFolder.set(folder);
|
||||
onUpdate(folder);
|
||||
}
|
||||
};
|
||||
|
||||
const deleteHandler = async () => {
|
||||
const res = await deleteFolderById(localStorage.token, folder.id).catch((error) => {
|
||||
toast.error(`${error}`);
|
||||
return null;
|
||||
});
|
||||
|
||||
if (res) {
|
||||
toast.success($i18n.t('Folder deleted successfully'));
|
||||
onDelete(folder);
|
||||
}
|
||||
};
|
||||
|
||||
const exportHandler = async () => {
|
||||
const chats = await getChatsByFolderId(localStorage.token, folder.id).catch((error) => {
|
||||
toast.error(`${error}`);
|
||||
return null;
|
||||
});
|
||||
if (!chats) {
|
||||
return;
|
||||
}
|
||||
|
||||
const blob = new Blob([JSON.stringify(chats)], {
|
||||
type: 'application/json'
|
||||
});
|
||||
|
||||
saveAs(blob, `folder-${folder.name}-export-${Date.now()}.json`);
|
||||
};
|
||||
</script>
|
||||
|
||||
{#if folder}
|
||||
<FolderModal bind:show={showFolderModal} edit={true} {folder} onSubmit={updateHandler} />
|
||||
|
||||
<DeleteConfirmDialog
|
||||
bind:show={showDeleteConfirm}
|
||||
title={$i18n.t('Delete folder?')}
|
||||
on:confirm={() => {
|
||||
deleteHandler();
|
||||
}}
|
||||
>
|
||||
<div class=" text-sm text-gray-700 dark:text-gray-300 flex-1 line-clamp-3">
|
||||
{@html DOMPurify.sanitize(
|
||||
$i18n.t(
|
||||
'This will delete <strong>{{NAME}}</strong> and <strong>all its contents</strong>.',
|
||||
{
|
||||
NAME: folder.name
|
||||
}
|
||||
)
|
||||
)}
|
||||
</div>
|
||||
</DeleteConfirmDialog>
|
||||
|
||||
<div class="mb-3 px-6 @md:max-w-3xl justify-between w-full flex relative group items-center">
|
||||
<div class="text-center flex gap-3.5 items-center">
|
||||
<div class=" rounded-full bg-gray-50 dark:bg-gray-800 p-3 w-fit">
|
||||
<Folder className="size-4.5" strokeWidth="2" />
|
||||
</div>
|
||||
|
||||
<div class="text-3xl">
|
||||
{folder.name}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center translate-x-2.5">
|
||||
<FolderMenu
|
||||
align="end"
|
||||
onEdit={() => {
|
||||
showFolderModal = true;
|
||||
}}
|
||||
onDelete={() => {
|
||||
showDeleteConfirm = true;
|
||||
}}
|
||||
onExport={() => {
|
||||
exportHandler();
|
||||
}}
|
||||
>
|
||||
<button class="p-1.5 dark:hover:bg-gray-850 rounded-full touch-auto" on:click={(e) => {}}>
|
||||
<EllipsisHorizontal className="size-4" strokeWidth="2.5" />
|
||||
</button>
|
||||
</FolderMenu>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
@@ -43,12 +43,16 @@
|
||||
|
||||
let largeTextAsFile = false;
|
||||
|
||||
let keepFollowUpPrompts = false;
|
||||
let insertFollowUpPrompt = false;
|
||||
|
||||
let landingPageMode = '';
|
||||
let chatBubble = true;
|
||||
let chatDirection: 'LTR' | 'RTL' | 'auto' = 'auto';
|
||||
let ctrlEnterToSend = false;
|
||||
let copyFormatted = false;
|
||||
|
||||
let chatFadeStreamingText = true;
|
||||
let collapseCodeBlocks = false;
|
||||
let expandDetails = false;
|
||||
|
||||
@@ -159,6 +163,11 @@
|
||||
saveSettings({ imageCompression });
|
||||
};
|
||||
|
||||
const toggleChatFadeStreamingText = async () => {
|
||||
chatFadeStreamingText = !chatFadeStreamingText;
|
||||
saveSettings({ chatFadeStreamingText: chatFadeStreamingText });
|
||||
};
|
||||
|
||||
const toggleHapticFeedback = async () => {
|
||||
hapticFeedback = !hapticFeedback;
|
||||
saveSettings({ hapticFeedback: hapticFeedback });
|
||||
@@ -224,6 +233,16 @@
|
||||
saveSettings({ insertPromptAsRichText });
|
||||
};
|
||||
|
||||
const toggleKeepFollowUpPrompts = async () => {
|
||||
keepFollowUpPrompts = !keepFollowUpPrompts;
|
||||
saveSettings({ keepFollowUpPrompts });
|
||||
};
|
||||
|
||||
const toggleInsertFollowUpPrompt = async () => {
|
||||
insertFollowUpPrompt = !insertFollowUpPrompt;
|
||||
saveSettings({ insertFollowUpPrompt });
|
||||
};
|
||||
|
||||
const toggleLargeTextAsFile = async () => {
|
||||
largeTextAsFile = !largeTextAsFile;
|
||||
saveSettings({ largeTextAsFile });
|
||||
@@ -313,10 +332,15 @@
|
||||
showEmojiInCall = $settings?.showEmojiInCall ?? false;
|
||||
voiceInterruption = $settings?.voiceInterruption ?? false;
|
||||
|
||||
chatFadeStreamingText = $settings?.chatFadeStreamingText ?? true;
|
||||
|
||||
richTextInput = $settings?.richTextInput ?? true;
|
||||
insertPromptAsRichText = $settings?.insertPromptAsRichText ?? false;
|
||||
promptAutocomplete = $settings?.promptAutocomplete ?? false;
|
||||
|
||||
keepFollowUpPrompts = $settings?.keepFollowUpPrompts ?? false;
|
||||
insertFollowUpPrompt = $settings?.insertFollowUpPrompt ?? false;
|
||||
|
||||
largeTextAsFile = $settings?.largeTextAsFile ?? false;
|
||||
copyFormatted = $settings?.copyFormatted ?? false;
|
||||
|
||||
@@ -746,6 +770,75 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div id="fade-streaming-label" class=" self-center text-xs">
|
||||
{$i18n.t('Fade Effect for Streaming Text')}
|
||||
</div>
|
||||
|
||||
<button
|
||||
aria-labelledby="fade-streaming-label"
|
||||
class="p-1 px-3 text-xs flex rounded-sm transition"
|
||||
on:click={() => {
|
||||
toggleChatFadeStreamingText();
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
{#if chatFadeStreamingText === true}
|
||||
<span class="ml-2 self-center">{$i18n.t('On')}</span>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Off')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div id="keep-followup-prompts-label" class=" self-center text-xs">
|
||||
{$i18n.t('Keep Follow-Up Prompts in Chat')}
|
||||
</div>
|
||||
|
||||
<button
|
||||
aria-labelledby="keep-followup-prompts-label"
|
||||
class="p-1 px-3 text-xs flex rounded-sm transition"
|
||||
on:click={() => {
|
||||
toggleKeepFollowUpPrompts();
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
{#if keepFollowUpPrompts === true}
|
||||
<span class="ml-2 self-center">{$i18n.t('On')}</span>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Off')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div id="insert-followup-prompt-label" class=" self-center text-xs">
|
||||
{$i18n.t('Insert Follow-Up Prompt to Input')}
|
||||
</div>
|
||||
|
||||
<button
|
||||
aria-labelledby="insert-followup-prompt-label"
|
||||
class="p-1 px-3 text-xs flex rounded-sm transition"
|
||||
on:click={() => {
|
||||
toggleInsertFollowUpPrompt();
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
{#if insertFollowUpPrompt === true}
|
||||
<span class="ml-2 self-center">{$i18n.t('On')}</span>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Off')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div id="rich-input-label" class=" self-center text-xs">
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<Modal size="xl" bind:show>
|
||||
<Modal size="lg" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-1">
|
||||
<div class=" text-lg font-medium self-center">{$i18n.t('Memory')}</div>
|
||||
|
||||
@@ -537,7 +537,7 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<Modal size="xl" bind:show>
|
||||
<Modal size="lg" bind:show>
|
||||
<div class="text-gray-700 dark:text-gray-100">
|
||||
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-1">
|
||||
<div class=" text-lg font-medium self-center">{$i18n.t('Settings')}</div>
|
||||
|
||||
@@ -112,6 +112,12 @@
|
||||
Formatting may be inconsistent from source.
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{#if item?.knowledge}
|
||||
<div class="capitalize shrink-0">
|
||||
{$i18n.t('Knowledge Base')}
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{#if edit}
|
||||
@@ -127,9 +133,9 @@
|
||||
>
|
||||
<div class="flex items-center gap-1.5 text-xs">
|
||||
{#if enableFullContent}
|
||||
Using Entire Document
|
||||
{$i18n.t('Using Entire Document')}
|
||||
{:else}
|
||||
Using Focused Retrieval
|
||||
{$i18n.t('Using Focused Retrieval')}
|
||||
{/if}
|
||||
<Switch
|
||||
bind:state={enableFullContent}
|
||||
@@ -172,9 +178,11 @@
|
||||
/>
|
||||
{/if}
|
||||
|
||||
<div class="max-h-96 overflow-scroll scrollbar-hidden text-xs whitespace-pre-wrap">
|
||||
{item?.file?.data?.content ?? 'No content'}
|
||||
</div>
|
||||
{#if item?.file?.data}
|
||||
<div class="max-h-96 overflow-scroll scrollbar-hidden text-xs whitespace-pre-wrap">
|
||||
{item?.file?.data?.content ?? 'No content'}
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -26,6 +26,14 @@
|
||||
return 'w-[30rem]';
|
||||
} else if (size === 'md') {
|
||||
return 'w-[42rem]';
|
||||
} else if (size === 'lg') {
|
||||
return 'w-[56rem]';
|
||||
} else if (size === 'xl') {
|
||||
return 'w-[70rem]';
|
||||
} else if (size === '2xl') {
|
||||
return 'w-[84rem]';
|
||||
} else if (size === '3xl') {
|
||||
return 'w-[100rem]';
|
||||
} else {
|
||||
return 'w-[56rem]';
|
||||
}
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
|
||||
import { Fragment, DOMParser } from 'prosemirror-model';
|
||||
import { EditorState, Plugin, PluginKey, TextSelection, Selection } from 'prosemirror-state';
|
||||
import { Decoration, DecorationSet } from 'prosemirror-view';
|
||||
import { Editor, Extension } from '@tiptap/core';
|
||||
|
||||
// Yjs imports
|
||||
@@ -72,32 +73,32 @@
|
||||
import { keymap } from 'prosemirror-keymap';
|
||||
|
||||
import { AIAutocompletion } from './RichTextInput/AutoCompletion.js';
|
||||
import Table from '@tiptap/extension-table';
|
||||
import TableRow from '@tiptap/extension-table-row';
|
||||
import TableHeader from '@tiptap/extension-table-header';
|
||||
import TableCell from '@tiptap/extension-table-cell';
|
||||
|
||||
import Link from '@tiptap/extension-link';
|
||||
import Underline from '@tiptap/extension-underline';
|
||||
import TaskItem from '@tiptap/extension-task-item';
|
||||
import TaskList from '@tiptap/extension-task-list';
|
||||
|
||||
import CharacterCount from '@tiptap/extension-character-count';
|
||||
|
||||
import CodeBlockLowlight from '@tiptap/extension-code-block-lowlight';
|
||||
import Placeholder from '@tiptap/extension-placeholder';
|
||||
import StarterKit from '@tiptap/starter-kit';
|
||||
import Highlight from '@tiptap/extension-highlight';
|
||||
import Typography from '@tiptap/extension-typography';
|
||||
|
||||
// Bubble and Floating menus are currently fixed to v2 due to styling issues in v3
|
||||
// TODO: Update to v3 when styling issues are resolved
|
||||
import BubbleMenu from '@tiptap/extension-bubble-menu';
|
||||
import FloatingMenu from '@tiptap/extension-floating-menu';
|
||||
|
||||
import { TableKit } from '@tiptap/extension-table';
|
||||
import { ListKit } from '@tiptap/extension-list';
|
||||
import { Placeholder, CharacterCount } from '@tiptap/extensions';
|
||||
|
||||
import Image from './RichTextInput/Image/index.js';
|
||||
// import TiptapImage from '@tiptap/extension-image';
|
||||
|
||||
import FileHandler from '@tiptap/extension-file-handler';
|
||||
import Typography from '@tiptap/extension-typography';
|
||||
import Highlight from '@tiptap/extension-highlight';
|
||||
import CodeBlockLowlight from '@tiptap/extension-code-block-lowlight';
|
||||
|
||||
import { all, createLowlight } from 'lowlight';
|
||||
|
||||
import { PASTED_TEXT_CHARACTER_LIMIT } from '$lib/constants';
|
||||
|
||||
import FormattingButtons from './RichTextInput/FormattingButtons.svelte';
|
||||
import { duration } from 'dayjs';
|
||||
|
||||
export let oncompositionstart = (e) => {};
|
||||
export let oncompositionend = (e) => {};
|
||||
@@ -110,11 +111,64 @@
|
||||
|
||||
export let socket = null;
|
||||
export let user = null;
|
||||
export let files = [];
|
||||
|
||||
export let documentId = '';
|
||||
|
||||
export let className = 'input-prose';
|
||||
export let placeholder = 'Type here...';
|
||||
export let link = false;
|
||||
export let image = false;
|
||||
export let fileHandler = false;
|
||||
|
||||
export let onFileDrop = (currentEditor, files, pos) => {
|
||||
files.forEach((file) => {
|
||||
const fileReader = new FileReader();
|
||||
|
||||
fileReader.readAsDataURL(file);
|
||||
fileReader.onload = () => {
|
||||
currentEditor
|
||||
.chain()
|
||||
.insertContentAt(pos, {
|
||||
type: 'image',
|
||||
attrs: {
|
||||
src: fileReader.result
|
||||
}
|
||||
})
|
||||
.focus()
|
||||
.run();
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
export let onFilePaste = (currentEditor, files, htmlContent) => {
|
||||
files.forEach((file) => {
|
||||
if (htmlContent) {
|
||||
// if there is htmlContent, stop manual insertion & let other extensions handle insertion via inputRule
|
||||
// you could extract the pasted file from this url string and upload it to a server for example
|
||||
console.log(htmlContent); // eslint-disable-line no-console
|
||||
return false;
|
||||
}
|
||||
|
||||
const fileReader = new FileReader();
|
||||
|
||||
fileReader.readAsDataURL(file);
|
||||
fileReader.onload = () => {
|
||||
currentEditor
|
||||
.chain()
|
||||
.insertContentAt(currentEditor.state.selection.anchor, {
|
||||
type: 'image',
|
||||
attrs: {
|
||||
src: fileReader.result
|
||||
}
|
||||
})
|
||||
.focus()
|
||||
.run();
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
export let onSelectionUpdate = (e) => {};
|
||||
|
||||
export let id = '';
|
||||
export let value = '';
|
||||
@@ -134,17 +188,28 @@
|
||||
export let shiftEnter = false;
|
||||
export let largeTextAsFile = false;
|
||||
export let insertPromptAsRichText = false;
|
||||
export let floatingMenuPlacement = 'bottom-start';
|
||||
|
||||
let content = null;
|
||||
let htmlValue = '';
|
||||
let jsonValue = '';
|
||||
let mdValue = '';
|
||||
|
||||
let lastSelectionBookmark = null;
|
||||
|
||||
// Yjs setup
|
||||
let ydoc = null;
|
||||
let yXmlFragment = null;
|
||||
let awareness = null;
|
||||
|
||||
const getEditorInstance = async () => {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
resolve(editor);
|
||||
}, 0);
|
||||
});
|
||||
};
|
||||
|
||||
// Custom Yjs Socket.IO provider
|
||||
class SocketIOProvider {
|
||||
constructor(doc, documentId, socket, user) {
|
||||
@@ -176,7 +241,7 @@
|
||||
|
||||
joinDocument() {
|
||||
const userColor = this.generateUserColor();
|
||||
this.socket.emit('yjs:document:join', {
|
||||
this.socket.emit('ydoc:document:join', {
|
||||
document_id: this.documentId,
|
||||
user_id: this.user?.id,
|
||||
user_name: this.user?.name,
|
||||
@@ -195,7 +260,7 @@
|
||||
|
||||
setupEventListeners() {
|
||||
// Listen for document updates from server
|
||||
this.socket.on('yjs:document:update', (data) => {
|
||||
this.socket.on('ydoc:document:update', (data) => {
|
||||
if (data.document_id === this.documentId && data.socket_id !== this.socket.id) {
|
||||
try {
|
||||
const update = new Uint8Array(data.update);
|
||||
@@ -207,7 +272,7 @@
|
||||
});
|
||||
|
||||
// Listen for document state from server
|
||||
this.socket.on('yjs:document:state', async (data) => {
|
||||
this.socket.on('ydoc:document:state', async (data) => {
|
||||
if (data.document_id === this.documentId) {
|
||||
try {
|
||||
if (data.state) {
|
||||
@@ -216,26 +281,47 @@
|
||||
if (state.length === 2 && state[0] === 0 && state[1] === 0) {
|
||||
// Empty state, check if we have content to initialize
|
||||
// check if editor empty as well
|
||||
// const editor = await getEditorInstance();
|
||||
|
||||
const isEmptyEditor = !editor || editor.getText().trim() === '';
|
||||
if (content && isEmptyEditor) {
|
||||
const pydoc = prosemirrorJSONToYDoc(editor.schema, content);
|
||||
if (pydoc) {
|
||||
Y.applyUpdate(this.doc, Y.encodeStateAsUpdate(pydoc));
|
||||
if (isEmptyEditor) {
|
||||
if (content && (data?.sessions ?? ['']).length === 1) {
|
||||
const editorYdoc = prosemirrorJSONToYDoc(editor.schema, content);
|
||||
if (editorYdoc) {
|
||||
Y.applyUpdate(this.doc, Y.encodeStateAsUpdate(editorYdoc));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// If the editor already has content, we don't need to send an empty state
|
||||
if (this.doc.getXmlFragment('prosemirror').length > 0) {
|
||||
this.socket.emit('ydoc:document:update', {
|
||||
document_id: this.documentId,
|
||||
user_id: this.user?.id,
|
||||
socket_id: this.socket.id,
|
||||
update: Y.encodeStateAsUpdate(this.doc)
|
||||
});
|
||||
} else {
|
||||
console.warn('Yjs document is empty, not sending state.');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Y.applyUpdate(this.doc, state);
|
||||
Y.applyUpdate(this.doc, state, 'server');
|
||||
}
|
||||
}
|
||||
this.synced = true;
|
||||
} catch (error) {
|
||||
console.error('Error applying Yjs state:', error);
|
||||
|
||||
this.synced = false;
|
||||
this.socket.emit('ydoc:document:state', {
|
||||
document_id: this.documentId
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Listen for awareness updates
|
||||
this.socket.on('yjs:awareness:update', (data) => {
|
||||
this.socket.on('ydoc:awareness:update', (data) => {
|
||||
if (data.document_id === this.documentId && awareness) {
|
||||
try {
|
||||
const awarenessUpdate = new Uint8Array(data.update);
|
||||
@@ -254,7 +340,7 @@
|
||||
this.doc.on('update', async (update, origin) => {
|
||||
if (origin !== 'server' && this.isConnected) {
|
||||
await tick(); // Ensure the DOM is updated before sending
|
||||
this.socket.emit('yjs:document:update', {
|
||||
this.socket.emit('ydoc:document:update', {
|
||||
document_id: this.documentId,
|
||||
user_id: this.user?.id,
|
||||
socket_id: this.socket.id,
|
||||
@@ -276,7 +362,7 @@
|
||||
if (origin !== 'server' && this.isConnected) {
|
||||
const changedClients = added.concat(updated).concat(removed);
|
||||
const awarenessUpdate = awareness.encodeUpdate(changedClients);
|
||||
this.socket.emit('yjs:awareness:update', {
|
||||
this.socket.emit('ydoc:awareness:update', {
|
||||
document_id: this.documentId,
|
||||
user_id: this.socket.id,
|
||||
update: Array.from(awarenessUpdate)
|
||||
@@ -302,14 +388,14 @@
|
||||
};
|
||||
|
||||
destroy() {
|
||||
this.socket.off('yjs:document:update');
|
||||
this.socket.off('yjs:document:state');
|
||||
this.socket.off('yjs:awareness:update');
|
||||
this.socket.off('ydoc:document:update');
|
||||
this.socket.off('ydoc:document:state');
|
||||
this.socket.off('ydoc:awareness:update');
|
||||
this.socket.off('connect', this.onConnect);
|
||||
this.socket.off('disconnect', this.onDisconnect);
|
||||
|
||||
if (this.isConnected) {
|
||||
this.socket.emit('yjs:document:leave', {
|
||||
this.socket.emit('ydoc:document:leave', {
|
||||
document_id: this.documentId,
|
||||
user_id: this.user?.id
|
||||
});
|
||||
@@ -574,6 +660,10 @@
|
||||
export const setText = (text: string) => {
|
||||
if (!editor) return;
|
||||
text = text.replaceAll('\n\n', '\n');
|
||||
|
||||
// reset the editor content
|
||||
editor.commands.clearContent();
|
||||
|
||||
const { state, view } = editor;
|
||||
const { schema, tr } = state;
|
||||
|
||||
@@ -742,6 +832,33 @@
|
||||
}
|
||||
};
|
||||
|
||||
const SelectionDecoration = Extension.create({
|
||||
name: 'selectionDecoration',
|
||||
addProseMirrorPlugins() {
|
||||
return [
|
||||
new Plugin({
|
||||
key: new PluginKey('selection'),
|
||||
props: {
|
||||
decorations: (state) => {
|
||||
const { selection } = state;
|
||||
const { focused } = this.editor;
|
||||
|
||||
if (focused || selection.empty) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return DecorationSet.create(state.doc, [
|
||||
Decoration.inline(selection.from, selection.to, {
|
||||
class: 'editor-selection'
|
||||
})
|
||||
]);
|
||||
}
|
||||
}
|
||||
})
|
||||
];
|
||||
}
|
||||
});
|
||||
|
||||
onMount(async () => {
|
||||
content = value;
|
||||
|
||||
@@ -788,35 +905,42 @@
|
||||
initializeCollaboration();
|
||||
}
|
||||
|
||||
console.log(bubbleMenuElement, floatingMenuElement);
|
||||
|
||||
editor = new Editor({
|
||||
element: element,
|
||||
extensions: [
|
||||
StarterKit,
|
||||
StarterKit.configure({
|
||||
link: link
|
||||
}),
|
||||
Placeholder.configure({ placeholder }),
|
||||
SelectionDecoration,
|
||||
|
||||
CodeBlockLowlight.configure({
|
||||
lowlight
|
||||
}),
|
||||
Highlight,
|
||||
Typography,
|
||||
Underline,
|
||||
|
||||
Placeholder.configure({ placeholder }),
|
||||
Table.configure({ resizable: true }),
|
||||
TableRow,
|
||||
TableHeader,
|
||||
TableCell,
|
||||
TaskList,
|
||||
TaskItem.configure({
|
||||
nested: true
|
||||
TableKit.configure({
|
||||
table: { resizable: true }
|
||||
}),
|
||||
ListKit.configure({
|
||||
taskItem: {
|
||||
nested: true
|
||||
}
|
||||
}),
|
||||
CharacterCount.configure({}),
|
||||
...(link
|
||||
...(image ? [Image] : []),
|
||||
...(fileHandler
|
||||
? [
|
||||
Link.configure({
|
||||
openOnClick: true,
|
||||
linkOnPaste: true
|
||||
FileHandler.configure({
|
||||
onDrop: onFileDrop,
|
||||
onPaste: onFilePaste
|
||||
})
|
||||
]
|
||||
: []),
|
||||
|
||||
...(autocomplete
|
||||
? [
|
||||
AIAutocompletion.configure({
|
||||
@@ -853,7 +977,7 @@
|
||||
tippyOptions: {
|
||||
duration: 100,
|
||||
arrow: false,
|
||||
placement: 'bottom-start',
|
||||
placement: floatingMenuPlacement,
|
||||
theme: 'transparent',
|
||||
offset: [-12, 4]
|
||||
}
|
||||
@@ -867,6 +991,7 @@
|
||||
onTransaction: () => {
|
||||
// force re-render so `editor.isActive` works as expected
|
||||
editor = editor;
|
||||
if (!editor) return;
|
||||
|
||||
htmlValue = editor.getHTML();
|
||||
jsonValue = editor.getJSON();
|
||||
@@ -1057,7 +1182,10 @@
|
||||
const hasImageItem = Array.from(event.clipboardData.items).some((item) =>
|
||||
item.type.startsWith('image/')
|
||||
);
|
||||
if (hasImageFile || hasImageItem) {
|
||||
|
||||
const hasFile = Array.from(event.clipboardData.files).length > 0;
|
||||
|
||||
if (hasImageFile || hasImageItem || hasFile) {
|
||||
eventDispatch('paste', { event });
|
||||
event.preventDefault();
|
||||
return true;
|
||||
@@ -1068,7 +1196,13 @@
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onBeforeCreate: ({ editor }) => {
|
||||
if (files) {
|
||||
editor.storage.files = files;
|
||||
}
|
||||
},
|
||||
onSelectionUpdate: onSelectionUpdate
|
||||
});
|
||||
|
||||
if (messageInput) {
|
||||
@@ -1140,11 +1274,11 @@
|
||||
</script>
|
||||
|
||||
{#if showFormattingButtons}
|
||||
<div bind:this={bubbleMenuElement} class="p-0">
|
||||
<div bind:this={bubbleMenuElement} id="bubble-menu" class="p-0">
|
||||
<FormattingButtons {editor} />
|
||||
</div>
|
||||
|
||||
<div bind:this={floatingMenuElement} class="p-0">
|
||||
<div bind:this={floatingMenuElement} id="floating-menu" class="p-0">
|
||||
<FormattingButtons {editor} />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
@@ -12,10 +12,13 @@
|
||||
import Italic from '$lib/components/icons/Italic.svelte';
|
||||
import ListBullet from '$lib/components/icons/ListBullet.svelte';
|
||||
import NumberedList from '$lib/components/icons/NumberedList.svelte';
|
||||
import QueueList from '$lib/components/icons/QueueList.svelte';
|
||||
import Strikethrough from '$lib/components/icons/Strikethrough.svelte';
|
||||
import Underline from '$lib/components/icons/Underline.svelte';
|
||||
|
||||
import Tooltip from '../Tooltip.svelte';
|
||||
import CheckBox from '$lib/components/icons/CheckBox.svelte';
|
||||
import ArrowLeftTag from '$lib/components/icons/ArrowLeftTag.svelte';
|
||||
import ArrowRightTag from '$lib/components/icons/ArrowRightTag.svelte';
|
||||
</script>
|
||||
|
||||
<div
|
||||
@@ -57,6 +60,31 @@
|
||||
</button>
|
||||
</Tooltip>
|
||||
|
||||
{#if editor?.isActive('bulletList') || editor?.isActive('orderedList') || editor?.isActive('taskList')}
|
||||
<Tooltip placement="top" content={$i18n.t('Lift List')}>
|
||||
<button
|
||||
on:click={() => {
|
||||
editor?.commands.liftListItem(editor?.isActive('taskList') ? 'taskItem' : 'listItem');
|
||||
}}
|
||||
class="hover:bg-gray-50 dark:hover:bg-gray-700 rounded-lg p-1.5 transition-all"
|
||||
type="button"
|
||||
>
|
||||
<ArrowLeftTag />
|
||||
</button>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip placement="top" content={$i18n.t('Sink List')}>
|
||||
<button
|
||||
on:click={() =>
|
||||
editor?.commands.sinkListItem(editor?.isActive('taskList') ? 'taskItem' : 'listItem')}
|
||||
class="hover:bg-gray-50 dark:hover:bg-gray-700 rounded-lg p-1.5 transition-all"
|
||||
type="button"
|
||||
>
|
||||
<ArrowRightTag />
|
||||
</button>
|
||||
</Tooltip>
|
||||
{/if}
|
||||
|
||||
<Tooltip placement="top" content={$i18n.t('Bullet List')}>
|
||||
<button
|
||||
on:click={() => editor?.chain().focus().toggleBulletList().run()}
|
||||
@@ -89,7 +117,7 @@
|
||||
: ''} hover:bg-gray-50 dark:hover:bg-gray-700 rounded-lg p-1.5 transition-all"
|
||||
type="button"
|
||||
>
|
||||
<QueueList />
|
||||
<CheckBox />
|
||||
</button>
|
||||
</Tooltip>
|
||||
|
||||
|
||||
@@ -0,0 +1,197 @@
|
||||
import { mergeAttributes, Node, nodeInputRule } from '@tiptap/core';
|
||||
|
||||
export interface ImageOptions {
|
||||
/**
|
||||
* Controls if the image node should be inline or not.
|
||||
* @default false
|
||||
* @example true
|
||||
*/
|
||||
inline: boolean;
|
||||
|
||||
/**
|
||||
* Controls if base64 images are allowed. Enable this if you want to allow
|
||||
* base64 image urls in the `src` attribute.
|
||||
* @default false
|
||||
* @example true
|
||||
*/
|
||||
allowBase64: boolean;
|
||||
|
||||
/**
|
||||
* HTML attributes to add to the image element.
|
||||
* @default {}
|
||||
* @example { class: 'foo' }
|
||||
*/
|
||||
HTMLAttributes: Record<string, any>;
|
||||
}
|
||||
|
||||
export interface SetImageOptions {
|
||||
src: string;
|
||||
alt?: string;
|
||||
title?: string;
|
||||
width?: number;
|
||||
height?: number;
|
||||
}
|
||||
|
||||
declare module '@tiptap/core' {
|
||||
interface Commands<ReturnType> {
|
||||
image: {
|
||||
/**
|
||||
* Add an image
|
||||
* @param options The image attributes
|
||||
* @example
|
||||
* editor
|
||||
* .commands
|
||||
* .setImage({ src: 'https://tiptap.dev/logo.png', alt: 'tiptap', title: 'tiptap logo' })
|
||||
*/
|
||||
setImage: (options: SetImageOptions) => ReturnType;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches an image to a  on input.
|
||||
*/
|
||||
export const inputRegex = /(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/;
|
||||
|
||||
/**
|
||||
* This extension allows you to insert images.
|
||||
* @see https://www.tiptap.dev/api/nodes/image
|
||||
*/
|
||||
export const Image = Node.create<ImageOptions>({
|
||||
name: 'image',
|
||||
|
||||
addOptions() {
|
||||
return {
|
||||
inline: false,
|
||||
allowBase64: false,
|
||||
HTMLAttributes: {}
|
||||
};
|
||||
},
|
||||
|
||||
inline() {
|
||||
return this.options.inline;
|
||||
},
|
||||
|
||||
group() {
|
||||
return this.options.inline ? 'inline' : 'block';
|
||||
},
|
||||
|
||||
draggable: true,
|
||||
|
||||
addAttributes() {
|
||||
return {
|
||||
file: {
|
||||
default: null
|
||||
},
|
||||
src: {
|
||||
default: null
|
||||
},
|
||||
alt: {
|
||||
default: null
|
||||
},
|
||||
title: {
|
||||
default: null
|
||||
},
|
||||
width: {
|
||||
default: null
|
||||
},
|
||||
height: {
|
||||
default: null
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
parseHTML() {
|
||||
return [
|
||||
{
|
||||
tag: this.options.allowBase64 ? 'img[src]' : 'img[src]:not([src^="data:"])'
|
||||
}
|
||||
];
|
||||
},
|
||||
|
||||
renderHTML({ HTMLAttributes }) {
|
||||
if (HTMLAttributes.file) {
|
||||
delete HTMLAttributes.file;
|
||||
}
|
||||
|
||||
return ['img', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];
|
||||
},
|
||||
|
||||
addNodeView() {
|
||||
return ({ node, editor }) => {
|
||||
const domImg = document.createElement('img');
|
||||
domImg.setAttribute('src', node.attrs.src || '');
|
||||
domImg.setAttribute('alt', node.attrs.alt || '');
|
||||
domImg.setAttribute('title', node.attrs.title || '');
|
||||
|
||||
const container = document.createElement('div');
|
||||
const img = document.createElement('img');
|
||||
|
||||
const fileId = node.attrs.src.replace('data://', '');
|
||||
img.setAttribute('id', `image:${fileId}`);
|
||||
|
||||
img.classList.add('rounded-md', 'max-h-72', 'w-fit', 'object-contain');
|
||||
|
||||
const editorFiles = editor.storage?.files || [];
|
||||
|
||||
if (editorFiles && node.attrs.src.startsWith('data://')) {
|
||||
const file = editorFiles.find((f) => f.id === fileId);
|
||||
if (file) {
|
||||
img.setAttribute('src', file.url || '');
|
||||
} else {
|
||||
img.setAttribute('src', '/image-placeholder.png');
|
||||
}
|
||||
} else {
|
||||
img.setAttribute('src', node.attrs.src || '');
|
||||
}
|
||||
|
||||
img.setAttribute('alt', node.attrs.alt || '');
|
||||
img.setAttribute('title', node.attrs.title || '');
|
||||
|
||||
img.addEventListener('data', (e) => {
|
||||
const files = e?.files || [];
|
||||
if (files && node.attrs.src.startsWith('data://')) {
|
||||
const file = editorFiles.find((f) => f.id === fileId);
|
||||
if (file) {
|
||||
img.setAttribute('src', file.url || '');
|
||||
} else {
|
||||
img.setAttribute('src', '/image-placeholder.png');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
container.append(img);
|
||||
return {
|
||||
dom: img,
|
||||
contentDOM: domImg
|
||||
};
|
||||
};
|
||||
},
|
||||
|
||||
addCommands() {
|
||||
return {
|
||||
setImage:
|
||||
(options) =>
|
||||
({ commands }) => {
|
||||
return commands.insertContent({
|
||||
type: this.name,
|
||||
attrs: options
|
||||
});
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
addInputRules() {
|
||||
return [
|
||||
nodeInputRule({
|
||||
find: inputRegex,
|
||||
type: this.type,
|
||||
getAttributes: (match) => {
|
||||
const [, , alt, src, title] = match;
|
||||
|
||||
return { src, alt, title };
|
||||
}
|
||||
})
|
||||
];
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,5 @@
|
||||
import { Image } from './image.js';
|
||||
|
||||
export * from './image.js';
|
||||
|
||||
export default Image;
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
import tippy from 'tippy.js';
|
||||
|
||||
export let elementId = '';
|
||||
|
||||
export let placement = 'top';
|
||||
export let content = `I'm a tooltip!`;
|
||||
export let touch = true;
|
||||
@@ -17,20 +19,30 @@
|
||||
let tooltipElement;
|
||||
let tooltipInstance;
|
||||
|
||||
$: if (tooltipElement && content) {
|
||||
if (tooltipInstance) {
|
||||
tooltipInstance.setContent(DOMPurify.sanitize(content));
|
||||
$: if (tooltipElement && (content || elementId)) {
|
||||
let tooltipContent = null;
|
||||
|
||||
if (elementId) {
|
||||
tooltipContent = document.getElementById(`${elementId}`);
|
||||
} else {
|
||||
tooltipInstance = tippy(tooltipElement, {
|
||||
content: DOMPurify.sanitize(content),
|
||||
placement: placement,
|
||||
allowHTML: allowHTML,
|
||||
touch: touch,
|
||||
...(theme !== '' ? { theme } : { theme: 'dark' }),
|
||||
arrow: false,
|
||||
offset: offset,
|
||||
...tippyOptions
|
||||
});
|
||||
tooltipContent = DOMPurify.sanitize(content);
|
||||
}
|
||||
|
||||
if (tooltipInstance) {
|
||||
tooltipInstance.setContent(tooltipContent);
|
||||
} else {
|
||||
if (content) {
|
||||
tooltipInstance = tippy(tooltipElement, {
|
||||
content: tooltipContent,
|
||||
placement: placement,
|
||||
allowHTML: allowHTML,
|
||||
touch: touch,
|
||||
...(theme !== '' ? { theme } : { theme: 'dark' }),
|
||||
arrow: false,
|
||||
offset: offset,
|
||||
...tippyOptions
|
||||
});
|
||||
}
|
||||
}
|
||||
} else if (tooltipInstance && content === '') {
|
||||
if (tooltipInstance) {
|
||||
@@ -48,3 +60,5 @@
|
||||
<div bind:this={tooltipElement} class={className}>
|
||||
<slot />
|
||||
</div>
|
||||
|
||||
<slot name="tooltip"></slot>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<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="M10.5 6h9.75M10.5 6a1.5 1.5 0 1 1-3 0m3 0a1.5 1.5 0 1 0-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-9.75 0h9.75"
|
||||
/>
|
||||
</svg>
|
||||
@@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
export let className = 'size-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
|
||||
d="M16.75 12H6.75M6.75 12L9.5 14.75M6.75 12L9.5 9.25"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
></path><path
|
||||
d="M2 15V9C2 6.79086 3.79086 5 6 5H18C20.2091 5 22 6.79086 22 9V15C22 17.2091 20.2091 19 18 19H6C3.79086 19 2 17.2091 2 15Z"
|
||||
></path></svg
|
||||
>
|
||||
@@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
export let className = 'size-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
|
||||
d="M6.75 12H16.75M16.75 12L14 14.75M16.75 12L14 9.25"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
></path><path
|
||||
d="M2 15V9C2 6.79086 3.79086 5 6 5H18C20.2091 5 22 6.79086 22 9V15C22 17.2091 20.2091 19 18 19H6C3.79086 19 2 17.2091 2 15Z"
|
||||
></path></svg
|
||||
>
|
||||
@@ -0,0 +1,22 @@
|
||||
<script lang="ts">
|
||||
export let className = 'size-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
|
||||
d="M3 20.4V3.6C3 3.26863 3.26863 3 3.6 3H20.4C20.7314 3 21 3.26863 21 3.6V20.4C21 20.7314 20.7314 21 20.4 21H3.6C3.26863 21 3 20.7314 3 20.4Z"
|
||||
stroke-width="1.5"
|
||||
></path><path
|
||||
d="M7 12.5L10 15.5L17 8.5"
|
||||
stroke-width="1.5"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
></path>
|
||||
</svg>
|
||||
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
export let className = 'size-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="M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"
|
||||
/>
|
||||
</svg>
|
||||
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
export let className = 'size-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="M10.125 2.25h-4.5c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125v-9M10.125 2.25h.375a9 9 0 0 1 9 9v.375M10.125 2.25A3.375 3.375 0 0 1 13.5 5.625v1.5c0 .621.504 1.125 1.125 1.125h1.5a3.375 3.375 0 0 1 3.375 3.375M9 15l2.25 2.25L15 12"
|
||||
/>
|
||||
</svg>
|
||||
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
export let className = 'size-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="M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z"
|
||||
/>
|
||||
</svg>
|
||||
@@ -0,0 +1,16 @@
|
||||
<script lang="ts">
|
||||
export let className = 'size-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
|
||||
d="M3 17.4V6.6C3 6.26863 3.26863 6 3.6 6H16.6789C16.8795 6 17.0668 6.10026 17.1781 6.26718L20.7781 11.6672C20.9125 11.8687 20.9125 12.1313 20.7781 12.3328L17.1781 17.7328C17.0668 17.8997 16.8795 18 16.6789 18H3.6C3.26863 18 3 17.7314 3 17.4Z"
|
||||
></path></svg
|
||||
>
|
||||
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
export let className = 'size-4';
|
||||
export let strokeWidth = '1.8';
|
||||
</script>
|
||||
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width={strokeWidth}
|
||||
stroke="currentColor"
|
||||
class={className}
|
||||
>
|
||||
<!-- Tag body with pointed end -->
|
||||
<path d="M4 12 L8 7 H21 V17 H8 L4 12 Z" stroke="currentColor" fill="none" />
|
||||
|
||||
<!-- Tag hole -->
|
||||
<circle cx="10" cy="12" r="0.75" fill="currentColor" stroke="currentColor" />
|
||||
</svg>
|
||||
@@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
export let className = 'w-4 h-4';
|
||||
export let strokeWidth = '1.5';
|
||||
</script>
|
||||
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width={strokeWidth}
|
||||
stroke="currentColor"
|
||||
class={className}
|
||||
><path d="M12 4L12 20" stroke-linecap="round" stroke-linejoin="round"></path><path
|
||||
d="M8 9L8 15"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
></path><path d="M20 10L20 14" stroke-linecap="round" stroke-linejoin="round"></path><path
|
||||
d="M4 10L4 14"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
></path><path d="M16 7L16 17" stroke-linecap="round" stroke-linejoin="round"></path></svg
|
||||
>
|
||||
@@ -1,16 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { toast } from 'svelte-sonner';
|
||||
import { getContext, onMount } from 'svelte';
|
||||
import { getContext, onDestroy, onMount, tick } from 'svelte';
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
import Modal from '$lib/components/common/Modal.svelte';
|
||||
import SearchInput from './Sidebar/SearchInput.svelte';
|
||||
import { getChatList, getChatListBySearchText } from '$lib/apis/chats';
|
||||
import { getChatById, getChatList, getChatListBySearchText } from '$lib/apis/chats';
|
||||
import Spinner from '../common/Spinner.svelte';
|
||||
|
||||
import dayjs from '$lib/dayjs';
|
||||
import calendar from 'dayjs/plugin/calendar';
|
||||
import Loader from '../common/Loader.svelte';
|
||||
import { createMessagesList } from '$lib/utils';
|
||||
import { user } from '$lib/stores';
|
||||
import Messages from '../chat/Messages.svelte';
|
||||
dayjs.extend(calendar);
|
||||
|
||||
export let show = false;
|
||||
@@ -28,6 +31,60 @@
|
||||
|
||||
let selectedIdx = 0;
|
||||
|
||||
let selectedChat = null;
|
||||
|
||||
let selectedModels = [''];
|
||||
let history = null;
|
||||
let messages = null;
|
||||
|
||||
$: if (!chatListLoading && chatList) {
|
||||
loadChatPreview(selectedIdx);
|
||||
}
|
||||
|
||||
const loadChatPreview = async (selectedIdx) => {
|
||||
if (!chatList || chatList.length === 0) {
|
||||
selectedChat = null;
|
||||
messages = null;
|
||||
history = null;
|
||||
selectedModels = [''];
|
||||
return;
|
||||
}
|
||||
|
||||
const chatId = chatList[selectedIdx].id;
|
||||
|
||||
const chat = await getChatById(localStorage.token, chatId).catch(async (error) => {
|
||||
return null;
|
||||
});
|
||||
|
||||
if (chat) {
|
||||
if (chat?.chat?.history) {
|
||||
selectedModels =
|
||||
(chat?.chat?.models ?? undefined) !== undefined
|
||||
? chat?.chat?.models
|
||||
: [chat?.chat?.models ?? ''];
|
||||
|
||||
history = chat?.chat?.history;
|
||||
messages = createMessagesList(chat?.chat?.history, chat?.chat?.history?.currentId);
|
||||
|
||||
// scroll to the bottom of the messages container
|
||||
await tick();
|
||||
const messagesContainerElement = document.getElementById('chat-preview');
|
||||
if (messagesContainerElement) {
|
||||
messagesContainerElement.scrollTop = messagesContainerElement.scrollHeight;
|
||||
}
|
||||
} else {
|
||||
messages = [];
|
||||
}
|
||||
} else {
|
||||
toast.error($i18n.t('Failed to load chat preview'));
|
||||
selectedChat = null;
|
||||
messages = null;
|
||||
history = null;
|
||||
selectedModels = [''];
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
const searchHandler = async () => {
|
||||
if (searchDebounceTimeout) {
|
||||
clearTimeout(searchDebounceTimeout);
|
||||
@@ -43,6 +100,11 @@
|
||||
}, 500);
|
||||
}
|
||||
|
||||
selectedChat = null;
|
||||
messages = null;
|
||||
history = null;
|
||||
selectedModels = [''];
|
||||
|
||||
if ((chatList ?? []).length === 0) {
|
||||
allChatsLoaded = true;
|
||||
} else {
|
||||
@@ -76,12 +138,67 @@
|
||||
searchHandler();
|
||||
};
|
||||
|
||||
const onKeyDown = (e) => {
|
||||
if (e.code === 'Escape') {
|
||||
show = false;
|
||||
onClose();
|
||||
} else if (e.code === 'Enter' && (chatList ?? []).length > 0) {
|
||||
const item = document.querySelector(`[data-arrow-selected="true"]`);
|
||||
if (item) {
|
||||
item?.click();
|
||||
}
|
||||
|
||||
show = false;
|
||||
return;
|
||||
} else if (e.code === 'ArrowDown') {
|
||||
const searchInput = document.getElementById('search-input');
|
||||
|
||||
if (searchInput) {
|
||||
// check if focused on the search input
|
||||
if (document.activeElement === searchInput) {
|
||||
searchInput.blur();
|
||||
selectedIdx = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
selectedIdx = Math.min(selectedIdx + 1, (chatList ?? []).length - 1);
|
||||
} else if (e.code === 'ArrowUp') {
|
||||
if (selectedIdx === 0) {
|
||||
const searchInput = document.getElementById('search-input');
|
||||
|
||||
if (searchInput) {
|
||||
// check if focused on the search input
|
||||
if (document.activeElement !== searchInput) {
|
||||
searchInput.focus();
|
||||
selectedIdx = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
selectedIdx = Math.max(selectedIdx - 1, 0);
|
||||
}
|
||||
|
||||
const item = document.querySelector(`[data-arrow-selected="true"]`);
|
||||
item?.scrollIntoView({ block: 'center', inline: 'nearest', behavior: 'instant' });
|
||||
};
|
||||
|
||||
onMount(() => {
|
||||
init();
|
||||
|
||||
document.addEventListener('keydown', onKeyDown);
|
||||
});
|
||||
|
||||
onDestroy(() => {
|
||||
if (searchDebounceTimeout) {
|
||||
clearTimeout(searchDebounceTimeout);
|
||||
}
|
||||
document.removeEventListener('keydown', onKeyDown);
|
||||
});
|
||||
</script>
|
||||
|
||||
<Modal size="md" bind:show>
|
||||
<Modal size="xl" bind:show>
|
||||
<div class="py-2.5 dark:text-gray-300 text-gray-700">
|
||||
<div class="px-3.5 pb-1.5">
|
||||
<SearchInput
|
||||
@@ -116,23 +233,26 @@
|
||||
|
||||
<!-- <hr class="border-gray-100 dark:border-gray-850 my-1" /> -->
|
||||
|
||||
<div class="flex flex-col overflow-y-auto h-80 scrollbar-hidden px-3 pb-1">
|
||||
{#if chatList}
|
||||
{#if chatList.length === 0}
|
||||
<div class="text-xs text-gray-500 dark:text-gray-400 text-center px-5">
|
||||
{$i18n.t('No results found')}
|
||||
</div>
|
||||
{/if}
|
||||
<div class="flex px-3 pb-1">
|
||||
<div
|
||||
class="flex flex-col overflow-y-auto h-96 md:h-[40rem] max-h-full scrollbar-hidden w-full flex-1"
|
||||
>
|
||||
{#if chatList}
|
||||
{#if chatList.length === 0}
|
||||
<div class="text-xs text-gray-500 dark:text-gray-400 text-center px-5">
|
||||
{$i18n.t('No results found')}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{#each chatList as chat, idx (chat.id)}
|
||||
{#if idx === 0 || (idx > 0 && chat.time_range !== chatList[idx - 1].time_range)}
|
||||
<div
|
||||
class="w-full text-xs text-gray-500 dark:text-gray-500 font-medium {idx === 0
|
||||
? ''
|
||||
: 'pt-5'} pb-2 px-2"
|
||||
>
|
||||
{$i18n.t(chat.time_range)}
|
||||
<!-- localisation keys for time_range to be recognized from the i18next parser (so they don't get automatically removed):
|
||||
{#each chatList as chat, idx (chat.id)}
|
||||
{#if idx === 0 || (idx > 0 && chat.time_range !== chatList[idx - 1].time_range)}
|
||||
<div
|
||||
class="w-full text-xs text-gray-500 dark:text-gray-500 font-medium {idx === 0
|
||||
? ''
|
||||
: 'pt-5'} pb-2 px-2"
|
||||
>
|
||||
{$i18n.t(chat.time_range)}
|
||||
<!-- localisation keys for time_range to be recognized from the i18next parser (so they don't get automatically removed):
|
||||
{$i18n.t('Today')}
|
||||
{$i18n.t('Yesterday')}
|
||||
{$i18n.t('Previous 7 days')}
|
||||
@@ -150,56 +270,84 @@
|
||||
{$i18n.t('November')}
|
||||
{$i18n.t('December')}
|
||||
-->
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<a
|
||||
class=" w-full flex justify-between items-center rounded-lg text-sm py-2 px-3 hover:bg-gray-50 dark:hover:bg-gray-850 {selectedIdx ===
|
||||
idx
|
||||
? 'bg-gray-50 dark:bg-gray-850'
|
||||
: ''}"
|
||||
href="/c/{chat.id}"
|
||||
draggable="false"
|
||||
data-arrow-selected={selectedIdx === idx ? 'true' : undefined}
|
||||
on:mouseenter={() => {
|
||||
selectedIdx = idx;
|
||||
}}
|
||||
on:click={() => {
|
||||
show = false;
|
||||
onClose();
|
||||
}}
|
||||
>
|
||||
<div class=" flex-1">
|
||||
<div class="text-ellipsis line-clamp-1 w-full">
|
||||
{chat?.title}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class=" pl-3 shrink-0 text-gray-500 dark:text-gray-400 text-xs">
|
||||
{dayjs(chat?.updated_at * 1000).calendar()}
|
||||
</div>
|
||||
</a>
|
||||
{/each}
|
||||
<a
|
||||
class=" w-full flex justify-between items-center rounded-lg text-sm py-2 px-3 hover:bg-gray-50 dark:hover:bg-gray-850 {selectedIdx ===
|
||||
idx
|
||||
? 'bg-gray-50 dark:bg-gray-850'
|
||||
: ''}"
|
||||
href="/c/{chat.id}"
|
||||
draggable="false"
|
||||
data-arrow-selected={selectedIdx === idx ? 'true' : undefined}
|
||||
on:mouseenter={() => {
|
||||
selectedIdx = idx;
|
||||
}}
|
||||
on:click={() => {
|
||||
show = false;
|
||||
onClose();
|
||||
}}
|
||||
>
|
||||
<div class=" flex-1">
|
||||
<div class="text-ellipsis line-clamp-1 w-full">
|
||||
{chat?.title}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{#if !allChatsLoaded}
|
||||
<Loader
|
||||
on:visible={(e) => {
|
||||
if (!chatListLoading) {
|
||||
loadMoreChats();
|
||||
}
|
||||
}}
|
||||
>
|
||||
<div class="w-full flex justify-center py-1 text-xs animate-pulse items-center gap-2">
|
||||
<Spinner className=" size-4" />
|
||||
<div class=" ">Loading...</div>
|
||||
</div>
|
||||
</Loader>
|
||||
<div class=" pl-3 shrink-0 text-gray-500 dark:text-gray-400 text-xs">
|
||||
{dayjs(chat?.updated_at * 1000).calendar()}
|
||||
</div>
|
||||
</a>
|
||||
{/each}
|
||||
|
||||
{#if !allChatsLoaded}
|
||||
<Loader
|
||||
on:visible={(e) => {
|
||||
if (!chatListLoading) {
|
||||
loadMoreChats();
|
||||
}
|
||||
}}
|
||||
>
|
||||
<div class="w-full flex justify-center py-1 text-xs animate-pulse items-center gap-2">
|
||||
<Spinner className=" size-4" />
|
||||
<div class=" ">Loading...</div>
|
||||
</div>
|
||||
</Loader>
|
||||
{/if}
|
||||
{:else}
|
||||
<div class="w-full h-full flex justify-center items-center">
|
||||
<Spinner className="size-5" />
|
||||
</div>
|
||||
{/if}
|
||||
{:else}
|
||||
<div class="w-full h-full flex justify-center items-center">
|
||||
<Spinner className="size-5" />
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div
|
||||
id="chat-preview"
|
||||
class="hidden md:flex md:flex-1 w-full overflow-y-auto h-96 md:h-[40rem] scrollbar-hidden"
|
||||
>
|
||||
{#if messages === null}
|
||||
<div
|
||||
class="w-full h-full flex justify-center items-center text-gray-500 dark:text-gray-400 text-sm"
|
||||
>
|
||||
{$i18n.t('Select a conversation to preview')}
|
||||
</div>
|
||||
{:else}
|
||||
<div class="w-full h-full flex flex-col">
|
||||
<Messages
|
||||
className="h-full flex pt-4 pb-8 w-full"
|
||||
user={$user}
|
||||
readOnly={true}
|
||||
{selectedModels}
|
||||
bind:history
|
||||
bind:messages
|
||||
autoScroll={true}
|
||||
sendPrompt={() => {}}
|
||||
continueResponse={() => {}}
|
||||
regenerateResponse={() => {}}
|
||||
/>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
socket,
|
||||
config,
|
||||
isApp,
|
||||
models
|
||||
models,
|
||||
selectedFolder
|
||||
} from '$lib/stores';
|
||||
import { onMount, getContext, tick, onDestroy } from 'svelte';
|
||||
|
||||
@@ -57,6 +58,7 @@
|
||||
import Home from '../icons/Home.svelte';
|
||||
import Search from '../icons/Search.svelte';
|
||||
import SearchModal from './SearchModal.svelte';
|
||||
import FolderModal from './Sidebar/Folders/FolderModal.svelte';
|
||||
|
||||
const BREAKPOINT = 768;
|
||||
|
||||
@@ -73,6 +75,7 @@
|
||||
let chatListLoading = false;
|
||||
let allChatsLoaded = false;
|
||||
|
||||
let showCreateFolderModal = false;
|
||||
let folders = {};
|
||||
let newFolderId = null;
|
||||
|
||||
@@ -116,7 +119,7 @@
|
||||
}
|
||||
};
|
||||
|
||||
const createFolder = async (name = 'Untitled') => {
|
||||
const createFolder = async ({ name, data }) => {
|
||||
if (name === '') {
|
||||
toast.error($i18n.t('Folder name cannot be empty.'));
|
||||
return;
|
||||
@@ -147,13 +150,16 @@
|
||||
}
|
||||
};
|
||||
|
||||
const res = await createNewFolder(localStorage.token, name).catch((error) => {
|
||||
const res = await createNewFolder(localStorage.token, {
|
||||
name,
|
||||
data
|
||||
}).catch((error) => {
|
||||
toast.error(`${error}`);
|
||||
return null;
|
||||
});
|
||||
|
||||
if (res) {
|
||||
newFolderId = res.id;
|
||||
// newFolderId = res.id;
|
||||
await initFolders();
|
||||
}
|
||||
};
|
||||
@@ -361,6 +367,10 @@
|
||||
}
|
||||
});
|
||||
|
||||
chats.subscribe((value) => {
|
||||
initFolders();
|
||||
});
|
||||
|
||||
await initChannels();
|
||||
await initChatList();
|
||||
|
||||
@@ -424,6 +434,14 @@
|
||||
}}
|
||||
/>
|
||||
|
||||
<FolderModal
|
||||
bind:show={showCreateFolderModal}
|
||||
onSubmit={async (folder) => {
|
||||
await createFolder(folder);
|
||||
showCreateFolderModal = false;
|
||||
}}
|
||||
/>
|
||||
|
||||
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
||||
|
||||
{#if $showSidebar}
|
||||
@@ -494,6 +512,7 @@
|
||||
draggable="false"
|
||||
on:click={async () => {
|
||||
selectedChatId = null;
|
||||
selectedFolder.set(null);
|
||||
|
||||
if ($user?.role !== 'admin' && $user?.permissions?.chat?.temporary_enforced) {
|
||||
await temporaryChatEnabled.set(true);
|
||||
@@ -726,9 +745,13 @@
|
||||
className="px-2 mt-0.5"
|
||||
name={$i18n.t('Chats')}
|
||||
onAdd={() => {
|
||||
createFolder();
|
||||
showCreateFolderModal = true;
|
||||
}}
|
||||
onAddLabel={$i18n.t('New Folder')}
|
||||
on:change={async (e) => {
|
||||
selectedFolder.set(null);
|
||||
await goto('/');
|
||||
}}
|
||||
on:import={(e) => {
|
||||
importChatHandler(e.detail);
|
||||
}}
|
||||
@@ -874,13 +897,17 @@
|
||||
<Folders
|
||||
{folders}
|
||||
{shiftKey}
|
||||
onDelete={(folderId) => {
|
||||
selectedFolder.set(null);
|
||||
initChatList();
|
||||
}}
|
||||
on:update={() => {
|
||||
initChatList();
|
||||
}}
|
||||
on:import={(e) => {
|
||||
const { folderId, items } = e.detail;
|
||||
importChatHandler(items, false, folderId);
|
||||
}}
|
||||
on:update={async (e) => {
|
||||
initChatList();
|
||||
}}
|
||||
on:change={async () => {
|
||||
initChatList();
|
||||
}}
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
pinnedChats,
|
||||
showSidebar,
|
||||
currentChatPage,
|
||||
tags
|
||||
tags,
|
||||
selectedFolder
|
||||
} from '$lib/stores';
|
||||
|
||||
import ChatMenu from './ChatMenu.svelte';
|
||||
@@ -138,7 +139,10 @@
|
||||
let itemElement;
|
||||
|
||||
let generating = false;
|
||||
|
||||
let ignoreBlur = false;
|
||||
let doubleClicked = false;
|
||||
|
||||
let dragged = false;
|
||||
let x = 0;
|
||||
let y = 0;
|
||||
@@ -180,8 +184,18 @@
|
||||
dragged = false;
|
||||
};
|
||||
|
||||
const onClickOutside = (event) => {
|
||||
if (confirmEdit && !event.target.closest(`#chat-title-input-${id}`)) {
|
||||
confirmEdit = false;
|
||||
ignoreBlur = false;
|
||||
chatTitle = '';
|
||||
}
|
||||
};
|
||||
|
||||
onMount(() => {
|
||||
if (itemElement) {
|
||||
document.addEventListener('click', onClickOutside, true);
|
||||
|
||||
// Event listener for when dragging starts
|
||||
itemElement.addEventListener('dragstart', onDragStart);
|
||||
// Event listener for when dragging occurs (optional)
|
||||
@@ -193,6 +207,8 @@
|
||||
|
||||
onDestroy(() => {
|
||||
if (itemElement) {
|
||||
document.removeEventListener('click', onClickOutside, true);
|
||||
|
||||
itemElement.removeEventListener('dragstart', onDragStart);
|
||||
itemElement.removeEventListener('drag', onDrag);
|
||||
itemElement.removeEventListener('dragend', onDragEnd);
|
||||
@@ -301,7 +317,7 @@
|
||||
<div
|
||||
class=" w-full flex justify-between rounded-lg px-[11px] py-[6px] {id === $chatId ||
|
||||
confirmEdit
|
||||
? 'bg-gray-200 dark:bg-gray-900'
|
||||
? 'bg-gray-100 dark:bg-gray-900'
|
||||
: selected
|
||||
? 'bg-gray-100 dark:bg-gray-950'
|
||||
: 'group-hover:bg-gray-100 dark:group-hover:bg-gray-950'} whitespace-nowrap text-ellipsis relative {generating
|
||||
@@ -313,10 +329,12 @@
|
||||
bind:value={chatTitle}
|
||||
class=" bg-transparent w-full outline-hidden mr-10"
|
||||
placeholder={generating ? $i18n.t('Generating...') : ''}
|
||||
disabled={generating}
|
||||
on:keydown={chatTitleInputKeydownHandler}
|
||||
on:blur={async (e) => {
|
||||
// check if target is generate button
|
||||
if (e.relatedTarget?.id === 'generate-title-button') {
|
||||
if (ignoreBlur) {
|
||||
ignoreBlur = false;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -347,7 +365,7 @@
|
||||
<a
|
||||
class=" w-full flex justify-between rounded-lg px-[11px] py-[6px] {id === $chatId ||
|
||||
confirmEdit
|
||||
? 'bg-gray-200 dark:bg-gray-900'
|
||||
? 'bg-gray-100 dark:bg-gray-900'
|
||||
: selected
|
||||
? 'bg-gray-100 dark:bg-gray-950'
|
||||
: ' group-hover:bg-gray-100 dark:group-hover:bg-gray-950'} whitespace-nowrap text-ellipsis"
|
||||
@@ -355,6 +373,13 @@
|
||||
on:click={() => {
|
||||
dispatch('select');
|
||||
|
||||
if (
|
||||
$selectedFolder &&
|
||||
!($selectedFolder?.items?.chats.map((chat) => chat.id) ?? []).includes(id)
|
||||
) {
|
||||
selectedFolder.set(null); // Reset selected folder if the chat is not in it
|
||||
}
|
||||
|
||||
if ($mobile) {
|
||||
showSidebar.set(false);
|
||||
}
|
||||
@@ -387,7 +412,7 @@
|
||||
<div
|
||||
class="
|
||||
{id === $chatId || confirmEdit
|
||||
? 'from-gray-200 dark:from-gray-900'
|
||||
? 'from-gray-100 dark:from-gray-900'
|
||||
: selected
|
||||
? 'from-gray-100 dark:from-gray-950'
|
||||
: 'invisible group-hover:visible from-gray-100 dark:from-gray-950'}
|
||||
@@ -409,8 +434,12 @@
|
||||
>
|
||||
<Tooltip content={$i18n.t('Generate')}>
|
||||
<button
|
||||
class=" self-center dark:hover:text-white transition"
|
||||
class=" self-center dark:hover:text-white transition disabled:cursor-not-allowed"
|
||||
id="generate-title-button"
|
||||
disabled={generating}
|
||||
on:mouseenter={() => {
|
||||
ignoreBlur = true;
|
||||
}}
|
||||
on:click={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
export let folders = {};
|
||||
export let shiftKey = false;
|
||||
|
||||
export let onDelete = (folderId) => {};
|
||||
|
||||
let folderList = [];
|
||||
// Get the list of folders that have no parent, sorted by name alphabetically
|
||||
$: folderList = Object.keys(folders)
|
||||
@@ -24,6 +26,7 @@
|
||||
{folders}
|
||||
{folderId}
|
||||
{shiftKey}
|
||||
{onDelete}
|
||||
on:import={(e) => {
|
||||
dispatch('import', e.detail);
|
||||
}}
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
||||
import Download from '$lib/components/icons/Download.svelte';
|
||||
|
||||
export let align: 'start' | 'end' = 'start';
|
||||
export let onEdit = () => {};
|
||||
export let onExport = () => {};
|
||||
export let onDelete = () => {};
|
||||
|
||||
let show = false;
|
||||
</script>
|
||||
|
||||
@@ -32,23 +37,23 @@
|
||||
class="w-full max-w-[170px] rounded-lg px-1 py-1.5 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-lg"
|
||||
sideOffset={-2}
|
||||
side="bottom"
|
||||
align="start"
|
||||
{align}
|
||||
transition={flyAndScale}
|
||||
>
|
||||
<DropdownMenu.Item
|
||||
class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
|
||||
on:click={() => {
|
||||
dispatch('rename');
|
||||
onEdit();
|
||||
}}
|
||||
>
|
||||
<Pencil strokeWidth="2" />
|
||||
<div class="flex items-center">{$i18n.t('Rename')}</div>
|
||||
<div class="flex items-center">{$i18n.t('Edit')}</div>
|
||||
</DropdownMenu.Item>
|
||||
|
||||
<DropdownMenu.Item
|
||||
class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
|
||||
on:click={() => {
|
||||
dispatch('export');
|
||||
onExport();
|
||||
}}
|
||||
>
|
||||
<Download strokeWidth="2" />
|
||||
@@ -59,7 +64,7 @@
|
||||
<DropdownMenu.Item
|
||||
class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
|
||||
on:click={() => {
|
||||
dispatch('delete');
|
||||
onDelete();
|
||||
}}
|
||||
>
|
||||
<GarbageBin strokeWidth="2" />
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
<script lang="ts">
|
||||
import { getContext, createEventDispatcher, onMount } from 'svelte';
|
||||
|
||||
import Spinner from '$lib/components/common/Spinner.svelte';
|
||||
import Modal from '$lib/components/common/Modal.svelte';
|
||||
import XMark from '$lib/components/icons/XMark.svelte';
|
||||
|
||||
import { toast } from 'svelte-sonner';
|
||||
import { page } from '$app/stores';
|
||||
import { goto } from '$app/navigation';
|
||||
import Textarea from '$lib/components/common/Textarea.svelte';
|
||||
import Knowledge from '$lib/components/workspace/Models/Knowledge.svelte';
|
||||
import { user } from '$lib/stores';
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
export let show = false;
|
||||
export let onSubmit: Function = (e) => {};
|
||||
|
||||
export let edit = false;
|
||||
|
||||
export let folder = null;
|
||||
|
||||
let name = '';
|
||||
let data = {
|
||||
system_prompt: '',
|
||||
files: []
|
||||
};
|
||||
|
||||
let loading = false;
|
||||
|
||||
const submitHandler = async () => {
|
||||
loading = true;
|
||||
await onSubmit({
|
||||
name,
|
||||
data
|
||||
});
|
||||
show = false;
|
||||
loading = false;
|
||||
};
|
||||
|
||||
const init = () => {
|
||||
name = folder.name;
|
||||
data = folder.data || {
|
||||
system_prompt: '',
|
||||
files: []
|
||||
};
|
||||
};
|
||||
|
||||
$: if (folder) {
|
||||
init();
|
||||
}
|
||||
|
||||
$: if (!show && !edit) {
|
||||
name = '';
|
||||
data = {
|
||||
system_prompt: '',
|
||||
files: []
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
<Modal size="md" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-1">
|
||||
<div class=" text-lg font-medium self-center">
|
||||
{#if edit}
|
||||
{$i18n.t('Edit Folder')}
|
||||
{:else}
|
||||
{$i18n.t('Create Folder')}
|
||||
{/if}
|
||||
</div>
|
||||
<button
|
||||
class="self-center"
|
||||
on:click={() => {
|
||||
show = false;
|
||||
}}
|
||||
>
|
||||
<XMark className={'size-5'} />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 dark:text-gray-200">
|
||||
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
|
||||
<form
|
||||
class="flex flex-col w-full"
|
||||
on:submit|preventDefault={() => {
|
||||
submitHandler();
|
||||
}}
|
||||
>
|
||||
<div class="flex flex-col w-full mt-1">
|
||||
<div class=" mb-1 text-xs text-gray-500">{$i18n.t('Folder Name')}</div>
|
||||
|
||||
<div class="flex-1">
|
||||
<input
|
||||
class="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
|
||||
type="text"
|
||||
bind:value={name}
|
||||
placeholder={$i18n.t('Enter folder name')}
|
||||
autocomplete="off"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class=" border-gray-50 dark:border-gray-850 my-2.5 w-full" />
|
||||
|
||||
{#if $user?.role === 'admin' || ($user?.permissions.chat?.system_prompt ?? true)}
|
||||
<div class="my-1">
|
||||
<div class="mb-2 text-xs text-gray-500">{$i18n.t('System Prompt')}</div>
|
||||
<div>
|
||||
<Textarea
|
||||
className=" text-sm w-full bg-transparent outline-hidden "
|
||||
placeholder={`Write your model system prompt content here\ne.g.) You are Mario from Super Mario Bros, acting as an assistant.`}
|
||||
maxSize={200}
|
||||
bind:value={data.system_prompt}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="my-2">
|
||||
<Knowledge bind:selectedItems={data.files}>
|
||||
<div slot="label">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" mb-2 text-xs text-gray-500">
|
||||
{$i18n.t('Knowledge')}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Knowledge>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium gap-1.5">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-950 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
disabled={loading}
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
{#if loading}
|
||||
<div class="ml-2 self-center">
|
||||
<Spinner />
|
||||
</div>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
@@ -8,6 +8,23 @@
|
||||
import fileSaver from 'file-saver';
|
||||
const { saveAs } = fileSaver;
|
||||
|
||||
import { toast } from 'svelte-sonner';
|
||||
|
||||
import { chatId, selectedFolder } from '$lib/stores';
|
||||
|
||||
import {
|
||||
deleteFolderById,
|
||||
updateFolderIsExpandedById,
|
||||
updateFolderById,
|
||||
updateFolderParentIdById
|
||||
} from '$lib/apis/folders';
|
||||
import {
|
||||
getChatById,
|
||||
getChatsByFolderId,
|
||||
importChat,
|
||||
updateChatFolderIdById
|
||||
} from '$lib/apis/chats';
|
||||
|
||||
import ChevronDown from '../../icons/ChevronDown.svelte';
|
||||
import ChevronRight from '../../icons/ChevronRight.svelte';
|
||||
import Collapsible from '../../common/Collapsible.svelte';
|
||||
@@ -15,22 +32,12 @@
|
||||
|
||||
import FolderOpen from '$lib/components/icons/FolderOpen.svelte';
|
||||
import EllipsisHorizontal from '$lib/components/icons/EllipsisHorizontal.svelte';
|
||||
import {
|
||||
deleteFolderById,
|
||||
updateFolderIsExpandedById,
|
||||
updateFolderById,
|
||||
updateFolderParentIdById
|
||||
} from '$lib/apis/folders';
|
||||
import { toast } from 'svelte-sonner';
|
||||
import {
|
||||
getChatById,
|
||||
getChatsByFolderId,
|
||||
importChat,
|
||||
updateChatFolderIdById
|
||||
} from '$lib/apis/chats';
|
||||
|
||||
import ChatItem from './ChatItem.svelte';
|
||||
import FolderMenu from './Folders/FolderMenu.svelte';
|
||||
import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
|
||||
import FolderModal from './Folders/FolderModal.svelte';
|
||||
import { goto } from '$app/navigation';
|
||||
|
||||
export let open = false;
|
||||
|
||||
@@ -42,8 +49,11 @@
|
||||
|
||||
export let parentDragged = false;
|
||||
|
||||
export let onDelete = (e) => {};
|
||||
|
||||
let folderElement;
|
||||
|
||||
let showFolderModal = false;
|
||||
let edit = false;
|
||||
|
||||
let draggedOver = false;
|
||||
@@ -232,7 +242,7 @@
|
||||
delete folders[folderId].new;
|
||||
|
||||
await tick();
|
||||
editHandler();
|
||||
renameHandler();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -258,27 +268,25 @@
|
||||
|
||||
if (res) {
|
||||
toast.success($i18n.t('Folder deleted successfully'));
|
||||
dispatch('update');
|
||||
onDelete(folderId);
|
||||
}
|
||||
};
|
||||
|
||||
const nameUpdateHandler = async () => {
|
||||
const updateHandler = async ({ name, data }) => {
|
||||
if (name === '') {
|
||||
toast.error($i18n.t('Folder name cannot be empty.'));
|
||||
return;
|
||||
}
|
||||
|
||||
if (name === folders[folderId].name) {
|
||||
edit = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const currentName = folders[folderId].name;
|
||||
|
||||
name = name.trim();
|
||||
folders[folderId].name = name;
|
||||
|
||||
const res = await updateFolderById(localStorage.token, folderId, { name }).catch((error) => {
|
||||
const res = await updateFolderById(localStorage.token, folderId, {
|
||||
name,
|
||||
...(data ? { data } : {})
|
||||
}).catch((error) => {
|
||||
toast.error(`${error}`);
|
||||
|
||||
folders[folderId].name = currentName;
|
||||
@@ -287,7 +295,17 @@
|
||||
|
||||
if (res) {
|
||||
folders[folderId].name = name;
|
||||
toast.success($i18n.t('Folder name updated successfully'));
|
||||
if (data) {
|
||||
folders[folderId].data = data;
|
||||
}
|
||||
|
||||
// toast.success($i18n.t('Folder name updated successfully'));
|
||||
toast.success($i18n.t('Folder updated successfully'));
|
||||
|
||||
if ($selectedFolder?.id === folderId) {
|
||||
selectedFolder.set(folders[folderId]);
|
||||
}
|
||||
|
||||
dispatch('update');
|
||||
}
|
||||
};
|
||||
@@ -312,7 +330,7 @@
|
||||
|
||||
$: isExpandedUpdateDebounceHandler(open);
|
||||
|
||||
const editHandler = async () => {
|
||||
const renameHandler = async () => {
|
||||
console.log('Edit');
|
||||
await tick();
|
||||
name = folders[folderId].name;
|
||||
@@ -360,6 +378,13 @@
|
||||
</div>
|
||||
</DeleteConfirmDialog>
|
||||
|
||||
<FolderModal
|
||||
bind:show={showFolderModal}
|
||||
edit={true}
|
||||
folder={folders[folderId]}
|
||||
onSubmit={updateHandler}
|
||||
/>
|
||||
|
||||
{#if dragged && x && y}
|
||||
<DragGhost {x} {y}>
|
||||
<div class=" bg-black/80 backdrop-blur-2xl px-2 py-1 rounded-lg w-fit max-w-40">
|
||||
@@ -394,9 +419,17 @@
|
||||
<div class="w-full group">
|
||||
<button
|
||||
id="folder-{folderId}-button"
|
||||
class="relative w-full py-1.5 px-2 rounded-md flex items-center gap-1.5 text-xs text-gray-500 dark:text-gray-500 font-medium hover:bg-gray-100 dark:hover:bg-gray-900 transition"
|
||||
class="relative w-full py-1.5 px-2 rounded-md flex items-center gap-1.5 text-xs text-gray-500 dark:text-gray-500 font-medium hover:bg-gray-100 dark:hover:bg-gray-900 transition {$selectedFolder?.id ===
|
||||
folderId
|
||||
? 'bg-gray-100 dark:bg-gray-900'
|
||||
: ''}"
|
||||
on:dblclick={() => {
|
||||
editHandler();
|
||||
renameHandler();
|
||||
}}
|
||||
on:click={async (e) => {
|
||||
await goto('/');
|
||||
|
||||
selectedFolder.set(folders[folderId]);
|
||||
}}
|
||||
>
|
||||
<div class="text-gray-300 dark:text-gray-600">
|
||||
@@ -417,7 +450,7 @@
|
||||
e.target.select();
|
||||
}}
|
||||
on:blur={() => {
|
||||
nameUpdateHandler();
|
||||
updateHandler({ name });
|
||||
edit = false;
|
||||
}}
|
||||
on:click={(e) => {
|
||||
@@ -430,7 +463,7 @@
|
||||
}}
|
||||
on:keydown={(e) => {
|
||||
if (e.key === 'Enter') {
|
||||
nameUpdateHandler();
|
||||
updateHandler({ name });
|
||||
edit = false;
|
||||
}
|
||||
}}
|
||||
@@ -446,18 +479,16 @@
|
||||
on:pointerup={(e) => {
|
||||
e.stopPropagation();
|
||||
}}
|
||||
on:click={(e) => e.stopPropagation()}
|
||||
>
|
||||
<FolderMenu
|
||||
on:rename={() => {
|
||||
// Requires a timeout to prevent the click event from closing the dropdown
|
||||
setTimeout(() => {
|
||||
editHandler();
|
||||
}, 200);
|
||||
onEdit={() => {
|
||||
showFolderModal = true;
|
||||
}}
|
||||
on:delete={() => {
|
||||
onDelete={() => {
|
||||
showDeleteConfirm = true;
|
||||
}}
|
||||
on:export={() => {
|
||||
onExport={() => {
|
||||
exportHandler();
|
||||
}}
|
||||
>
|
||||
@@ -490,6 +521,7 @@
|
||||
folderId={childFolder.id}
|
||||
{shiftKey}
|
||||
parentDragged={dragged}
|
||||
{onDelete}
|
||||
on:import={(e) => {
|
||||
dispatch('import', e.detail);
|
||||
}}
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
</div>
|
||||
|
||||
<input
|
||||
id="search-input"
|
||||
class="w-full rounded-r-xl py-1.5 pl-2.5 text-sm bg-transparent dark:text-gray-300 outline-hidden"
|
||||
placeholder={placeholder ? placeholder : $i18n.t('Search')}
|
||||
bind:value
|
||||
@@ -106,6 +107,9 @@
|
||||
focused = true;
|
||||
initTags();
|
||||
}}
|
||||
on:blur={() => {
|
||||
focused = false;
|
||||
}}
|
||||
on:keydown={(e) => {
|
||||
if (e.key === 'Enter') {
|
||||
if (filteredTags.length > 0) {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
import { getUsage } from '$lib/apis';
|
||||
import { userSignOut } from '$lib/apis/auths';
|
||||
|
||||
import { showSettings, mobile, showSidebar, user } from '$lib/stores';
|
||||
import { showSettings, mobile, showSidebar, showShortcuts, user } from '$lib/stores';
|
||||
|
||||
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
||||
import ArchiveBox from '$lib/components/icons/ArchiveBox.svelte';
|
||||
@@ -29,8 +29,6 @@
|
||||
export let help = false;
|
||||
export let className = 'max-w-[240px]';
|
||||
|
||||
let showShortcuts = false;
|
||||
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
let usage = null;
|
||||
@@ -51,7 +49,7 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<ShortcutsModal bind:show={showShortcuts} />
|
||||
<ShortcutsModal bind:show={$showShortcuts} />
|
||||
|
||||
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
||||
<DropdownMenu.Root
|
||||
@@ -173,7 +171,7 @@
|
||||
class="flex gap-2 items-center py-1.5 px-3 text-sm select-none w-full cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md transition"
|
||||
id="chat-share-button"
|
||||
on:click={() => {
|
||||
showShortcuts = !showShortcuts;
|
||||
showShortcuts.set(!$showShortcuts);
|
||||
show = false;
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -34,10 +34,10 @@
|
||||
import { config, models, settings, showSidebar, socket, user, WEBUI_NAME } from '$lib/stores';
|
||||
|
||||
import NotePanel from '$lib/components/notes/NotePanel.svelte';
|
||||
import MenuLines from '../icons/MenuLines.svelte';
|
||||
import ChatBubbleOval from '../icons/ChatBubbleOval.svelte';
|
||||
import Settings from './NoteEditor/Settings.svelte';
|
||||
|
||||
import Controls from './NoteEditor/Controls.svelte';
|
||||
import Chat from './NoteEditor/Chat.svelte';
|
||||
|
||||
import AccessControlModal from '$lib/components/workspace/common/AccessControlModal.svelte';
|
||||
|
||||
async function loadLocale(locales) {
|
||||
@@ -61,6 +61,8 @@
|
||||
import MicSolid from '../icons/MicSolid.svelte';
|
||||
import VoiceRecording from '../chat/MessageInput/VoiceRecording.svelte';
|
||||
import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
|
||||
import MenuLines from '../icons/MenuLines.svelte';
|
||||
import ChatBubbleOval from '../icons/ChatBubbleOval.svelte';
|
||||
|
||||
import Calendar from '../icons/Calendar.svelte';
|
||||
import Users from '../icons/Users.svelte';
|
||||
@@ -81,6 +83,7 @@
|
||||
import ArrowRight from '../icons/ArrowRight.svelte';
|
||||
import Cog6 from '../icons/Cog6.svelte';
|
||||
import AiMenu from './AIMenu.svelte';
|
||||
import AdjustmentsHorizontalOutline from '../icons/AdjustmentsHorizontalOutline.svelte';
|
||||
|
||||
export let id: null | string = null;
|
||||
|
||||
@@ -118,9 +121,12 @@
|
||||
let showPanel = false;
|
||||
let selectedPanel = 'chat';
|
||||
|
||||
let selectedContent = null;
|
||||
|
||||
let showDeleteConfirm = false;
|
||||
let showAccessControlModal = false;
|
||||
|
||||
let ignoreBlur = false;
|
||||
let titleInputFocused = false;
|
||||
let titleGenerating = false;
|
||||
|
||||
@@ -382,6 +388,13 @@ ${content}
|
||||
|
||||
files = [...files, fileItem];
|
||||
|
||||
// open the settings panel if it is not open
|
||||
selectedPanel = 'settings';
|
||||
|
||||
if (!showPanel) {
|
||||
showPanel = true;
|
||||
}
|
||||
|
||||
try {
|
||||
// If the file is an audio file, provide the language for STT.
|
||||
let metadata = null;
|
||||
@@ -432,95 +445,115 @@ ${content}
|
||||
note.data.files = null;
|
||||
}
|
||||
|
||||
editor.storage.files = files;
|
||||
|
||||
changeDebounceHandler();
|
||||
|
||||
return fileItem;
|
||||
};
|
||||
|
||||
const inputFilesHandler = async (inputFiles) => {
|
||||
console.log('Input files handler called with:', inputFiles);
|
||||
inputFiles.forEach(async (file) => {
|
||||
console.log('Processing file:', {
|
||||
name: file.name,
|
||||
type: file.type,
|
||||
size: file.size,
|
||||
extension: file.name.split('.').at(-1)
|
||||
const compressImageHandler = async (imageUrl, settings = {}, config = {}) => {
|
||||
// Quick shortcut so we don’t do unnecessary work.
|
||||
const settingsCompression = settings?.imageCompression ?? false;
|
||||
const configWidth = config?.file?.image_compression?.width ?? null;
|
||||
const configHeight = config?.file?.image_compression?.height ?? null;
|
||||
|
||||
// If neither settings nor config wants compression, return original URL.
|
||||
if (!settingsCompression && !configWidth && !configHeight) {
|
||||
return imageUrl;
|
||||
}
|
||||
|
||||
// Default to null (no compression unless set)
|
||||
let width = null;
|
||||
let height = null;
|
||||
|
||||
// If user/settings want compression, pick their preferred size.
|
||||
if (settingsCompression) {
|
||||
width = settings?.imageCompressionSize?.width ?? null;
|
||||
height = settings?.imageCompressionSize?.height ?? null;
|
||||
}
|
||||
|
||||
// Apply config limits as an upper bound if any
|
||||
if (configWidth && (width === null || width > configWidth)) {
|
||||
width = configWidth;
|
||||
}
|
||||
if (configHeight && (height === null || height > configHeight)) {
|
||||
height = configHeight;
|
||||
}
|
||||
|
||||
// Do the compression if required
|
||||
if (width || height) {
|
||||
return await compressImage(imageUrl, width, height);
|
||||
}
|
||||
return imageUrl;
|
||||
};
|
||||
|
||||
const inputFileHandler = async (file) => {
|
||||
console.log('Processing file:', {
|
||||
name: file.name,
|
||||
type: file.type,
|
||||
size: file.size,
|
||||
extension: file.name.split('.').at(-1)
|
||||
});
|
||||
|
||||
if (
|
||||
($config?.file?.max_size ?? null) !== null &&
|
||||
file.size > ($config?.file?.max_size ?? 0) * 1024 * 1024
|
||||
) {
|
||||
console.log('File exceeds max size limit:', {
|
||||
fileSize: file.size,
|
||||
maxSize: ($config?.file?.max_size ?? 0) * 1024 * 1024
|
||||
});
|
||||
toast.error(
|
||||
$i18n.t(`File size should not exceed {{maxSize}} MB.`, {
|
||||
maxSize: $config?.file?.max_size
|
||||
})
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
($config?.file?.max_size ?? null) !== null &&
|
||||
file.size > ($config?.file?.max_size ?? 0) * 1024 * 1024
|
||||
) {
|
||||
console.log('File exceeds max size limit:', {
|
||||
fileSize: file.size,
|
||||
maxSize: ($config?.file?.max_size ?? 0) * 1024 * 1024
|
||||
});
|
||||
toast.error(
|
||||
$i18n.t(`File size should not exceed {{maxSize}} MB.`, {
|
||||
maxSize: $config?.file?.max_size
|
||||
})
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (file['type'].startsWith('image/')) {
|
||||
const compressImageHandler = async (imageUrl, settings = {}, config = {}) => {
|
||||
// Quick shortcut so we don’t do unnecessary work.
|
||||
const settingsCompression = settings?.imageCompression ?? false;
|
||||
const configWidth = config?.file?.image_compression?.width ?? null;
|
||||
const configHeight = config?.file?.image_compression?.height ?? null;
|
||||
|
||||
// If neither settings nor config wants compression, return original URL.
|
||||
if (!settingsCompression && !configWidth && !configHeight) {
|
||||
return imageUrl;
|
||||
}
|
||||
|
||||
// Default to null (no compression unless set)
|
||||
let width = null;
|
||||
let height = null;
|
||||
|
||||
// If user/settings want compression, pick their preferred size.
|
||||
if (settingsCompression) {
|
||||
width = settings?.imageCompressionSize?.width ?? null;
|
||||
height = settings?.imageCompressionSize?.height ?? null;
|
||||
}
|
||||
|
||||
// Apply config limits as an upper bound if any
|
||||
if (configWidth && (width === null || width > configWidth)) {
|
||||
width = configWidth;
|
||||
}
|
||||
if (configHeight && (height === null || height > configHeight)) {
|
||||
height = configHeight;
|
||||
}
|
||||
|
||||
// Do the compression if required
|
||||
if (width || height) {
|
||||
return await compressImage(imageUrl, width, height);
|
||||
}
|
||||
return imageUrl;
|
||||
};
|
||||
|
||||
if (file['type'].startsWith('image/')) {
|
||||
const uploadImagePromise = new Promise(async (resolve, reject) => {
|
||||
let reader = new FileReader();
|
||||
reader.onload = async (event) => {
|
||||
let imageUrl = event.target.result;
|
||||
try {
|
||||
let imageUrl = event.target.result;
|
||||
imageUrl = await compressImageHandler(imageUrl, $settings, $config);
|
||||
|
||||
imageUrl = await compressImageHandler(imageUrl, $settings, $config);
|
||||
|
||||
files = [
|
||||
...files,
|
||||
{
|
||||
const fileId = uuidv4();
|
||||
const fileItem = {
|
||||
id: fileId,
|
||||
type: 'image',
|
||||
url: `${imageUrl}`
|
||||
}
|
||||
];
|
||||
note.data.files = files;
|
||||
};
|
||||
files = [...files, fileItem];
|
||||
note.data.files = files;
|
||||
editor.storage.files = files;
|
||||
|
||||
changeDebounceHandler();
|
||||
resolve(fileItem);
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
};
|
||||
|
||||
reader.readAsDataURL(
|
||||
file['type'] === 'image/heic'
|
||||
? await heic2any({ blob: file, toType: 'image/jpeg' })
|
||||
: file
|
||||
);
|
||||
} else {
|
||||
uploadFileHandler(file);
|
||||
}
|
||||
});
|
||||
|
||||
return await uploadImagePromise;
|
||||
} else {
|
||||
return await uploadFileHandler(file);
|
||||
}
|
||||
};
|
||||
|
||||
const inputFilesHandler = async (inputFiles) => {
|
||||
console.log('Input files handler called with:', inputFiles);
|
||||
inputFiles.forEach(async (file) => {
|
||||
await inputFileHandler(file);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -725,9 +758,25 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
const onDragOver = (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
// Check if a file is being dragged.
|
||||
if (e.dataTransfer?.types?.includes('Files')) {
|
||||
dragged = true;
|
||||
if (
|
||||
e.dataTransfer?.types?.includes('text/plain') ||
|
||||
e.dataTransfer?.types?.includes('text/html')
|
||||
) {
|
||||
dragged = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the dragged item is a file or image
|
||||
if (e.dataTransfer?.types?.includes('Files') && e.dataTransfer?.items) {
|
||||
const items = Array.from(e.dataTransfer.items);
|
||||
const hasFiles = items.some((item) => item.kind === 'file');
|
||||
const hasImages = items.some((item) => item.type.startsWith('image/'));
|
||||
|
||||
if (hasFiles && !hasImages) {
|
||||
dragged = true;
|
||||
} else {
|
||||
dragged = false;
|
||||
}
|
||||
} else {
|
||||
dragged = false;
|
||||
}
|
||||
@@ -757,8 +806,47 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
inputElement?.insertContent(content);
|
||||
};
|
||||
|
||||
const noteEventHandler = async (_note) => {
|
||||
console.log('noteEventHandler', _note);
|
||||
if (_note.id !== id) return;
|
||||
|
||||
if (_note.access_control && _note.access_control !== note.access_control) {
|
||||
note.access_control = _note.access_control;
|
||||
}
|
||||
|
||||
if (_note.data && _note.data.files) {
|
||||
files = _note.data.files;
|
||||
note.data.files = files;
|
||||
}
|
||||
|
||||
if (_note.title && _note.title) {
|
||||
note.title = _note.title;
|
||||
}
|
||||
|
||||
editor.storage.files = files;
|
||||
await tick();
|
||||
|
||||
for (const file of files) {
|
||||
if (file.type === 'image') {
|
||||
const e = new CustomEvent('data', { files: files });
|
||||
|
||||
const img = document.getElementById(`image:${file.id}`);
|
||||
if (img) {
|
||||
img.dispatchEvent(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
onMount(async () => {
|
||||
await tick();
|
||||
$socket?.emit('join-note', {
|
||||
note_id: id,
|
||||
auth: {
|
||||
token: localStorage.token
|
||||
}
|
||||
});
|
||||
$socket?.on('note-events', noteEventHandler);
|
||||
|
||||
if ($settings?.models) {
|
||||
selectedModelId = $settings?.models[0];
|
||||
@@ -778,21 +866,27 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
}
|
||||
}
|
||||
|
||||
if (!selectedModelId) {
|
||||
selectedModelId = $models.at(0)?.id || '';
|
||||
}
|
||||
|
||||
const dropzoneElement = document.getElementById('note-editor');
|
||||
|
||||
dropzoneElement?.addEventListener('dragover', onDragOver);
|
||||
dropzoneElement?.addEventListener('drop', onDrop);
|
||||
dropzoneElement?.addEventListener('dragleave', onDragLeave);
|
||||
// dropzoneElement?.addEventListener('dragover', onDragOver);
|
||||
// dropzoneElement?.addEventListener('drop', onDrop);
|
||||
// dropzoneElement?.addEventListener('dragleave', onDragLeave);
|
||||
});
|
||||
|
||||
onDestroy(() => {
|
||||
console.log('destroy');
|
||||
$socket?.off('note-events', noteEventHandler);
|
||||
|
||||
const dropzoneElement = document.getElementById('note-editor');
|
||||
|
||||
if (dropzoneElement) {
|
||||
dropzoneElement?.removeEventListener('dragover', onDragOver);
|
||||
dropzoneElement?.removeEventListener('drop', onDrop);
|
||||
dropzoneElement?.removeEventListener('dragleave', onDragLeave);
|
||||
// dropzoneElement?.removeEventListener('dragover', onDragOver);
|
||||
// dropzoneElement?.removeEventListener('drop', onDrop);
|
||||
// dropzoneElement?.removeEventListener('dragleave', onDragLeave);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -877,7 +971,8 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
}}
|
||||
on:blur={(e) => {
|
||||
// check if target is generate button
|
||||
if (e.relatedTarget?.id === 'generate-title-button') {
|
||||
if (ignoreBlur) {
|
||||
ignoreBlur = false;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -894,6 +989,11 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
<button
|
||||
class=" self-center dark:hover:text-white transition"
|
||||
id="generate-title-button"
|
||||
disabled={(note?.user_id !== $user?.id && $user?.role !== 'admin') ||
|
||||
titleGenerating}
|
||||
on:mouseenter={() => {
|
||||
ignoreBlur = true;
|
||||
}}
|
||||
on:click={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopImmediatePropagation();
|
||||
@@ -956,7 +1056,7 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
</button>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip placement="top" content={$i18n.t('Settings')} className="cursor-pointer">
|
||||
<Tooltip placement="top" content={$i18n.t('Controls')} className="cursor-pointer">
|
||||
<button
|
||||
class="p-1.5 bg-transparent hover:bg-white/5 transition rounded-lg"
|
||||
on:click={() => {
|
||||
@@ -970,7 +1070,7 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Cog6 />
|
||||
<AdjustmentsHorizontalOutline />
|
||||
</button>
|
||||
</Tooltip>
|
||||
|
||||
@@ -989,7 +1089,11 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
}
|
||||
}}
|
||||
onCopyToClipboard={async () => {
|
||||
const res = await copyToClipboard(note.data.content.md).catch((error) => {
|
||||
const res = await copyToClipboard(
|
||||
note.data.content.md,
|
||||
note.data.content.html,
|
||||
true
|
||||
).catch((error) => {
|
||||
toast.error(`${error}`);
|
||||
return null;
|
||||
});
|
||||
@@ -1091,43 +1195,10 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
></div>
|
||||
{/if}
|
||||
|
||||
{#if files && files.length > 0}
|
||||
<div class="mb-2.5 w-full flex gap-1 flex-wrap z-40">
|
||||
{#each files as file, fileIdx}
|
||||
<div class="w-fit">
|
||||
{#if file.type === 'image'}
|
||||
<Image
|
||||
src={file.url}
|
||||
imageClassName=" max-h-96 rounded-lg"
|
||||
dismissible={true}
|
||||
onDismiss={() => {
|
||||
files = files.filter((item, idx) => idx !== fileIdx);
|
||||
note.data.files = files.length > 0 ? files : null;
|
||||
}}
|
||||
/>
|
||||
{:else}
|
||||
<FileItem
|
||||
item={file}
|
||||
dismissible={true}
|
||||
url={file.url}
|
||||
name={file.name}
|
||||
type={file.type}
|
||||
size={file?.size}
|
||||
loading={file.status === 'uploading'}
|
||||
on:dismiss={() => {
|
||||
files = files.filter((item) => item?.id !== file.id);
|
||||
note.data.files = files.length > 0 ? files : null;
|
||||
}}
|
||||
/>
|
||||
{/if}
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<RichTextInput
|
||||
bind:this={inputElement}
|
||||
bind:editor
|
||||
id={`note-${note.id}`}
|
||||
className="input-prose-sm px-0.5"
|
||||
json={true}
|
||||
bind:value={note.data.content.json}
|
||||
@@ -1137,8 +1208,24 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
socket={$socket}
|
||||
user={$user}
|
||||
link={true}
|
||||
image={true}
|
||||
{files}
|
||||
placeholder={$i18n.t('Write something...')}
|
||||
editable={versionIdx === null && !editing}
|
||||
onSelectionUpdate={({ editor }) => {
|
||||
const { from, to } = editor.state.selection;
|
||||
const selectedText = editor.state.doc.textBetween(from, to, ' ');
|
||||
|
||||
if (selectedText.length === 0) {
|
||||
selectedContent = null;
|
||||
} else {
|
||||
selectedContent = {
|
||||
text: selectedText,
|
||||
from: from,
|
||||
to: to
|
||||
};
|
||||
}
|
||||
}}
|
||||
onChange={(content) => {
|
||||
note.data.content.html = content.html;
|
||||
note.data.content.md = content.md;
|
||||
@@ -1148,6 +1235,62 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
charCount = editor.storage.characterCount.characters();
|
||||
}
|
||||
}}
|
||||
fileHandler={true}
|
||||
onFileDrop={(currentEditor, files, pos) => {
|
||||
files.forEach(async (file) => {
|
||||
const fileItem = await inputFileHandler(file).catch((error) => {
|
||||
return null;
|
||||
});
|
||||
|
||||
if (fileItem.type === 'image') {
|
||||
// If the file is an image, insert it directly
|
||||
currentEditor
|
||||
.chain()
|
||||
.insertContentAt(pos, {
|
||||
type: 'image',
|
||||
attrs: {
|
||||
src: `data://${fileItem.id}`
|
||||
}
|
||||
})
|
||||
.focus()
|
||||
.run();
|
||||
}
|
||||
});
|
||||
}}
|
||||
onFilePaste={() => {}}
|
||||
on:paste={async (e) => {
|
||||
e = e.detail.event || e;
|
||||
const clipboardData = e.clipboardData || window.clipboardData;
|
||||
console.log('Clipboard data:', clipboardData);
|
||||
|
||||
if (clipboardData && clipboardData.items) {
|
||||
console.log('Clipboard data items:', clipboardData.items);
|
||||
for (const item of clipboardData.items) {
|
||||
console.log('Clipboard item:', item);
|
||||
if (item.type.indexOf('image') !== -1) {
|
||||
const blob = item.getAsFile();
|
||||
const fileItem = await inputFileHandler(blob);
|
||||
|
||||
if (editor) {
|
||||
editor
|
||||
?.chain()
|
||||
.insertContentAt(editor.state.selection.$anchor.pos, {
|
||||
type: 'image',
|
||||
attrs: {
|
||||
src: `data://${fileItem.id}` // Use data URI for the image
|
||||
}
|
||||
})
|
||||
.focus()
|
||||
.run();
|
||||
}
|
||||
} else if (item?.kind === 'file') {
|
||||
const file = item.getAsFile();
|
||||
await inputFileHandler(file);
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1282,6 +1425,9 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
bind:editing
|
||||
bind:streaming
|
||||
bind:stopResponseFlag
|
||||
{editor}
|
||||
{inputElement}
|
||||
{selectedContent}
|
||||
{files}
|
||||
onInsert={insertHandler}
|
||||
onStop={stopResponseHandler}
|
||||
@@ -1292,7 +1438,14 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
||||
scrollToBottomHandler={scrollToBottom}
|
||||
/>
|
||||
{:else if selectedPanel === 'settings'}
|
||||
<Settings bind:show={showPanel} bind:selectedModelId />
|
||||
<Controls
|
||||
bind:show={showPanel}
|
||||
bind:selectedModelId
|
||||
bind:files
|
||||
onUpdate={() => {
|
||||
changeDebounceHandler();
|
||||
}}
|
||||
/>
|
||||
{/if}
|
||||
</NotePanel>
|
||||
</PaneGroup>
|
||||
|
||||
@@ -56,11 +56,14 @@
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
export let editor = null;
|
||||
|
||||
export let editing = false;
|
||||
export let streaming = false;
|
||||
export let stopResponseFlag = false;
|
||||
|
||||
export let note = null;
|
||||
export let selectedContent = null;
|
||||
|
||||
export let files = [];
|
||||
export let messages = [];
|
||||
@@ -79,20 +82,23 @@
|
||||
let messagesContainerElement: HTMLDivElement;
|
||||
|
||||
let system = '';
|
||||
let editorEnabled = false;
|
||||
let editEnabled = false;
|
||||
let chatInputElement = null;
|
||||
|
||||
const DEFAULT_DOCUMENT_EDITOR_PROMPT = `You are an expert document editor.
|
||||
|
||||
## Task
|
||||
Based on the user's instruction, update and enhance the existing notes by incorporating relevant and accurate information from the provided context in the content's primary language. Ensure all edits strictly follow the user’s intent.
|
||||
Based on the user's instruction, update and enhance the existing notes or selection by incorporating relevant and accurate information from the provided context in the content's primary language. Ensure all edits strictly follow the user’s intent.
|
||||
|
||||
## Input Structure
|
||||
- Existing notes: Enclosed within <notes></notes> XML tags.
|
||||
- Additional context: Enclosed within <context></context> XML tags.
|
||||
- Current note selection: Enclosed within <selection></selection> XML tags.
|
||||
- Editing instruction: Provided in the user message.
|
||||
|
||||
## Output Instructions
|
||||
- If a selection is provided, edit **only** the content within <selection></selection>. Leave unselected parts unchanged.
|
||||
- If no selection is provided, edit the entire notes.
|
||||
- Deliver a single, rewritten version of the notes in markdown format.
|
||||
- Integrate information from the context only if it directly supports the user's instruction.
|
||||
- Use clear, organized markdown elements: headings, lists, task lists ([ ]) where tasks or checklists are strongly implied, bold and italic text as appropriate.
|
||||
@@ -155,7 +161,7 @@ Based on the user's instruction, update and enhance the existing notes by incorp
|
||||
|
||||
system = '';
|
||||
|
||||
if (editorEnabled) {
|
||||
if (editEnabled) {
|
||||
system = `${DEFAULT_DOCUMENT_EDITOR_PROMPT}\n\n`;
|
||||
} else {
|
||||
system = `You are a helpful assistant. Please answer the user's questions based on the context provided.\n\n`;
|
||||
@@ -165,7 +171,8 @@ Based on the user's instruction, update and enhance the existing notes by incorp
|
||||
`<notes>${note?.data?.content?.md ?? ''}</notes>` +
|
||||
(files && files.length > 0
|
||||
? `\n<context>${files.map((file) => `${file.name}: ${file?.file?.data?.content ?? 'Could not extract content'}\n`).join('')}</context>`
|
||||
: '');
|
||||
: '') +
|
||||
(selectedContent ? `\n<selection>${selectedContent?.text}</selection>` : '');
|
||||
|
||||
const chatMessages = JSON.parse(
|
||||
JSON.stringify([
|
||||
@@ -206,7 +213,7 @@ Based on the user's instruction, update and enhance the existing notes by incorp
|
||||
controller.abort('User: Stop Response');
|
||||
}
|
||||
|
||||
if (editorEnabled) {
|
||||
if (editEnabled) {
|
||||
editing = false;
|
||||
streaming = false;
|
||||
onEdited();
|
||||
@@ -222,8 +229,20 @@ Based on the user's instruction, update and enhance the existing notes by incorp
|
||||
if (line !== '') {
|
||||
console.log(line);
|
||||
if (line === 'data: [DONE]') {
|
||||
if (editorEnabled) {
|
||||
if (editEnabled) {
|
||||
responseMessage.content = `<status title="${$i18n.t('Edited')}" done="true" />`;
|
||||
|
||||
if (selectedContent && selectedContent?.text && editor) {
|
||||
editor.commands.insertContentAt(
|
||||
{
|
||||
from: selectedContent.from,
|
||||
to: selectedContent.to
|
||||
},
|
||||
enhancedContent.html || enhancedContent.md || ''
|
||||
);
|
||||
|
||||
selectedContent = null;
|
||||
}
|
||||
}
|
||||
|
||||
responseMessage.done = true;
|
||||
@@ -236,20 +255,22 @@ Based on the user's instruction, update and enhance the existing notes by incorp
|
||||
if (responseMessage.content == '' && deltaContent == '\n') {
|
||||
continue;
|
||||
} else {
|
||||
if (editorEnabled) {
|
||||
if (editEnabled) {
|
||||
editing = true;
|
||||
streaming = true;
|
||||
|
||||
enhancedContent.md += deltaContent;
|
||||
enhancedContent.html = marked.parse(enhancedContent.md);
|
||||
|
||||
note.data.content.md = enhancedContent.md;
|
||||
note.data.content.html = enhancedContent.html;
|
||||
note.data.content.json = null;
|
||||
|
||||
responseMessage.content = `<status title="${$i18n.t('Editing')}" done="false" />`;
|
||||
if (!selectedContent || !selectedContent?.text) {
|
||||
note.data.content.md = enhancedContent.md;
|
||||
note.data.content.html = enhancedContent.html;
|
||||
note.data.content.json = null;
|
||||
}
|
||||
|
||||
scrollToBottomHandler();
|
||||
|
||||
responseMessage.content = `<status title="${$i18n.t('Editing')}" done="false" />`;
|
||||
messages = messages;
|
||||
} else {
|
||||
messageContent += deltaContent;
|
||||
@@ -297,19 +318,7 @@ Based on the user's instruction, update and enhance the existing notes by incorp
|
||||
};
|
||||
|
||||
onMount(async () => {
|
||||
if ($user?.role !== 'admin') {
|
||||
await goto('/');
|
||||
}
|
||||
|
||||
if ($settings?.models) {
|
||||
selectedModelId = $settings?.models[0];
|
||||
} else if ($config?.default_models) {
|
||||
selectedModelId = $config?.default_models.split(',')[0];
|
||||
} else {
|
||||
selectedModelId = '';
|
||||
}
|
||||
|
||||
editorEnabled = localStorage.getItem('noteEditorEnabled') === 'true';
|
||||
editEnabled = localStorage.getItem('noteEditEnabled') === 'true';
|
||||
|
||||
loaded = true;
|
||||
|
||||
@@ -367,6 +376,16 @@ Based on the user's instruction, update and enhance the existing notes by incorp
|
||||
</div>
|
||||
|
||||
<div class=" pb-2">
|
||||
{#if selectedContent}
|
||||
<div class="text-xs rounded-xl px-3.5 py-3 w-full markdown-prose-xs">
|
||||
<blockquote>
|
||||
<div class=" line-clamp-3">
|
||||
{selectedContent?.text}
|
||||
</div>
|
||||
</blockquote>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<MessageInput
|
||||
bind:chatInputElement
|
||||
acceptFiles={false}
|
||||
@@ -380,14 +399,15 @@ Based on the user's instruction, update and enhance the existing notes by incorp
|
||||
<Tooltip content={$i18n.t('Edit')} placement="top">
|
||||
<button
|
||||
on:click|preventDefault={() => {
|
||||
editorEnabled = !editorEnabled;
|
||||
editEnabled = !editEnabled;
|
||||
|
||||
localStorage.setItem('noteEditorEnabled', editorEnabled ? 'true' : 'false');
|
||||
localStorage.setItem('noteEditEnabled', editEnabled ? 'true' : 'false');
|
||||
}}
|
||||
disabled={streaming || loading}
|
||||
type="button"
|
||||
class="px-2 @xl:px-2.5 py-2 flex gap-1.5 items-center text-sm rounded-full transition-colors duration-300 focus:outline-hidden max-w-full overflow-hidden hover:bg-gray-50 dark:hover:bg-gray-800 {editorEnabled
|
||||
class="px-2 @xl:px-2.5 py-2 flex gap-1.5 items-center text-sm rounded-full transition-colors duration-300 focus:outline-hidden max-w-full overflow-hidden hover:bg-gray-50 dark:hover:bg-gray-800 {editEnabled
|
||||
? ' text-sky-500 dark:text-sky-300 bg-sky-50 dark:bg-sky-200/5'
|
||||
: 'bg-transparent text-gray-600 dark:text-gray-300 '}"
|
||||
: 'bg-transparent text-gray-600 dark:text-gray-300 '} disabled:opacity-50 disabled:pointer-events-none"
|
||||
>
|
||||
<PencilSquare className="size-4" strokeWidth="1.75" />
|
||||
<span
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
<script lang="ts">
|
||||
import { getContext } from 'svelte';
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
import XMark from '$lib/components/icons/XMark.svelte';
|
||||
import { models } from '$lib/stores';
|
||||
import Collapsible from '$lib/components/common/Collapsible.svelte';
|
||||
import FileItem from '$lib/components/common/FileItem.svelte';
|
||||
import Image from '$lib/components/common/Image.svelte';
|
||||
|
||||
export let show = false;
|
||||
export let selectedModelId = '';
|
||||
export let files = [];
|
||||
|
||||
export let onUpdate = (files: any[]) => {
|
||||
// Default no-op function
|
||||
};
|
||||
</script>
|
||||
|
||||
<div class="flex items-center mb-1.5 pt-1.5">
|
||||
<div class=" -translate-x-1.5 flex items-center">
|
||||
<button
|
||||
class="p-0.5 bg-transparent transition rounded-lg"
|
||||
on:click={() => {
|
||||
show = !show;
|
||||
}}
|
||||
>
|
||||
<XMark className="size-5" strokeWidth="2.5" />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class=" font-medium text-base flex items-center gap-1">
|
||||
<div>
|
||||
{$i18n.t('Controls')}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-1">
|
||||
<div class="pb-10">
|
||||
{#if files.length > 0}
|
||||
<div class=" text-xs font-medium pb-1">Files</div>
|
||||
|
||||
<div class="flex flex-col gap-1">
|
||||
{#each files.filter((file) => file.type !== 'image') as file, fileIdx}
|
||||
<FileItem
|
||||
className="w-full"
|
||||
item={file}
|
||||
small={true}
|
||||
edit={true}
|
||||
dismissible={true}
|
||||
url={file.url}
|
||||
name={file.name}
|
||||
type={file.type}
|
||||
size={file?.size}
|
||||
loading={file.status === 'uploading'}
|
||||
on:dismiss={() => {
|
||||
// Remove the file from the files array
|
||||
files = files.filter((item) => item.id !== file.id);
|
||||
files = files;
|
||||
|
||||
onUpdate(files);
|
||||
}}
|
||||
on:click={() => {
|
||||
console.log(file);
|
||||
}}
|
||||
/>
|
||||
{/each}
|
||||
|
||||
<div class="flex items-center flex-wrap gap-2 mt-1.5">
|
||||
{#each files.filter((file) => file.type === 'image') as file, fileIdx}
|
||||
<Image
|
||||
src={file.url}
|
||||
imageClassName=" size-14 rounded-xl object-cover"
|
||||
dismissible={true}
|
||||
onDismiss={() => {
|
||||
files = files.filter((item) => item.id !== file.id);
|
||||
files = files;
|
||||
|
||||
onUpdate(files);
|
||||
}}
|
||||
/>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="my-2 border-gray-50 dark:border-gray-700/10" />
|
||||
{/if}
|
||||
|
||||
<div class=" text-xs font-medium mb-1">Model</div>
|
||||
|
||||
<div class="w-full">
|
||||
<select class="w-full bg-transparent text-sm outline-hidden" bind:value={selectedModelId}>
|
||||
<option value="" class="bg-gray-50 dark:bg-gray-700" disabled>
|
||||
{$i18n.t('Select a model')}
|
||||
</option>
|
||||
{#each $models.filter((model) => !(model?.info?.meta?.hidden ?? false)) as model}
|
||||
<option value={model.id} class="bg-gray-50 dark:bg-gray-700">{model.name}</option>
|
||||
{/each}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,46 +0,0 @@
|
||||
<script lang="ts">
|
||||
import { getContext } from 'svelte';
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
import XMark from '$lib/components/icons/XMark.svelte';
|
||||
import { models } from '$lib/stores';
|
||||
|
||||
export let show = false;
|
||||
export let selectedModelId = '';
|
||||
</script>
|
||||
|
||||
<div class="flex items-center mb-1.5 pt-1.5">
|
||||
<div class=" -translate-x-1.5 flex items-center">
|
||||
<button
|
||||
class="p-0.5 bg-transparent transition rounded-lg"
|
||||
on:click={() => {
|
||||
show = !show;
|
||||
}}
|
||||
>
|
||||
<XMark className="size-5" strokeWidth="2.5" />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class=" font-medium text-base flex items-center gap-1">
|
||||
<div>
|
||||
{$i18n.t('Settings')}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-1">
|
||||
<div>
|
||||
<div class=" text-xs font-medium mb-1">Model</div>
|
||||
|
||||
<div class="w-full">
|
||||
<select class="w-full bg-transparent text-sm outline-hidden" bind:value={selectedModelId}>
|
||||
<option value="" class="bg-gray-50 dark:bg-gray-700" disabled>
|
||||
{$i18n.t('Select a model')}
|
||||
</option>
|
||||
{#each $models.filter((model) => !(model?.info?.meta?.hidden ?? false)) as model}
|
||||
<option value={model.id} class="bg-gray-50 dark:bg-gray-700">{model.name}</option>
|
||||
{/each}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -44,7 +44,7 @@
|
||||
class="w-full {className} text-sm rounded-xl px-1 py-1.5 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-lg font-primary"
|
||||
sideOffset={6}
|
||||
side="bottom"
|
||||
align="start"
|
||||
align="end"
|
||||
transition={(e) => fade(e, { duration: 100 })}
|
||||
>
|
||||
<DropdownMenu.Sub>
|
||||
@@ -59,6 +59,7 @@
|
||||
class="w-full rounded-xl px-1 py-1.5 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-lg"
|
||||
transition={flyAndScale}
|
||||
sideOffset={8}
|
||||
align="end"
|
||||
>
|
||||
<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"
|
||||
@@ -102,6 +103,7 @@
|
||||
class="w-full rounded-xl px-1 py-1.5 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-lg"
|
||||
transition={flyAndScale}
|
||||
sideOffset={8}
|
||||
align="end"
|
||||
>
|
||||
{#if onCopyLink}
|
||||
<DropdownMenu.Item
|
||||
|
||||
@@ -1,24 +1,188 @@
|
||||
<script lang="ts">
|
||||
import { getContext } from 'svelte';
|
||||
import { getContext, onMount } from 'svelte';
|
||||
import { config, knowledge, settings, user } from '$lib/stores';
|
||||
|
||||
import Selector from './Knowledge/Selector.svelte';
|
||||
import FileItem from '$lib/components/common/FileItem.svelte';
|
||||
|
||||
import { getKnowledgeBases } from '$lib/apis/knowledge';
|
||||
import { uploadFile } from '$lib/apis/files';
|
||||
|
||||
import { toast } from 'svelte-sonner';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import { WEBUI_API_BASE_URL } from '$lib/constants';
|
||||
|
||||
export let selectedItems = [];
|
||||
const i18n = getContext('i18n');
|
||||
|
||||
let loaded = false;
|
||||
|
||||
let filesInputElement = null;
|
||||
let inputFiles = [];
|
||||
|
||||
const uploadFileHandler = async (file, fullContext: boolean = false) => {
|
||||
if ($user?.role !== 'admin' && !($user?.permissions?.chat?.file_upload ?? true)) {
|
||||
toast.error($i18n.t('You do not have permission to upload files.'));
|
||||
return null;
|
||||
}
|
||||
|
||||
const tempItemId = uuidv4();
|
||||
const fileItem = {
|
||||
type: 'file',
|
||||
file: '',
|
||||
id: null,
|
||||
url: '',
|
||||
name: file.name,
|
||||
collection_name: '',
|
||||
status: 'uploading',
|
||||
size: file.size,
|
||||
error: '',
|
||||
itemId: tempItemId,
|
||||
...(fullContext ? { context: 'full' } : {})
|
||||
};
|
||||
|
||||
if (fileItem.size == 0) {
|
||||
toast.error($i18n.t('You cannot upload an empty file.'));
|
||||
return null;
|
||||
}
|
||||
|
||||
selectedItems = [...selectedItems, fileItem];
|
||||
|
||||
try {
|
||||
// If the file is an audio file, provide the language for STT.
|
||||
let metadata = null;
|
||||
if (
|
||||
(file.type.startsWith('audio/') || file.type.startsWith('video/')) &&
|
||||
$settings?.audio?.stt?.language
|
||||
) {
|
||||
metadata = {
|
||||
language: $settings?.audio?.stt?.language
|
||||
};
|
||||
}
|
||||
|
||||
// During the file upload, file content is automatically extracted.
|
||||
const uploadedFile = await uploadFile(localStorage.token, file, metadata);
|
||||
|
||||
if (uploadedFile) {
|
||||
console.log('File upload completed:', {
|
||||
id: uploadedFile.id,
|
||||
name: fileItem.name,
|
||||
collection: uploadedFile?.meta?.collection_name
|
||||
});
|
||||
|
||||
if (uploadedFile.error) {
|
||||
console.warn('File upload warning:', uploadedFile.error);
|
||||
toast.warning(uploadedFile.error);
|
||||
}
|
||||
|
||||
fileItem.status = 'uploaded';
|
||||
fileItem.file = uploadedFile;
|
||||
fileItem.id = uploadedFile.id;
|
||||
fileItem.collection_name =
|
||||
uploadedFile?.meta?.collection_name || uploadedFile?.collection_name;
|
||||
fileItem.url = `${WEBUI_API_BASE_URL}/files/${uploadedFile.id}`;
|
||||
|
||||
selectedItems = selectedItems;
|
||||
} else {
|
||||
selectedItems = selectedItems.filter((item) => item?.itemId !== tempItemId);
|
||||
}
|
||||
} catch (e) {
|
||||
toast.error(`${e}`);
|
||||
selectedItems = selectedItems.filter((item) => item?.itemId !== tempItemId);
|
||||
}
|
||||
};
|
||||
|
||||
const inputFilesHandler = async (inputFiles) => {
|
||||
console.log('Input files handler called with:', inputFiles);
|
||||
|
||||
if (
|
||||
($config?.file?.max_count ?? null) !== null &&
|
||||
files.length + inputFiles.length > $config?.file?.max_count
|
||||
) {
|
||||
toast.error(
|
||||
$i18n.t(`You can only chat with a maximum of {{maxCount}} file(s) at a time.`, {
|
||||
maxCount: $config?.file?.max_count
|
||||
})
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
inputFiles.forEach(async (file) => {
|
||||
console.log('Processing file:', {
|
||||
name: file.name,
|
||||
type: file.type,
|
||||
size: file.size,
|
||||
extension: file.name.split('.').at(-1)
|
||||
});
|
||||
|
||||
if (
|
||||
($config?.file?.max_size ?? null) !== null &&
|
||||
file.size > ($config?.file?.max_size ?? 0) * 1024 * 1024
|
||||
) {
|
||||
console.log('File exceeds max size limit:', {
|
||||
fileSize: file.size,
|
||||
maxSize: ($config?.file?.max_size ?? 0) * 1024 * 1024
|
||||
});
|
||||
toast.error(
|
||||
$i18n.t(`File size should not exceed {{maxSize}} MB.`, {
|
||||
maxSize: $config?.file?.max_size
|
||||
})
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!file['type'].startsWith('image/')) {
|
||||
uploadFileHandler(file);
|
||||
} else {
|
||||
toast.error($i18n.t(`Unsupported file type.`));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
onMount(async () => {
|
||||
if (!$knowledge) {
|
||||
knowledge.set(await getKnowledgeBases(localStorage.token));
|
||||
}
|
||||
loaded = true;
|
||||
});
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<div class="flex w-full justify-between mb-1">
|
||||
<div class=" self-center text-sm font-semibold">{$i18n.t('Knowledge')}</div>
|
||||
</div>
|
||||
<input
|
||||
bind:this={filesInputElement}
|
||||
bind:files={inputFiles}
|
||||
type="file"
|
||||
hidden
|
||||
multiple
|
||||
on:change={async () => {
|
||||
if (inputFiles && inputFiles.length > 0) {
|
||||
const _inputFiles = Array.from(inputFiles);
|
||||
inputFilesHandler(_inputFiles);
|
||||
} else {
|
||||
toast.error($i18n.t(`File not found.`));
|
||||
}
|
||||
|
||||
<div class=" text-xs dark:text-gray-500">
|
||||
{$i18n.t('To attach knowledge base here, add them to the "Knowledge" workspace first.')}
|
||||
</div>
|
||||
filesInputElement.value = '';
|
||||
}}
|
||||
/>
|
||||
|
||||
<div>
|
||||
<slot name="label">
|
||||
<div class="mb-2">
|
||||
<div class="flex w-full justify-between mb-1">
|
||||
<div class=" self-center text-sm font-semibold">
|
||||
{$i18n.t('Knowledge')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class=" text-xs dark:text-gray-500">
|
||||
{$i18n.t('To attach knowledge base here, add them to the "Knowledge" workspace first.')}
|
||||
</div>
|
||||
</div>
|
||||
</slot>
|
||||
|
||||
<div class="flex flex-col">
|
||||
{#if selectedItems?.length > 0}
|
||||
<div class=" flex flex-wrap items-center gap-2 mt-2">
|
||||
<div class=" flex flex-wrap items-center gap-2 mb-2.5">
|
||||
{#each selectedItems as file, fileIdx}
|
||||
<FileItem
|
||||
{file}
|
||||
@@ -38,27 +202,41 @@
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="flex flex-wrap text-sm font-medium gap-1.5 mt-2">
|
||||
<Selector
|
||||
on:select={(e) => {
|
||||
const item = e.detail;
|
||||
{#if loaded}
|
||||
<div class="flex flex-wrap flex-row text-sm gap-1">
|
||||
<Selector
|
||||
knowledgeItems={$knowledge || []}
|
||||
on:select={(e) => {
|
||||
const item = e.detail;
|
||||
|
||||
if (!selectedItems.find((k) => k.id === item.id)) {
|
||||
selectedItems = [
|
||||
...selectedItems,
|
||||
{
|
||||
...item
|
||||
}
|
||||
];
|
||||
}
|
||||
}}
|
||||
>
|
||||
<button
|
||||
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-100 dark:outline-gray-850 rounded-3xl"
|
||||
type="button">{$i18n.t('Select Knowledge')}</button
|
||||
if (!selectedItems.find((k) => k.id === item.id)) {
|
||||
selectedItems = [
|
||||
...selectedItems,
|
||||
{
|
||||
...item
|
||||
}
|
||||
];
|
||||
}
|
||||
}}
|
||||
>
|
||||
</Selector>
|
||||
</div>
|
||||
<div
|
||||
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-100 dark:outline-gray-850 rounded-3xl"
|
||||
>
|
||||
{$i18n.t('Select Knowledge')}
|
||||
</div>
|
||||
</Selector>
|
||||
|
||||
{#if $user?.role === 'admin' || $user?.permissions?.chat?.file_upload}
|
||||
<button
|
||||
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-100 dark:outline-gray-850 rounded-3xl"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
filesInputElement.click();
|
||||
}}>{$i18n.t('Upload Files')}</button
|
||||
>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
<!-- {knowledge} -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
|
||||
export let onClose: Function = () => {};
|
||||
|
||||
export let knowledgeItems = [];
|
||||
|
||||
let query = '';
|
||||
|
||||
let items = [];
|
||||
@@ -51,7 +53,7 @@
|
||||
};
|
||||
});
|
||||
|
||||
let legacy_documents = $knowledge
|
||||
let legacy_documents = knowledgeItems
|
||||
.filter((item) => item?.meta?.document)
|
||||
.map((item) => ({
|
||||
...item,
|
||||
@@ -86,16 +88,16 @@
|
||||
]
|
||||
: [];
|
||||
|
||||
let collections = $knowledge
|
||||
let collections = knowledgeItems
|
||||
.filter((item) => !item?.meta?.document)
|
||||
.map((item) => ({
|
||||
...item,
|
||||
type: 'collection'
|
||||
}));
|
||||
let collection_files =
|
||||
$knowledge.length > 0
|
||||
knowledgeItems.length > 0
|
||||
? [
|
||||
...$knowledge
|
||||
...knowledgeItems
|
||||
.reduce((a, item) => {
|
||||
return [
|
||||
...new Set([
|
||||
@@ -141,7 +143,7 @@
|
||||
|
||||
<div slot="content">
|
||||
<DropdownMenu.Content
|
||||
class="w-full max-w-96 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"
|
||||
class="w-full max-w-96 rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-[99999999] bg-white dark:bg-gray-850 dark:text-white shadow-lg"
|
||||
sideOffset={8}
|
||||
side="bottom"
|
||||
align="start"
|
||||
@@ -162,7 +164,7 @@
|
||||
|
||||
<div class="max-h-56 overflow-y-scroll">
|
||||
{#if filteredItems.length === 0}
|
||||
<div class="text-center text-sm text-gray-500 dark:text-gray-400">
|
||||
<div class="text-center text-xs text-gray-500 dark:text-gray-400 py-4">
|
||||
{$i18n.t('No knowledge found')}
|
||||
</div>
|
||||
{:else}
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
filterIds = model?.meta?.filterIds ?? [];
|
||||
actionIds = model?.meta?.actionIds ?? [];
|
||||
knowledge = (model?.meta?.knowledge ?? []).map((item) => {
|
||||
if (item?.collection_name) {
|
||||
if (item?.collection_name && item?.type !== 'file') {
|
||||
return {
|
||||
id: item.collection_name,
|
||||
name: item.name,
|
||||
|
||||
@@ -171,11 +171,10 @@
|
||||
<span class=" text-gray-600 dark:text-gray-300 font-medium">{'}}'}</span>.
|
||||
</div>
|
||||
|
||||
<div class="text-xs text-gray-400 dark:text-gray-500">
|
||||
{$i18n.t('Utilize')}<span class=" text-gray-600 dark:text-gray-300 font-medium">
|
||||
{` {{CLIPBOARD}}`}</span
|
||||
>
|
||||
{$i18n.t('variable to have them replaced with clipboard content.')}
|
||||
<div class="text-xs text-gray-400 dark:text-gray-500 underline">
|
||||
<a href="https://docs.openwebui.com/features/workspace/prompts" target="_blank">
|
||||
{$i18n.t('To learn more about powerful prompt variables, click here')}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "إنشاء حساب",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "عمل مفتاح جديد",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "تعديل المستخدم",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "أدخل عنوان URL ل Github Raw",
|
||||
"Enter Google PSE API Key": "أدخل مفتاح واجهة برمجة تطبيقات PSE من Google",
|
||||
"Enter Google PSE Engine Id": "أدخل معرف محرك PSE من Google",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "دفق قطع الاستجابة الخارجية الكبيرة بسلاسة",
|
||||
"Focus chat input": "التركيز على إدخال الدردشة",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "إدخال الأوامر",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "التثبيت من عنوان URL لجيثب",
|
||||
"Instant Auto-Send After Voice Transcription": "",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT تجريبي",
|
||||
"JWT Token": "JWT Token",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "اختصارات لوحة المفاتيح",
|
||||
"Knowledge": "",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "فاتح",
|
||||
"Listening...": "",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "ما الجديد",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "حدد نموذجا أساسيا",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "",
|
||||
"Select a function": "",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "المستخدمين",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "يستخدم",
|
||||
"Valid time units:": "وحدات زمنية صالحة:",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "المتغير",
|
||||
"variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "إصدار",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "إنشاء حساب",
|
||||
"Create Admin Account": "إنشاء حساب مسؤول",
|
||||
"Create Channel": "إنشاء قناة",
|
||||
"Create Folder": "",
|
||||
"Create Group": "إنشاء مجموعة",
|
||||
"Create Knowledge": "إنشاء معرفة",
|
||||
"Create new key": "إنشاء مفتاح جديد",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "مثال: أدوات لتنفيذ عمليات متنوعة",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "تعديل القناة",
|
||||
"Edit Connection": "تعديل الاتصال",
|
||||
"Edit Default Permissions": "تعديل الأذونات الافتراضية",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "تعديل الذاكرة",
|
||||
"Edit User": "تعديل المستخدم",
|
||||
"Edit User Group": "تعديل مجموعة المستخدمين",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "أدخل عنوان URL ل Github Raw",
|
||||
"Enter Google PSE API Key": "أدخل مفتاح واجهة برمجة تطبيقات PSE من Google",
|
||||
"Enter Google PSE Engine Id": "أدخل معرف محرك PSE من Google",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "فشل في إضافة الملف.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "فشل في جلب النماذج",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "دفق قطع الاستجابة الخارجية الكبيرة بسلاسة",
|
||||
"Focus chat input": "التركيز على إدخال الدردشة",
|
||||
"Folder deleted successfully": "تم حذف المجلد بنجاح",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "لا يمكن أن يكون اسم المجلد فارغًا.",
|
||||
"Folder name updated successfully": "تم تحديث اسم المجلد بنجاح",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "إدخال الأوامر",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "التثبيت من عنوان URL لجيثب",
|
||||
"Instant Auto-Send After Voice Transcription": "إرسال تلقائي فوري بعد تحويل الصوت إلى نص",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT تجريبي",
|
||||
"JWT Token": "JWT Token",
|
||||
"Kagi Search API Key": "مفتاح API لـ Kagi Search",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "المفتاح",
|
||||
"Keyboard shortcuts": "اختصارات لوحة المفاتيح",
|
||||
"Knowledge": "المعرفة",
|
||||
"Knowledge Access": "الوصول إلى المعرفة",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "تم إنشاء المعرفة بنجاح.",
|
||||
"Knowledge deleted successfully.": "تم حذف المعرفة بنجاح.",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "اتركه فارغًا لاستخدام التوجيه الافتراضي، أو أدخل توجيهًا مخصصًا",
|
||||
"Leave model field empty to use the default model.": "اترك حقل النموذج فارغًا لاستخدام النموذج الافتراضي.",
|
||||
"License": "الترخيص",
|
||||
"Lift List": "",
|
||||
"Light": "فاتح",
|
||||
"Listening...": "جارٍ الاستماع...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "قناة جديدة",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "ما الجديد",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "حدد نموذجا أساسيا",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "اختر محركًا",
|
||||
"Select a function": "اختر وظيفة",
|
||||
"Select a group": "اختر مجموعة",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "سجّل في {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "جارٍ تسجيل الدخول إلى {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "للوصول إلى واجهة WebUI، يُرجى التواصل مع المسؤول. يمكن للمسؤولين إدارة حالة المستخدمين من لوحة الإدارة.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "لإرفاق قاعدة المعرفة هنا، أضفها أولاً إلى مساحة العمل \"المعرفة\".",
|
||||
"To learn more about available endpoints, visit our documentation.": "لمعرفة المزيد حول نقاط النهاية المتاحة، قم بزيارة الوثائق الخاصة بنا.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "لحماية خصوصيتك، يتم مشاركة التقييمات ومعرّفات النماذج والوسوم والبيانات الوصفية فقط من ملاحظاتك—سجلات الدردشة تظل خاصة ولا تُدرج.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "لاختيار الإجراءات هنا، أضفها أولاً إلى مساحة العمل \"الوظائف\".",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "لاختيار الفلاتر هنا، أضفها أولاً إلى مساحة العمل \"الوظائف\".",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "اكشف الأسرار",
|
||||
"Unpin": "إزالة التثبيت",
|
||||
"Unravel secrets": "فكّ الأسرار",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "بدون وسوم",
|
||||
"Untitled": "",
|
||||
"Update": "تحديث",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "اسم المستخدم",
|
||||
"Users": "المستخدمين",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "يتم استخدام نموذج الساحة الافتراضي مع جميع النماذج. اضغط على زر + لإضافة نماذج مخصصة.",
|
||||
"Utilize": "يستخدم",
|
||||
"Valid time units:": "وحدات زمنية صالحة:",
|
||||
"Valves": "الصمامات",
|
||||
"Valves updated": "تم تحديث الصمامات",
|
||||
"Valves updated successfully": "تم تحديث الصمامات بنجاح",
|
||||
"variable": "المتغير",
|
||||
"variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "إصدار",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Създаване на Акаунт",
|
||||
"Create Admin Account": "Създаване на администраторски акаунт",
|
||||
"Create Channel": "Създаване на канал",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Създаване на група",
|
||||
"Create Knowledge": "Създаване на знания",
|
||||
"Create new key": "Създаване на нов ключ",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "напр. Инструменти за извършване на различни операции",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Редактиране на канал",
|
||||
"Edit Connection": "Редактиране на връзка",
|
||||
"Edit Default Permissions": "Редактиране на разрешения по подразбиране",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Редактиране на памет",
|
||||
"Edit User": "Редактиране на потребител",
|
||||
"Edit User Group": "Редактиране на потребителска група",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Въведете URL адрес на Github Raw",
|
||||
"Enter Google PSE API Key": "Въведете API ключ за Google PSE",
|
||||
"Enter Google PSE Engine Id": "Въведете идентификатор на двигателя на Google PSE",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Неуспешно добавяне на файл.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "Неуспешно извличане на модели",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Плавно предаване на големи части от външния отговор",
|
||||
"Focus chat input": "Фокусиране на чат вход",
|
||||
"Folder deleted successfully": "Папката е изтрита успешно",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Името на папката не може да бъде празно.",
|
||||
"Folder name updated successfully": "Името на папката е актуализирано успешно",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Въведете команди",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Инсталиране от URL адреса на Github",
|
||||
"Instant Auto-Send After Voice Transcription": "Незабавно автоматично изпращане след гласова транскрипция",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT изтичане",
|
||||
"JWT Token": "JWT токен",
|
||||
"Kagi Search API Key": "API ключ за Kagi Search",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "Ключ",
|
||||
"Keyboard shortcuts": "Клавиши за бърз достъп",
|
||||
"Knowledge": "Знания",
|
||||
"Knowledge Access": "Достъп до знания",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Знанието е създадено успешно.",
|
||||
"Knowledge deleted successfully.": "Знанието е изтрито успешно.",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Оставете празно, за да използвате промпта по подразбиране, или въведете персонализиран промпт",
|
||||
"Leave model field empty to use the default model.": "Оставете полето за модел празно, за да използвате модела по подразбиране.",
|
||||
"License": "Лиценз",
|
||||
"Lift List": "",
|
||||
"Light": "Светъл",
|
||||
"Listening...": "Слушане...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "нов-канал",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "Без съдържание",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Виж какво е новото",
|
||||
"Seed": "Начално число",
|
||||
"Select a base model": "Изберете базов модел",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Изберете двигател",
|
||||
"Select a function": "Изберете функция",
|
||||
"Select a group": "Изберете група",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Регистрирайте се в {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "Вписване в {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "За достъп до уеб интерфейса, моля, свържете се с администратора. Администраторите могат да управляват статусите на потребителите от Административния панел.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "За да прикачите база знания тук, първо ги добавете към работното пространство \"Знания\".",
|
||||
"To learn more about available endpoints, visit our documentation.": "За да научите повече за наличните крайни точки, посетете нашата документация.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "За да защитим вашата поверителност, от вашата обратна връзка се споделят само оценки, идентификатори на модели, тагове и метаданни-вашите чат логове остават лични и не са включени.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "За да изберете действия тук, първо ги добавете към работното пространство \"Функции\".",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "За да изберете филтри тук, първо ги добавете към работното пространство \"Функции\".",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Разкрий мистерии",
|
||||
"Unpin": "Откачи",
|
||||
"Unravel secrets": "Разгадай тайни",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Без етикет",
|
||||
"Untitled": "Неозаглавен",
|
||||
"Update": "Актуализиране",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "Потребителско име",
|
||||
"Users": "Потребители",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Използване на стандартния арена модел с всички модели. Кликнете бутона плюс, за да добавите персонализирани модели.",
|
||||
"Utilize": "Използване на",
|
||||
"Valid time units:": "Валидни единици за време:",
|
||||
"Valves": "Клапани",
|
||||
"Valves updated": "Клапаните са актуализирани",
|
||||
"Valves updated successfully": "Клапаните са актуализирани успешно",
|
||||
"variable": "променлива",
|
||||
"variable to have them replaced with clipboard content.": "променлива, за да бъдат заменени със съдържание от клипборда.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Версия",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "একাউন্ট তৈরি করুন",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "একটি নতুন কী তৈরি করুন",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "ইউজার এডিট করুন",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "গিটহাব কাঁচা URL লিখুন",
|
||||
"Enter Google PSE API Key": "গুগল পিএসই এপিআই কী লিখুন",
|
||||
"Enter Google PSE Engine Id": "গুগল পিএসই ইঞ্জিন আইডি লিখুন",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "বড় এক্সটার্নাল রেসপন্স চাঙ্কগুলো মসৃণভাবে প্রবাহিত করুন",
|
||||
"Focus chat input": "চ্যাট ইনপুট ফোকাস করুন",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "ইনপুট কমান্ডস",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Github URL থেকে ইনস্টল করুন",
|
||||
"Instant Auto-Send After Voice Transcription": "",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT-র মেয়াদ",
|
||||
"JWT Token": "JWT টোকেন",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "কিবোর্ড শর্টকাটসমূহ",
|
||||
"Knowledge": "",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "লাইট",
|
||||
"Listening...": "",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "নতুন কী আছে দেখুন",
|
||||
"Seed": "সীড",
|
||||
"Select a base model": "একটি বেস মডেল নির্বাচন করুন",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "",
|
||||
"Select a function": "",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "ব্যাবহারকারীগণ",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "ইউটিলাইজ",
|
||||
"Valid time units:": "সময়ের গ্রহণযোগ্য এককসমূহ:",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "ভেরিয়েবল",
|
||||
"variable to have them replaced with clipboard content.": "ক্লিপবোর্ডের কন্টেন্ট দিয়ে যেই ভেরিয়েবল রিপ্লেস করা যাবে।",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "ভার্সন",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "རྩིས་ཁྲ་གསར་བཟོ།",
|
||||
"Create Admin Account": "དོ་དམ་པའི་རྩིས་ཁྲ་གསར་བཟོ།",
|
||||
"Create Channel": "བགྲོ་གླེང་གསར་བཟོ།",
|
||||
"Create Folder": "",
|
||||
"Create Group": "ཚོགས་པ་གསར་བཟོ།",
|
||||
"Create Knowledge": "ཤེས་བྱ་གསར་བཟོ།",
|
||||
"Create new key": "ལྡེ་མིག་གསར་པ་བཟོ་བ།",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "དཔེར་ན། ལས་ཀ་སྣ་ཚོགས་སྒྲུབ་བྱེད་ཀྱི་ལག་ཆ།",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "བགྲོ་གླེང་ཞུ་དག",
|
||||
"Edit Connection": "སྦྲེལ་མཐུད་ཞུ་དག",
|
||||
"Edit Default Permissions": "སྔོན་སྒྲིག་དབང་ཚད་ཞུ་དག",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "དྲན་ཤེས་ཞུ་དག",
|
||||
"Edit User": "བེད་སྤྱོད་མཁན་ཞུ་དག",
|
||||
"Edit User Group": "བེད་སྤྱོད་མཁན་ཚོགས་པ་ཞུ་དག",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Github Raw URL འཇུག་པ།",
|
||||
"Enter Google PSE API Key": "Google PSE API ལྡེ་མིག་འཇུག་པ།",
|
||||
"Enter Google PSE Engine Id": "Google PSE Engine Id འཇུག་པ།",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "ཡིག་ཆ་སྣོན་པར་མ་ཐུབ།",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI ལག་ཆའི་སར་བར་ལ་སྦྲེལ་མཐུད་བྱེད་མ་ཐུབ།",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "དཔེ་དབྱིབས་ལེན་པར་མ་ཐུབ།",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "སྦྱར་སྡེར་གྱི་ནང་དོན་ཀློག་མ་ཐུབ།",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "ཕྱི་རོལ་གྱི་ལན་གྱི་དུམ་བུ་ཆེན་པོ་རྒྱུན་བཞིན་རྒྱུག་པ།",
|
||||
"Focus chat input": "ཁ་བརྡའི་ནང་འཇུག་ལ་དམིགས་པ།",
|
||||
"Folder deleted successfully": "ཡིག་སྣོད་ལེགས་པར་བསུབས་ཟིན།",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "ཡིག་སྣོད་ཀྱི་མིང་སྟོང་པ་ཡིན་མི་ཆོག",
|
||||
"Folder name updated successfully": "ཡིག་སྣོད་ཀྱི་མིང་ལེགས་པར་གསར་སྒྱུར་བྱས་ཟིན།",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "ནང་འཇུག་བཀའ་བརྡ།",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Github URL ནས་སྒྲིག་སྦྱོར་བྱེད་པ།",
|
||||
"Instant Auto-Send After Voice Transcription": "སྐད་ཆ་ཡིག་འབེབས་བྱས་རྗེས་ལམ་སང་རང་འགུལ་གཏོང་བ།",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT དུས་ཚོད་རྫོགས་པ།",
|
||||
"JWT Token": "JWT Token",
|
||||
"Kagi Search API Key": "Kagi Search API ལྡེ་མིག",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "ལྡེ་མིག",
|
||||
"Keyboard shortcuts": "མཐེབ་གནོན་མྱུར་ལམ།",
|
||||
"Knowledge": "ཤེས་བྱ།",
|
||||
"Knowledge Access": "ཤེས་བྱར་འཛུལ་སྤྱོད།",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "ཤེས་བྱ་ལེགས་པར་བཟོས་ཟིན།",
|
||||
"Knowledge deleted successfully.": "ཤེས་བྱ་ལེགས་པར་བསུབས་ཟིན།",
|
||||
"Knowledge Public Sharing": "ཤེས་བྱ་སྤྱི་སྤྱོད་མཉམ་སྤྱོད།",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "སྔོན་སྒྲིག་འགུལ་སློང་བེད་སྤྱོད་གཏོང་བར་སྟོང་པ་བཞག་པའམ། ཡང་ན་སྲོལ་བཟོས་འགུལ་སློང་འཇུག་པ།",
|
||||
"Leave model field empty to use the default model.": "སྔོན་སྒྲིག་དཔེ་དབྱིབས་བེད་སྤྱོད་གཏོང་བར་དཔེ་དབྱིབས་ཀྱི་ཁོངས་སྟོང་པ་བཞག་པ།",
|
||||
"License": "ཆོག་མཆན།",
|
||||
"Lift List": "",
|
||||
"Light": "དཀར་པོ།",
|
||||
"Listening...": "ཉན་བཞིན་པ།...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "བགྲོ་གླེང་གསར་པ།",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "གསར་པ་ཅི་ཡོད་ལྟ་བ།",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "གཞི་རྩའི་དཔེ་དབྱིབས་ཤིག་གདམ་པ།",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "འཕྲུལ་འཁོར་ཞིག་གདམ་པ།",
|
||||
"Select a function": "ལས་འགན་ཞིག་གདམ་པ།",
|
||||
"Select a group": "ཚོགས་པ་ཞིག་གདམ་པ།",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "{{WEBUI_NAME}} ལ་ཐོ་འགོད།",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "{{WEBUI_NAME}} ལ་ནང་འཛུལ་བྱེད་བཞིན་པ།",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-༡༢༣༤",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "WebUI ལ་འཛུལ་སྤྱོད་བྱེད་པར། དོ་དམ་པ་དང་འབྲེལ་གཏུག་བྱེད་རོགས། དོ་དམ་པས་དོ་དམ་པའི་ལྟ་སྟེགས་ནས་བེད་སྤྱོད་མཁན་གྱི་གནས་སྟངས་དོ་དམ་བྱེད་ཐུབ།",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "ཤེས་བྱའི་རྟེན་གཞི་འདིར་འཇོག་པར། ཐོག་མར་དེ་དག་ \"ཤེས་བྱའི་\" ལས་ཡུལ་དུ་སྣོན་པ།",
|
||||
"To learn more about available endpoints, visit our documentation.": "ཡོད་པའི་མཇུག་མཐུད་སྐོར་མང་ཙམ་ཤེས་པར། ང་ཚོའི་ཡིག་ཆ་ལ་ལྟ་བ།",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "ཁྱེད་ཀྱི་སྒེར་དོན་སྲུང་སྐྱོབ་བྱེད་པར། ཁྱེད་ཀྱི་བསམ་འཆར་ནས་སྐར་མ། དཔེ་དབྱིབས་ཀྱི་ IDs། རྟགས། དང་ metadata ཁོ་ན་མཉམ་སྤྱོད་བྱེད།—ཁྱེད་ཀྱི་ཁ་བརྡའི་ཟིན་ཐོ་སྒེར་དོན་དུ་གནས་པ་དང་ཚུད་མེད།",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "བྱ་སྤྱོད་འདིར་གདམ་ག་བྱེད་པར། ཐོག་མར་དེ་དག་ \"ལས་འགན་གྱི་\" ལས་ཡུལ་དུ་སྣོན་པ།",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "འཚག་མ་འདིར་གདམ་ག་བྱེད་པར། ཐོག་མར་དེ་དག་ \"ལས་འགན་གྱི་\" ལས་ཡུལ་དུ་སྣོན་པ།",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "གསང་བ་གྲོལ་བ།",
|
||||
"Unpin": "ཕྱིར་འདོན།",
|
||||
"Unravel secrets": "གསང་བ་གྲོལ་བ།",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "རྟགས་མེད།",
|
||||
"Untitled": "",
|
||||
"Update": "གསར་སྒྱུར།",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "བེད་སྤྱོད་མཁན་གྱི་ Webhooks",
|
||||
"Username": "བེད་སྤྱོད་མིང་།",
|
||||
"Users": "བེད་སྤྱོད་མཁན།",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "དཔེ་དབྱིབས་ཡོངས་རྫོགས་དང་མཉམ་དུ་སྔོན་སྒྲིག་ arena དཔེ་དབྱིབས་བེད་སྤྱོད་གཏོང་བཞིན་པ། སྲོལ་བཟོས་དཔེ་དབྱིབས་སྣོན་པར་བསྣན་རྟགས་མཐེབ་གནོན་ལ་མནན་པ།",
|
||||
"Utilize": "བེད་སྤྱོད།",
|
||||
"Valid time units:": "ནུས་ལྡན་དུས་ཚོད་ཀྱི་ཚན་པ།:",
|
||||
"Valves": "Valves",
|
||||
"Valves updated": "Valves གསར་སྒྱུར་བྱས།",
|
||||
"Valves updated successfully": "Valves ལེགས་པར་གསར་སྒྱུར་བྱས།",
|
||||
"variable": "འགྱུར་ཚད།",
|
||||
"variable to have them replaced with clipboard content.": "འགྱུར་ཚད་དེ་དག་སྦྱར་སྡེར་གྱི་ནང་དོན་གྱིས་ཚབ་བྱེད་པར་ཡོད་པ།",
|
||||
"Verify Connection": "སྦྲེལ་མཐུད་ར་སྤྲོད།",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "པར་གཞི།",
|
||||
|
||||
@@ -5,15 +5,15 @@
|
||||
"(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)",
|
||||
"(latest)": "(últim)",
|
||||
"(leave blank for to use commercial endpoint)": "(deixa-ho buit per utilitzar un punt d'accés comercial)",
|
||||
"[Last] dddd [at] h:mm A": "",
|
||||
"[Today at] h:mm A": "",
|
||||
"[Yesterday at] h:mm A": "",
|
||||
"[Last] dddd [at] h:mm A": "[Darrer] dddd [a] h:mm A",
|
||||
"[Today at] h:mm A": "[Avui a les] h:mm A",
|
||||
"[Yesterday at] h:mm A": "[Ahir a les] h:mm A",
|
||||
"{{ models }}": "{{ models }}",
|
||||
"{{COUNT}} Available Tools": "{{COUNT}} eines disponibles",
|
||||
"{{COUNT}} characters": "",
|
||||
"{{COUNT}} characters": "{{COUNT}} caràcters",
|
||||
"{{COUNT}} hidden lines": "{{COUNT}} línies ocultes",
|
||||
"{{COUNT}} Replies": "{{COUNT}} respostes",
|
||||
"{{COUNT}} words": "",
|
||||
"{{COUNT}} words": "{{COUNT}} paraules",
|
||||
"{{user}}'s Chats": "Els xats de {{user}}",
|
||||
"{{webUIName}} Backend Required": "El Backend de {{webUIName}} és necessari",
|
||||
"*Prompt node ID(s) are required for image generation": "*Els identificadors de nodes d'indicacions són necessaris per a la generació d'imatges",
|
||||
@@ -28,7 +28,7 @@
|
||||
"Account": "Compte",
|
||||
"Account Activation Pending": "Activació del compte pendent",
|
||||
"Accurate information": "Informació precisa",
|
||||
"Action": "",
|
||||
"Action": "Acció",
|
||||
"Actions": "Accions",
|
||||
"Activate": "Activar",
|
||||
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Activa aquest comanda escrivint \"{{COMMAND}}\" en el xat",
|
||||
@@ -61,7 +61,7 @@
|
||||
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Els administradors tenen accés a totes les eines en tot moment; els usuaris necessiten eines assignades per model a l'espai de treball.",
|
||||
"Advanced Parameters": "Paràmetres avançats",
|
||||
"Advanced Params": "Paràmetres avançats",
|
||||
"AI": "",
|
||||
"AI": "IA",
|
||||
"All": "Tots",
|
||||
"All Documents": "Tots els documents",
|
||||
"All models deleted successfully": "Tots els models s'han eliminat correctament",
|
||||
@@ -152,22 +152,22 @@
|
||||
"Bad Response": "Resposta errònia",
|
||||
"Banners": "Banners",
|
||||
"Base Model (From)": "Model base (des de)",
|
||||
"Base Model List Cache speeds up access by fetching base models only at startup or on settings save—faster, but may not show recent base model changes.": "",
|
||||
"Base Model List Cache speeds up access by fetching base models only at startup or on settings save—faster, but may not show recent base model changes.": "La memòria cau de la llista de models base accelera l'accés obtenint els models base només a l'inici o en desar la configuració; és més ràpid, però és possible que no mostri els canvis recents del model base.",
|
||||
"before": "abans",
|
||||
"Being lazy": "Essent mandrós",
|
||||
"Beta": "Beta",
|
||||
"Bing Search V7 Endpoint": "Punt de connexió a Bing Search V7",
|
||||
"Bing Search V7 Subscription Key": "Clau de subscripció a Bing Search V7",
|
||||
"Bocha Search API Key": "Clau API de Bocha Search",
|
||||
"Bold": "",
|
||||
"Bold": "Negreta",
|
||||
"Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "Potenciar o penalitzar tokens específics per a respostes limitades. Els valors de biaix es fixaran entre -100 i 100 (inclosos). (Per defecte: cap)",
|
||||
"Both Docling OCR Engine and Language(s) must be provided or both left empty.": "Cal proporcionar tant el motor OCR de Docling com els idiomes o bé deixar-los buits.",
|
||||
"Brave Search API Key": "Clau API de Brave Search",
|
||||
"Bullet List": "",
|
||||
"Bullet List": "Llista indexada",
|
||||
"By {{name}}": "Per {{name}}",
|
||||
"Bypass Embedding and Retrieval": "Desactivar l'Embedding i el Retrieval",
|
||||
"Bypass Web Loader": "Ometre el càrregador web",
|
||||
"Cache Base Model List": "",
|
||||
"Cache Base Model List": "Llista de models base en memòria cau",
|
||||
"Calendar": "Calendari",
|
||||
"Call": "Trucada",
|
||||
"Call feature is not supported when using Web STT engine": "La funció de trucada no s'admet quan s'utilitza el motor Web STT",
|
||||
@@ -224,7 +224,7 @@
|
||||
"Close Configure Connection Modal": "Tancar la finestra de configuració de la connexió",
|
||||
"Close modal": "Tancar el modal",
|
||||
"Close settings modal": "Tancar el modal de configuració",
|
||||
"Code Block": "",
|
||||
"Code Block": "Bloc de codi",
|
||||
"Code execution": "Execució de codi",
|
||||
"Code Execution": "Execució de Codi",
|
||||
"Code Execution Engine": "Motor d'execució de codi",
|
||||
@@ -243,7 +243,7 @@
|
||||
"ComfyUI Workflow": "Flux de treball de ComfyUI",
|
||||
"ComfyUI Workflow Nodes": "Nodes del flux de treball de ComfyUI",
|
||||
"Command": "Comanda",
|
||||
"Comment": "",
|
||||
"Comment": "Comentari",
|
||||
"Completions": "Completaments",
|
||||
"Concurrent Requests": "Peticions simultànies",
|
||||
"Configure": "Configurar",
|
||||
@@ -279,7 +279,7 @@
|
||||
"Copy Formatted Text": "Copiar el text formatat",
|
||||
"Copy last code block": "Copiar l'últim bloc de codi",
|
||||
"Copy last response": "Copiar l'última resposta",
|
||||
"Copy link": "",
|
||||
"Copy link": "Copiar l'enllaç",
|
||||
"Copy Link": "Copiar l'enllaç",
|
||||
"Copy to clipboard": "Copiar al porta-retalls",
|
||||
"Copying to clipboard was successful!": "La còpia al porta-retalls s'ha realitzat correctament",
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Crear un compte",
|
||||
"Create Admin Account": "Crear un compte d'Administrador",
|
||||
"Create Channel": "Crear un canal",
|
||||
"Create Folder": "Crear carpeta",
|
||||
"Create Group": "Crear grup",
|
||||
"Create Knowledge": "Crear Coneixement",
|
||||
"Create new key": "Crear una nova clau",
|
||||
@@ -312,7 +313,7 @@
|
||||
"Database": "Base de dades",
|
||||
"Datalab Marker API": "API de Datalab Marker",
|
||||
"Datalab Marker API Key required.": "API de Datalab Marker requereix clau.",
|
||||
"DD/MM/YYYY": "",
|
||||
"DD/MM/YYYY": "DD/MM/YYYY",
|
||||
"December": "Desembre",
|
||||
"Default": "Per defecte",
|
||||
"Default (Open AI)": "Per defecte (Open AI)",
|
||||
@@ -359,7 +360,7 @@
|
||||
"Direct Connections": "Connexions directes",
|
||||
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Les connexions directes permeten als usuaris connectar-se als seus propis endpoints d'API compatibles amb OpenAI.",
|
||||
"Direct Tool Servers": "Servidors d'eines directes",
|
||||
"Disable Code Interpreter": "",
|
||||
"Disable Code Interpreter": "Deshabilitar l'interpret de codi",
|
||||
"Disable Image Extraction": "Deshabilitar l'extracció d'imatges",
|
||||
"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "Desactiva l'extracció d'imatges del PDF. Si Utilitza LLM està habilitat, les imatges es descriuran automàticament. Per defecte és Fals.",
|
||||
"Disabled": "Deshabilitat",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "p. ex. pdf, docx, txt",
|
||||
"e.g. Tools for performing various operations": "p. ex. Eines per dur a terme operacions",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "p. ex. 3, 4, 5 (deixa-ho en blanc per utilitzar el per defecte)",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "p. ex. audio/wav,audio/mpeg,video/* (deixa-ho en blanc per utilitzar el per defecte)",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "p. ex. en-US, ja-JP, ca-ES (deixa-ho en blanc per detecció automàtica)",
|
||||
"e.g., westus (leave blank for eastus)": "p. ex. westus (deixa-ho en blanc per a eastus)",
|
||||
"e.g.) en,fr,de": "p. ex. en,fr,de",
|
||||
@@ -422,11 +423,12 @@
|
||||
"Edit Channel": "Editar el canal",
|
||||
"Edit Connection": "Editar la connexió",
|
||||
"Edit Default Permissions": "Editar el permisos per defecte",
|
||||
"Edit Folder": "Editar la carpeta",
|
||||
"Edit Memory": "Editar la memòria",
|
||||
"Edit User": "Editar l'usuari",
|
||||
"Edit User Group": "Editar el grup d'usuaris",
|
||||
"Edited": "",
|
||||
"Editing": "",
|
||||
"Edited": "Editat",
|
||||
"Editing": "Editant",
|
||||
"Eject": "Expulsar",
|
||||
"ElevenLabs": "ElevenLabs",
|
||||
"Email": "Correu electrònic",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "Introdueix la URL d'External Web Search",
|
||||
"Enter Firecrawl API Base URL": "Introdueix la URL base de Firecrawl API",
|
||||
"Enter Firecrawl API Key": "Introdueix la clau API de Firecrawl",
|
||||
"Enter folder name": "Introdueix el nom de la carpeta",
|
||||
"Enter Github Raw URL": "Introdueix l'URL en brut de Github",
|
||||
"Enter Google PSE API Key": "Introdueix la clau API de Google PSE",
|
||||
"Enter Google PSE Engine Id": "Introdueix l'identificador del motor PSE de Google",
|
||||
@@ -564,7 +567,7 @@
|
||||
"Error unloading model: {{error}}": "Error en descarregar el model: {{error}}",
|
||||
"Error uploading file: {{error}}": "Error en pujar l'arxiu: {{error}}",
|
||||
"Evaluations": "Avaluacions",
|
||||
"Everyone": "",
|
||||
"Everyone": "Tothom",
|
||||
"Exa API Key": "Clau API d'EXA",
|
||||
"Example: (&(objectClass=inetOrgPerson)(uid=%s))": "Exemple: (&(objectClass=inetOrgPerson)(uid=%s))",
|
||||
"Example: ALL": "Exemple: TOTS",
|
||||
@@ -599,15 +602,17 @@
|
||||
"External Web Loader URL": "URL d'External Web Loader",
|
||||
"External Web Search API Key": "Clau API d'External Web Search",
|
||||
"External Web Search URL": "URL d'External Web Search",
|
||||
"Fade Effect for Streaming Text": "Efecte de fos a negre per al text en streaming",
|
||||
"Failed to add file.": "No s'ha pogut afegir l'arxiu.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "No s'ha pogut connecta al servidor d'eines OpenAPI {{URL}}",
|
||||
"Failed to copy link": "No s'ha pogut copiar l'enllaç",
|
||||
"Failed to create API Key.": "No s'ha pogut crear la clau API.",
|
||||
"Failed to delete note": "No s'ha pogut eliminar la nota",
|
||||
"Failed to extract content from the file: {{error}}": "",
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to extract content from the file: {{error}}": "No s'ha pogut extreure el contingut del fitxer: {{error}}",
|
||||
"Failed to extract content from the file.": "No s'ha pogut extreure el contingut del fitxer",
|
||||
"Failed to fetch models": "No s'han pogut obtenir els models",
|
||||
"Failed to generate title": "",
|
||||
"Failed to generate title": "No s'ha pogut generar el títol",
|
||||
"Failed to load chat preview": "No s'ha pogut carregar la previsualització del xat",
|
||||
"Failed to load file content.": "No s'ha pogut carregar el contingut del fitxer",
|
||||
"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
|
||||
"Failed to save connections": "No s'han pogut desar les connexions",
|
||||
@@ -631,7 +636,7 @@
|
||||
"File Upload": "Pujar arxiu",
|
||||
"File uploaded successfully": "arxiu pujat satisfactòriament",
|
||||
"Files": "Arxius",
|
||||
"Filter": "",
|
||||
"Filter": "Filtre",
|
||||
"Filter is now globally disabled": "El filtre ha estat desactivat globalment",
|
||||
"Filter is now globally enabled": "El filtre ha estat activat globalment",
|
||||
"Filters": "Filtres",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Transmetre amb fluïdesa grans trossos de resposta externa",
|
||||
"Focus chat input": "Estableix el focus a l'entrada del xat",
|
||||
"Folder deleted successfully": "Carpeta eliminada correctament",
|
||||
"Folder Name": "Nom de la carpeta",
|
||||
"Folder name cannot be empty.": "El nom de la carpeta no pot ser buit.",
|
||||
"Folder name updated successfully": "Nom de la carpeta actualitzat correctament",
|
||||
"Folder updated successfully": "Carpeta actualitazda correctament",
|
||||
"Follow up": "Seguir",
|
||||
"Follow Up Generation": "Generació de seguiment",
|
||||
"Follow Up Generation Prompt": "Indicació per a la generació de seguiment",
|
||||
@@ -679,7 +686,7 @@
|
||||
"Generate prompt pair": "Generar parella d'indicació",
|
||||
"Generating search query": "Generant consulta",
|
||||
"Generating...": "Generant...",
|
||||
"Get information on {{name}} in the UI": "",
|
||||
"Get information on {{name}} in the UI": "Obtenir informació de {{name}} a l'interficie d'usuari",
|
||||
"Get started": "Començar",
|
||||
"Get started with {{WEBUI_NAME}}": "Comença amb {{WEBUI_NAME}}",
|
||||
"Global": "Global",
|
||||
@@ -693,9 +700,9 @@
|
||||
"Group Name": "Nom del grup",
|
||||
"Group updated successfully": "Grup actualitzat correctament",
|
||||
"Groups": "Grups",
|
||||
"H1": "",
|
||||
"H2": "",
|
||||
"H3": "",
|
||||
"H1": "H1",
|
||||
"H2": "H2",
|
||||
"H3": "H3",
|
||||
"Haptic Feedback": "Retorn hàptic",
|
||||
"Hello, {{name}}": "Hola, {{name}}",
|
||||
"Help": "Ajuda",
|
||||
@@ -749,9 +756,10 @@
|
||||
"Info": "Informació",
|
||||
"Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "Injectar tot el contingut com a context per a un processament complet, això es recomana per a consultes complexes.",
|
||||
"Input commands": "Entra comandes",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Input Variables": "Variables d'entrada",
|
||||
"Insert": "Inserir",
|
||||
"Insert Follow-Up Prompt to Input": "Inserir un missatge de seguiment per a l'entrada",
|
||||
"Insert Prompt as Rich Text": "Inserir la indicació com a Text Ric",
|
||||
"Install from Github URL": "Instal·lar des de l'URL de Github",
|
||||
"Instant Auto-Send After Voice Transcription": "Enviament automàtic després de la transcripció de veu",
|
||||
"Integration": "Integració",
|
||||
@@ -761,7 +769,7 @@
|
||||
"Invalid JSON file": "Arxiu JSON no vàlid",
|
||||
"Invalid Tag": "Etiqueta no vàlida",
|
||||
"is typing...": "està escrivint...",
|
||||
"Italic": "",
|
||||
"Italic": "Cursiva",
|
||||
"January": "Gener",
|
||||
"Jina API Key": "Clau API de Jina",
|
||||
"join our Discord for help.": "uneix-te al nostre Discord per obtenir ajuda.",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Caducitat del JWT",
|
||||
"JWT Token": "Token JWT",
|
||||
"Kagi Search API Key": "Clau API de Kagi Search",
|
||||
"Keep Follow-Up Prompts in Chat": "Mantenir els missatges de seguiment en el xat",
|
||||
"Keep in Sidebar": "Mantenir a la barra lateral",
|
||||
"Key": "Clau",
|
||||
"Keyboard shortcuts": "Dreceres de teclat",
|
||||
"Knowledge": "Coneixement",
|
||||
"Knowledge Access": "Accés al coneixement",
|
||||
"Knowledge Base": "Base de coneixement",
|
||||
"Knowledge created successfully.": "Coneixement creat correctament.",
|
||||
"Knowledge deleted successfully.": "Coneixement eliminat correctament.",
|
||||
"Knowledge Public Sharing": "Compartir públicament el Coneixement",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Deixa-ho en blanc per utilitzar la indicació predeterminada o introdueix una indicació personalitzada",
|
||||
"Leave model field empty to use the default model.": "Deixa el camp de model buit per utilitzar el model per defecte.",
|
||||
"License": "Llicència",
|
||||
"Lift List": "Aixecar la llista",
|
||||
"Light": "Clar",
|
||||
"Listening...": "Escoltant...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -832,7 +843,7 @@
|
||||
"Manage Tool Servers": "Gestionar els servidors d'eines",
|
||||
"March": "Març",
|
||||
"Markdown": "Markdown",
|
||||
"Markdown (Header)": "",
|
||||
"Markdown (Header)": "Markdown (encapçalament)",
|
||||
"Max Speakers": "Nombre màxim d'altaveus",
|
||||
"Max Upload Count": "Nombre màxim de càrregues",
|
||||
"Max Upload Size": "Mida màxima de càrrega",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "Nova eina",
|
||||
"new-channel": "nou-canal",
|
||||
"Next message": "Missatge següent",
|
||||
"No chats found": "No s'han trobat xats",
|
||||
"No chats found for this user.": "No s'han trobat xats per a aquest usuari.",
|
||||
"No chats found.": "No s'ha trobat xats.",
|
||||
"No content": "No hi ha contingut",
|
||||
@@ -969,7 +981,7 @@
|
||||
"openapi.json URL or Path": "Camí o URL a openapi.json",
|
||||
"Options for running a local vision-language model in the picture description. The parameters refer to a model hosted on Hugging Face. This parameter is mutually exclusive with picture_description_api.": "Opcions per executar un model de llenguatge amb visió local a la descripció de la imatge. Els paràmetres fan referència a un model allotjat a HuggingFace. Aquest paràmetre és mutuament excloent amb picture_description_api.",
|
||||
"or": "o",
|
||||
"Ordered List": "",
|
||||
"Ordered List": "Llista ordenada",
|
||||
"Organize your users": "Organitza els teus usuaris",
|
||||
"Other": "Altres",
|
||||
"OUTPUT": "SORTIDA",
|
||||
@@ -1001,7 +1013,7 @@
|
||||
"Pin": "Fixar",
|
||||
"Pinned": "Fixat",
|
||||
"Pioneer insights": "Perspectives pioneres",
|
||||
"Pipe": "",
|
||||
"Pipe": "Canonada",
|
||||
"Pipeline deleted successfully": "Pipeline eliminada correctament",
|
||||
"Pipeline downloaded successfully": "Pipeline descarregada correctament",
|
||||
"Pipelines": "Pipelines",
|
||||
@@ -1067,12 +1079,12 @@
|
||||
"Releases": "Versions",
|
||||
"Relevance": "Rellevància",
|
||||
"Relevance Threshold": "Límit de rellevància",
|
||||
"Remember Dismissal": "",
|
||||
"Remember Dismissal": "Recordar la decisió de refutar",
|
||||
"Remove": "Eliminar",
|
||||
"Remove {{MODELID}} from list.": "Eliminar {{MODELID}} de la llista",
|
||||
"Remove file": "",
|
||||
"Remove File": "",
|
||||
"Remove image": "",
|
||||
"Remove file": "Eliminar arxiu",
|
||||
"Remove File": "Eliminar arxiu",
|
||||
"Remove image": "Eliminar imatge",
|
||||
"Remove Model": "Eliminar el model",
|
||||
"Remove this tag from list": "Eliminar aquesta etiqueta de la llista",
|
||||
"Rename": "Canviar el nom",
|
||||
@@ -1085,7 +1097,7 @@
|
||||
"Reset Upload Directory": "Restableix el directori de pujades",
|
||||
"Reset Vector Storage/Knowledge": "Restableix el Repositori de vectors/Coneixement",
|
||||
"Reset view": "Netejar la vista",
|
||||
"Response": "",
|
||||
"Response": "Resposta",
|
||||
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Les notifications de resposta no es poden activar perquè els permisos del lloc web han estat rebutjats. Comprova les preferències del navegador per donar l'accés necessari.",
|
||||
"Response splitting": "Divisió de la resposta",
|
||||
"Response Watermark": "Marca d'aigua de la resposta",
|
||||
@@ -1118,7 +1130,7 @@
|
||||
"Search Functions": "Cercar funcions",
|
||||
"Search Knowledge": "Cercar coneixement",
|
||||
"Search Models": "Cercar models",
|
||||
"Search Notes": "",
|
||||
"Search Notes": "Cercar notes",
|
||||
"Search options": "Opcions de cerca",
|
||||
"Search Prompts": "Cercar indicacions",
|
||||
"Search Result Count": "Recompte de resultats de cerca",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Veure què hi ha de nou",
|
||||
"Seed": "Llavor",
|
||||
"Select a base model": "Seleccionar un model base",
|
||||
"Select a conversation to preview": "Seleccionar una conversa a previsualitzar",
|
||||
"Select a engine": "Seleccionar un motor",
|
||||
"Select a function": "Seleccionar una funció",
|
||||
"Select a group": "Seleccionar un grup",
|
||||
@@ -1191,7 +1204,7 @@
|
||||
"Show \"What's New\" modal on login": "Veure 'Què hi ha de nou' a l'entrada",
|
||||
"Show Admin Details in Account Pending Overlay": "Mostrar els detalls de l'administrador a la superposició del compte pendent",
|
||||
"Show All": "Mostrar tot",
|
||||
"Show image preview": "",
|
||||
"Show image preview": "Mostrar la previsualització de la imatge",
|
||||
"Show Less": "Mostrar menys",
|
||||
"Show Model": "Mostrar el model",
|
||||
"Show shortcuts": "Mostrar dreceres",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Registrar-se a {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "Millora significativament la precisió utilitzant un LLM per millorar taules, formularis, matemàtiques en línia i detecció de layout. Augmentarà la latència. Per defecte és Verdader.",
|
||||
"Signing in to {{WEBUI_NAME}}": "Iniciant sessió a {{WEBUI_NAME}}",
|
||||
"Sink List": "Enfonsar la llista",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "Ometre la memòria cau",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "Omet la memòria cai i torna a executar la inferència. Per defecte és Fals.",
|
||||
@@ -1219,7 +1233,7 @@
|
||||
"Stop Generating": "Atura la generació",
|
||||
"Stop Sequence": "Atura la seqüència",
|
||||
"Stream Chat Response": "Fer streaming de la resposta del xat",
|
||||
"Strikethrough": "",
|
||||
"Strikethrough": "Ratllat",
|
||||
"Strip Existing OCR": "Eliminar OCR existent",
|
||||
"Strip existing OCR text from the PDF and re-run OCR. Ignored if Force OCR is enabled. Defaults to False.": "Elimina el text OCR existent del PDF i torna a executar l'OCR. S'ignora si Força OCR està habilitat. Per defecte és Fals.",
|
||||
"STT Model": "Model SST",
|
||||
@@ -1242,7 +1256,7 @@
|
||||
"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "El mostreig sense cua s'utilitza per reduir l'impacte de tokens menys probables de la sortida. Un valor més alt (p. ex., 2,0) reduirà més l'impacte, mentre que un valor d'1,0 desactiva aquesta configuració.",
|
||||
"Talk to model": "Parlar amb el model",
|
||||
"Tap to interrupt": "Prem per interrompre",
|
||||
"Task List": "",
|
||||
"Task List": "Llista de tasques",
|
||||
"Task Model": "Model de tasques",
|
||||
"Tasks": "Tasques",
|
||||
"Tavily API Key": "Clau API de Tavily",
|
||||
@@ -1277,7 +1291,7 @@
|
||||
"This channel was created on {{createdAt}}. This is the very beginning of the {{channelName}} channel.": "Aquest canal es va crear el dia {{createdAt}}. Aquest és el començament del canal {{channelName}}.",
|
||||
"This chat won't appear in history and your messages will not be saved.": "Aquest xat no apareixerà a l'historial i els teus missatges no es desaran.",
|
||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Això assegura que les teves converses valuoses queden desades de manera segura a la teva base de dades. Gràcies!",
|
||||
"This feature is experimental and may be modified or discontinued without notice.": "",
|
||||
"This feature is experimental and may be modified or discontinued without notice.": "Aquesta funció és experimental i es pot modificar o deixar de ser disponible sense previ avís.",
|
||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Aquesta és una funció experimental, és possible que no funcioni com s'espera i està subjecta a canvis en qualsevol moment.",
|
||||
"This model is not publicly available. Please select another model.": "Aquest model no està disponible públicament. Seleccioneu-ne un altre.",
|
||||
"This option controls how long the model will stay loaded into memory following the request (default: 5m)": "Aquesta opció controla quant temps el model romandrà carregat en memòria després de la sol·licitud (per defecte: 5m)",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Per accedir a la WebUI, poseu-vos en contacte amb l'administrador. Els administradors poden gestionar els estats dels usuaris des del tauler d'administració.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Per adjuntar la base de coneixement aquí, afegiu-la primer a l'espai de treball \"Coneixement\".",
|
||||
"To learn more about available endpoints, visit our documentation.": "Per obtenir més informació sobre els punts d'accés disponibles, visiteu la nostra documentació.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Per protegir la privadesa, només es comparteixen puntuacions, identificadors de models, etiquetes i metadades dels comentaris; els registres de xat romanen privats i no s'inclouen.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Per seleccionar accions aquí, afegeix-les primer a l'espai de treball \"Funcions\".",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Per seleccionar filtres aquí, afegeix-los primer a l'espai de treball \"Funcions\".",
|
||||
@@ -1351,11 +1366,12 @@
|
||||
"Unarchive All": "Desarxivar tot",
|
||||
"Unarchive All Archived Chats": "Desarxivar tots els xats arxivats",
|
||||
"Unarchive Chat": "Desarxivar xat",
|
||||
"Underline": "",
|
||||
"Underline": "Subratllat",
|
||||
"Unloads {{FROM_NOW}}": "Es descarrega {{FROM_NOW}}",
|
||||
"Unlock mysteries": "Desbloqueja els misteris",
|
||||
"Unpin": "Alliberar",
|
||||
"Unravel secrets": "Descobreix els secrets",
|
||||
"Unsupported file type.": "Tipus no suportat",
|
||||
"Untagged": "Sense etiquetes",
|
||||
"Untitled": "Sense títol",
|
||||
"Update": "Actualitzar",
|
||||
@@ -1387,18 +1403,18 @@
|
||||
"user": "usuari",
|
||||
"User": "Usuari",
|
||||
"User location successfully retrieved.": "Ubicació de l'usuari obtinguda correctament",
|
||||
"User menu": "",
|
||||
"User menu": "Menú d'usuari",
|
||||
"User Webhooks": "Webhooks d'usuari",
|
||||
"Username": "Nom d'usuari",
|
||||
"Users": "Usuaris",
|
||||
"Using Entire Document": "Utilitzant tot el document",
|
||||
"Using Focused Retrieval": "Utilitzant RAG",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "S'utilitza el model d'Arena predeterminat amb tots els models. Clica el botó més per afegir models personalitzats.",
|
||||
"Utilize": "Utilitzar",
|
||||
"Valid time units:": "Unitats de temps vàlides:",
|
||||
"Valves": "Valves",
|
||||
"Valves updated": "Valves actualitzades",
|
||||
"Valves updated successfully": "Valves actualitzades correctament",
|
||||
"variable": "variable",
|
||||
"variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.",
|
||||
"Verify Connection": "Verificar la connexió",
|
||||
"Verify SSL Certificate": "Verificar el certificat SSL",
|
||||
"Version": "Versió",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Paghimo og account",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "I-edit ang tiggamit",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "",
|
||||
"Enter Google PSE API Key": "",
|
||||
"Enter Google PSE Engine Id": "",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Hapsay nga paghatud sa daghang mga tipik sa eksternal nga mga tubag",
|
||||
"Focus chat input": "Pag-focus sa entry sa diskusyon",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Pagsulod sa input commands",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "",
|
||||
"Instant Auto-Send After Voice Transcription": "",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Pag-expire sa JWT",
|
||||
"JWT Token": "JWT token",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "Mga shortcut sa keyboard",
|
||||
"Knowledge": "",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "Kahayag",
|
||||
"Listening...": "",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Tan-awa unsay bag-o",
|
||||
"Seed": "Binhi",
|
||||
"Select a base model": "",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "",
|
||||
"Select a function": "",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "Mga tiggamit",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "Sa paggamit",
|
||||
"Valid time units:": "Balido nga mga yunit sa oras:",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "variable",
|
||||
"variable to have them replaced with clipboard content.": "variable aron pulihan kini sa mga sulud sa clipboard.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Bersyon",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Vytvořit účet",
|
||||
"Create Admin Account": "Vytvořit admin účet",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Vytvořit skupinu",
|
||||
"Create Knowledge": "Vytvořit knowledge",
|
||||
"Create new key": "Vytvořit nový klíč",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Upravit paměť",
|
||||
"Edit User": "Upravit uživatele",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Zadejte URL adresu Github Raw",
|
||||
"Enter Google PSE API Key": "Zadejte klíč rozhraní API Google PSE",
|
||||
"Enter Google PSE Engine Id": "Zadejte ID vyhledávacího mechanismu Google PSE",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Nepodařilo se přidat soubor.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Nepodařilo se přečíst obsah schránky",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Plynule streamujte velké externí části odpovědí",
|
||||
"Focus chat input": "Zaměřte se na vstup chatu",
|
||||
"Folder deleted successfully": "Složka byla úspěšně smazána",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Název složky nesmí být prázdný.",
|
||||
"Folder name updated successfully": "Název složky byl úspěšně aktualizován.",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Vstupní příkazy",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Instalace z URL adresy Githubu",
|
||||
"Instant Auto-Send After Voice Transcription": "Okamžité automatické odeslání po přepisu hlasu",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Vypršení JWT",
|
||||
"JWT Token": "JWT Token (JSON Web Token)",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "Klávesové zkratky",
|
||||
"Knowledge": "Znalosti",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Znalost úspěšně vytvořena.",
|
||||
"Knowledge deleted successfully.": "Znalosti byly úspěšně odstraněny.",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Nechte prázdné pro použití výchozího podnětu, nebo zadejte vlastní podnět.",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "Světlo",
|
||||
"Listening...": "Poslouchání...",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Podívejte se, co je nového",
|
||||
"Seed": "Semínko",
|
||||
"Select a base model": "Vyberte základní model",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Vyberte engine",
|
||||
"Select a function": "Vyberte funkci",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Zaregistrujte se na {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "Přihlašování do {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Pro přístup k WebUI se prosím obraťte na administrátora. Administrátoři mohou spravovat stavy uživatelů z Admin Panelu.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Chcete-li zde připojit znalostní databázi, nejprve ji přidejte do workspace \"Knowledge\".",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Aby byla chráněna vaše soukromí, z vaší zpětné vazby jsou sdílena pouze hodnocení, ID modelů, značky a metadata – vaše chatové záznamy zůstávají soukromé a nejsou zahrnuty.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Chcete-li zde vybrat akce, nejprve je přidejte do pracovní plochy \"Functions\".",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Chcete-li zde vybrat filtry, nejprve je přidejte do workspace „Functions“.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "Odepnout",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Nebyla označena",
|
||||
"Untitled": "",
|
||||
"Update": "Aktualizovat",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "Uživatelské jméno",
|
||||
"Users": "Uživatelé",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Použití výchozího modelu arény se všemi modely. Kliknutím na tlačítko plus přidejte vlastní modely.",
|
||||
"Utilize": "Využít",
|
||||
"Valid time units:": "Platné časové jednotky:",
|
||||
"Valves": "Ventily",
|
||||
"Valves updated": "Ventily aktualizovány",
|
||||
"Valves updated successfully": "Ventily byly úspěšně aktualizovány.",
|
||||
"variable": "proměnná",
|
||||
"variable to have them replaced with clipboard content.": "proměnnou, aby byl jejich obsah nahrazen obsahem schránky.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Verze",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Opret profil",
|
||||
"Create Admin Account": "Opret administrator profil",
|
||||
"Create Channel": "Opret kanal",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Opret gruppe",
|
||||
"Create Knowledge": "Opret Viden",
|
||||
"Create new key": "Opret en ny nøgle",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Rediger kanal",
|
||||
"Edit Connection": "Rediger forbindelse",
|
||||
"Edit Default Permissions": "Rediger standard tilladelser",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Rediger hukommelse",
|
||||
"Edit User": "Rediger bruger",
|
||||
"Edit User Group": "Rediger brugergruppe",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Indtast Github Raw URL",
|
||||
"Enter Google PSE API Key": "Indtast Google PSE API-nøgle",
|
||||
"Enter Google PSE Engine Id": "Indtast Google PSE Engine ID",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "Ekstern Web Loader URL",
|
||||
"External Web Search API Key": "Ekstern Web Search API-nøgle",
|
||||
"External Web Search URL": "Ekstern Web Search URL",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Kunne ikke tilføje fil.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "Kunne ikke forbinde til {{URL}} OpenAPI tool server",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "Kunne ikke hente modeller",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "Kunne ikke indlæse filindhold.",
|
||||
"Failed to read clipboard contents": "Kunne ikke læse indholdet af udklipsholderen",
|
||||
"Failed to save connections": "Kunne ikke gemme forbindelser",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Stream store eksterne svar chunks flydende",
|
||||
"Focus chat input": "Fokuser på chatinput",
|
||||
"Folder deleted successfully": "Mappe fjernet.",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Mappenavn kan ikke være tom.",
|
||||
"Folder name updated successfully": "Mappenavn opdateret.",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Inputkommandoer",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Installer fra Github URL",
|
||||
"Instant Auto-Send After Voice Transcription": "Øjeblikkelig automatisk afsendelse efter stemmetransskription",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT-udløb",
|
||||
"JWT Token": "JWT-token",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "Nøgle",
|
||||
"Keyboard shortcuts": "Tastaturgenveje",
|
||||
"Knowledge": "Viden",
|
||||
"Knowledge Access": "Videnadgang",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Viden oprettet.",
|
||||
"Knowledge deleted successfully.": "Viden slettet.",
|
||||
"Knowledge Public Sharing": "Viden offentlig deling",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Lad stå tomt for at bruge standardprompten, eller indtast en brugerdefineret prompt",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "Licens",
|
||||
"Lift List": "",
|
||||
"Light": "Lys",
|
||||
"Listening...": "Lytter...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "Nyt værktøj",
|
||||
"new-channel": "",
|
||||
"Next message": "Næste besked",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "Ingen besked-tråde fundet for denne bruger.",
|
||||
"No chats found.": "Ingen besked-tråde fundet.",
|
||||
"No content": "Intet indhold",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Se, hvad der er nyt",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "Vælg en basemodel",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Vælg en engine",
|
||||
"Select a function": "Vælg en funktion",
|
||||
"Select a group": "Vælg en gruppe",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Tilmeld dig {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "Logger ind på {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "For at få adgang til WebUI skal du kontakte administratoren. Administratorer kan administrere brugerstatus fra administrationspanelet.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "For at vedhæfte vidensbase her skal du først tilføje dem til \"Viden\"-arbejdsområdet.",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "For at vælge handlinger her skal du først tilføje dem til \"Funktioner\"-arbejdsområdet.",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "For at vælge filtre her skal du først tilføje dem til \"Funktioner\"-arbejdsområdet.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Lås op for mysterier",
|
||||
"Unpin": "Frigør",
|
||||
"Unravel secrets": "Afslør hemmeligheder",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Uden mærker",
|
||||
"Untitled": "Unavngivet",
|
||||
"Update": "Opdater",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "Bruger Webhooks",
|
||||
"Username": "Brugernavn",
|
||||
"Users": "Brugere",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Brug den standard Arena-model med alle modeller. Klik på plusknappen for at tilføje brugerdefinerede modeller.",
|
||||
"Utilize": "Anvend",
|
||||
"Valid time units:": "Gyldige tidsenheder:",
|
||||
"Valves": "Ventiler",
|
||||
"Valves updated": "Ventiler opdateret",
|
||||
"Valves updated successfully": "Ventiler opdateret.",
|
||||
"variable": "variabel",
|
||||
"variable to have them replaced with clipboard content.": "variabel for at få dem erstattet med indholdet af udklipsholderen.",
|
||||
"Verify Connection": "Verificer forbindelse",
|
||||
"Verify SSL Certificate": "Verificer SSL-certifikat",
|
||||
"Version": "Version",
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
"[Yesterday at] h:mm A": "",
|
||||
"{{ models }}": "{{ Modelle }}",
|
||||
"{{COUNT}} Available Tools": "{{COUNT}} verfügbare Werkzeuge",
|
||||
"{{COUNT}} characters": "",
|
||||
"{{COUNT}} characters": "{{COUNT}} Zeichen",
|
||||
"{{COUNT}} hidden lines": "{{COUNT}} versteckte Zeilen",
|
||||
"{{COUNT}} Replies": "{{COUNT}} Antworten",
|
||||
"{{COUNT}} words": "",
|
||||
"{{COUNT}} words": "{{COUNT}} Wörter",
|
||||
"{{user}}'s Chats": "{{user}}s Chats",
|
||||
"{{webUIName}} Backend Required": "{{webUIName}}-Backend erforderlich",
|
||||
"*Prompt node ID(s) are required for image generation": "*Prompt-Node-ID(s) sind für die Bildgenerierung erforderlich",
|
||||
@@ -28,7 +28,7 @@
|
||||
"Account": "Konto",
|
||||
"Account Activation Pending": "Kontoaktivierung ausstehend",
|
||||
"Accurate information": "Präzise Information(en)",
|
||||
"Action": "",
|
||||
"Action": "Aktion",
|
||||
"Actions": "Aktionen",
|
||||
"Activate": "Aktivieren",
|
||||
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Aktivieren Sie diesen Befehl, indem Sie \"/{{COMMAND}}\" in die Chat-Eingabe eingeben.",
|
||||
@@ -61,7 +61,7 @@
|
||||
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Administratoren haben jederzeit Zugriff auf alle Werkzeuge; Benutzern müssen Werkzeuge pro Modell im Arbeitsbereich zugewiesen werden.",
|
||||
"Advanced Parameters": "Erweiterte Parameter",
|
||||
"Advanced Params": "Erweiterte Parameter",
|
||||
"AI": "",
|
||||
"AI": "KI",
|
||||
"All": "Alle",
|
||||
"All Documents": "Alle Dokumente",
|
||||
"All models deleted successfully": "Alle Modelle erfolgreich gelöscht",
|
||||
@@ -72,7 +72,7 @@
|
||||
"Allow Chat Edit": "Bearbeiten von Chats erlauben",
|
||||
"Allow Chat Export": "Erlaube Chat Export",
|
||||
"Allow Chat Share": "Erlaube Chat teilen",
|
||||
"Allow Chat System Prompt": "",
|
||||
"Allow Chat System Prompt": "Erlaube Chat System Prompt",
|
||||
"Allow File Upload": "Hochladen von Dateien erlauben",
|
||||
"Allow Multiple Models in Chat": "Multiple Modelle in Chat erlauben",
|
||||
"Allow non-local voices": "Nicht-lokale Stimmen erlauben",
|
||||
@@ -98,7 +98,7 @@
|
||||
"and {{COUNT}} more": "und {{COUNT}} mehr",
|
||||
"and create a new shared link.": "und erstellen Sie einen neuen freigegebenen Link.",
|
||||
"Android": "Android",
|
||||
"API": "",
|
||||
"API": "API",
|
||||
"API Base URL": "API-Basis-URL",
|
||||
"API details for using a vision-language model in the picture description. This parameter is mutually exclusive with picture_description_local.": "",
|
||||
"API Key": "API-Schlüssel",
|
||||
@@ -159,15 +159,15 @@
|
||||
"Bing Search V7 Endpoint": "Bing Search V7-Endpunkt",
|
||||
"Bing Search V7 Subscription Key": "Bing Search V7-Abonnement-Schlüssel",
|
||||
"Bocha Search API Key": "Bocha Search API-Schlüssel",
|
||||
"Bold": "",
|
||||
"Bold": "Fett",
|
||||
"Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "Verstärkung oder Bestrafung spezifischer Token für eingeschränkte Antworten. Bias-Werte werden zwischen -100 und 100 (einschließlich) begrenzt. (Standard: keine)",
|
||||
"Both Docling OCR Engine and Language(s) must be provided or both left empty.": "Entweder müssen Docling OCR-Engine und Sprache(n) angegeben oder beide leer gelassen werden.",
|
||||
"Brave Search API Key": "Brave Search API-Schlüssel",
|
||||
"Bullet List": "",
|
||||
"Bullet List": "Aufzählungsliste",
|
||||
"By {{name}}": "Von {{name}}",
|
||||
"Bypass Embedding and Retrieval": "Embedding und Retrieval umgehen",
|
||||
"Bypass Web Loader": "",
|
||||
"Cache Base Model List": "",
|
||||
"Cache Base Model List": "Basis Modell-Liste cachen",
|
||||
"Calendar": "Kalender",
|
||||
"Call": "Anrufen",
|
||||
"Call feature is not supported when using Web STT engine": "Die Anruffunktion wird nicht unterstützt, wenn die Web-STT-Engine verwendet wird.",
|
||||
@@ -224,7 +224,7 @@
|
||||
"Close Configure Connection Modal": "",
|
||||
"Close modal": "",
|
||||
"Close settings modal": "",
|
||||
"Code Block": "",
|
||||
"Code Block": "Codeblock",
|
||||
"Code execution": "Codeausführung",
|
||||
"Code Execution": "Codeausführung",
|
||||
"Code Execution Engine": "Programm zur Codeausführung",
|
||||
@@ -243,7 +243,7 @@
|
||||
"ComfyUI Workflow": "ComfyUI-Workflow",
|
||||
"ComfyUI Workflow Nodes": "ComfyUI-Workflow-Knoten",
|
||||
"Command": "Befehl",
|
||||
"Comment": "",
|
||||
"Comment": "Kommentar",
|
||||
"Completions": "Vervollständigungen",
|
||||
"Concurrent Requests": "Anzahl gleichzeitiger Anfragen",
|
||||
"Configure": "Konfigurieren",
|
||||
@@ -258,7 +258,7 @@
|
||||
"Connection Type": "Verbindungstyp",
|
||||
"Connections": "Verbindungen",
|
||||
"Connections saved successfully": "Verbindungen erfolgreich gespeichert",
|
||||
"Connections settings updated": "",
|
||||
"Connections settings updated": "Verbindungseinstellungen aktualisiert",
|
||||
"Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "Beschränkt den reasoning effort für Reasoning-Modelle. Nur anwendbar auf Reasoning-Modelle von spezifischen Anbietern, die den reasoning effort Parameter unterstützen.",
|
||||
"Contact Admin for WebUI Access": "Kontaktieren Sie den Administrator für den Zugriff auf die Weboberfläche",
|
||||
"Content": "",
|
||||
@@ -279,7 +279,7 @@
|
||||
"Copy Formatted Text": "Formatierten Text kopieren",
|
||||
"Copy last code block": "Letzten Codeblock kopieren",
|
||||
"Copy last response": "Letzte Antwort kopieren",
|
||||
"Copy link": "",
|
||||
"Copy link": "Link kopieren",
|
||||
"Copy Link": "Link kopieren",
|
||||
"Copy to clipboard": "In die Zwischenablage kopieren",
|
||||
"Copying to clipboard was successful!": "Das Kopieren in die Zwischenablage war erfolgreich!",
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Konto erstellen",
|
||||
"Create Admin Account": "Administrator-Account erstellen",
|
||||
"Create Channel": "Kanal erstellen",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Gruppe erstellen",
|
||||
"Create Knowledge": "Wissen erstellen",
|
||||
"Create new key": "Neuen Schlüssel erstellen",
|
||||
@@ -304,20 +305,20 @@
|
||||
"Current Model": "Aktuelles Modell",
|
||||
"Current Password": "Aktuelles Passwort",
|
||||
"Custom": "Benutzerdefiniert",
|
||||
"Custom description enabled": "",
|
||||
"Custom Parameter Name": "",
|
||||
"Custom Parameter Value": "",
|
||||
"Custom description enabled": "Benutzerdefinierte Beschreibung aktiviert",
|
||||
"Custom Parameter Name": "Benutzerdefinierter Parameter Name",
|
||||
"Custom Parameter Value": "Benutzerdefinierter Parameter Wert",
|
||||
"Danger Zone": "Gefahrenzone",
|
||||
"Dark": "Dunkel",
|
||||
"Database": "Datenbank",
|
||||
"Datalab Marker API": "",
|
||||
"Datalab Marker API Key required.": "",
|
||||
"DD/MM/YYYY": "",
|
||||
"DD/MM/YYYY": "TT/MM/JJJJ",
|
||||
"December": "Dezember",
|
||||
"Default": "Standard",
|
||||
"Default (Open AI)": "Standard (Open AI)",
|
||||
"Default (SentenceTransformers)": "Standard (SentenceTransformers)",
|
||||
"Default description enabled": "",
|
||||
"Default description enabled": "Standard Beschreibung aktiviert",
|
||||
"Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model's built-in tool-calling capabilities, but requires the model to inherently support this feature.": "Der Standardmodus funktioniert mit einer breiteren Auswahl von Modellen, indem er Werkzeuge einmal vor der Ausführung aufruft. Der native Modus nutzt die integrierten Tool-Aufrufmöglichkeiten des Modells, erfordert jedoch, dass das Modell diese Funktion von Natur aus unterstützt.",
|
||||
"Default Model": "Standardmodell",
|
||||
"Default model updated": "Standardmodell aktualisiert",
|
||||
@@ -353,14 +354,14 @@
|
||||
"Describe your knowledge base and objectives": "Beschreiben Sie Ihren Wissensspeicher und Ihre Ziele",
|
||||
"Description": "Beschreibung",
|
||||
"Detect Artifacts Automatically": "Artefakte automatisch erkennen",
|
||||
"Dictate": "",
|
||||
"Dictate": "Diktieren",
|
||||
"Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt",
|
||||
"Direct": "Direkt",
|
||||
"Direct Connections": "Direktverbindungen",
|
||||
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Direktverbindungen ermöglichen es Benutzern, sich mit ihren eigenen OpenAI-kompatiblen API-Endpunkten zu verbinden.",
|
||||
"Direct Tool Servers": "Direkt verbundene Werkzeug-Server",
|
||||
"Disable Code Interpreter": "",
|
||||
"Disable Image Extraction": "",
|
||||
"Disable Code Interpreter": "Deaktivierte Code Interpreter",
|
||||
"Disable Image Extraction": "Deaktivierte Bildextraktion",
|
||||
"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "",
|
||||
"Disabled": "Deaktiviert",
|
||||
"Discover a function": "Entdecken Sie weitere Funktionen",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "z. B. pdf, docx, txt",
|
||||
"e.g. Tools for performing various operations": "z. B. Werkzeuge für verschiedene Operationen",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "z. B. 3, 4, 5 (leer lassen für Standard)",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "z. B. en-US,de-DE (freilassen für automatische Erkennung)",
|
||||
"e.g., westus (leave blank for eastus)": "z. B. westus (leer lassen für eastus)",
|
||||
"e.g.) en,fr,de": "z. B. en,fr,de",
|
||||
@@ -422,12 +423,13 @@
|
||||
"Edit Channel": "Kanal bearbeiten",
|
||||
"Edit Connection": "Verbindung bearbeiten",
|
||||
"Edit Default Permissions": "Standardberechtigungen bearbeiten",
|
||||
"Edit Folder": "Ordner bearbeiten",
|
||||
"Edit Memory": "Erinnerungen bearbeiten",
|
||||
"Edit User": "Benutzer bearbeiten",
|
||||
"Edit User Group": "Benutzergruppe bearbeiten",
|
||||
"Edited": "",
|
||||
"Editing": "",
|
||||
"Eject": "",
|
||||
"Edited": "Bearbeitet",
|
||||
"Editing": "Bearbeite",
|
||||
"Eject": "Auswerfen",
|
||||
"ElevenLabs": "ElevenLabs",
|
||||
"Email": "E-Mail",
|
||||
"Embark on adventures": "Abenteuer erleben",
|
||||
@@ -468,7 +470,7 @@
|
||||
"Enter Chunk Overlap": "Geben Sie die Blocküberlappung ein",
|
||||
"Enter Chunk Size": "Geben Sie die Blockgröße ein",
|
||||
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Geben Sie kommagetrennte \"token:bias_value\"-Paare ein (Beispiel: 5432:100, 413:-100)",
|
||||
"Enter Config in JSON format": "",
|
||||
"Enter Config in JSON format": "Konfiguration in JSON Format eingeben",
|
||||
"Enter content for the pending user info overlay. Leave empty for default.": "Geben Sie Inhalt für das Overlay 'Ausstehende Kontoaktivierung' ein. Für Standard leer lassen.",
|
||||
"Enter Datalab Marker API Key": "",
|
||||
"Enter description": "Geben Sie eine Beschreibung ein",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "URL für externe Websuche eingeben",
|
||||
"Enter Firecrawl API Base URL": "Geben Sie die Firecrawl Basis-URL ein",
|
||||
"Enter Firecrawl API Key": "Geben Sie den Firecrawl API-Schlüssel ein",
|
||||
"Enter folder name": "Ordnernamen eingeben",
|
||||
"Enter Github Raw URL": "Geben Sie die Github Raw-URL ein",
|
||||
"Enter Google PSE API Key": "Geben Sie den Google PSE-API-Schlüssel ein",
|
||||
"Enter Google PSE Engine Id": "Geben Sie die Google PSE-Engine-ID ein",
|
||||
@@ -599,15 +602,17 @@
|
||||
"External Web Loader URL": "Externer Web-Loader URL",
|
||||
"External Web Search API Key": "Externe Websuche API-Schlüssel",
|
||||
"External Web Search URL": "Externe Websuche URL",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Fehler beim Hinzufügen der Datei.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "Verbindung zum OpenAPI-Toolserver {{URL}} fehlgeschlagen",
|
||||
"Failed to copy link": "Fehler beim kopieren des Links",
|
||||
"Failed to create API Key.": "Fehler beim Erstellen des API-Schlüssels.",
|
||||
"Failed to delete note": "Notiz konnte nicht gelöscht werden",
|
||||
"Failed to extract content from the file: {{error}}": "",
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to extract content from the file: {{error}}": "Fehler beim extrahieren des Inhalts aus der Datei: {{error}}",
|
||||
"Failed to extract content from the file.": "Fehler beim extrahieren des Inhalts aus der Datei.",
|
||||
"Failed to fetch models": "Fehler beim Abrufen der Modelle",
|
||||
"Failed to generate title": "",
|
||||
"Failed to generate title": "Fehler beim generieren des Titels",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "Fehler beim Laden des Dateiinhalts.",
|
||||
"Failed to read clipboard contents": "Fehler beim Lesen des Inhalts der Zwischenablage.",
|
||||
"Failed to save connections": "Verbindungen konnten nicht gespeichert werden",
|
||||
@@ -631,7 +636,7 @@
|
||||
"File Upload": "Dateiupload",
|
||||
"File uploaded successfully": "Datei erfolgreich hochgeladen",
|
||||
"Files": "Dateien",
|
||||
"Filter": "",
|
||||
"Filter": "Filter",
|
||||
"Filter is now globally disabled": "Filter ist jetzt global deaktiviert",
|
||||
"Filter is now globally enabled": "Filter ist jetzt global aktiviert",
|
||||
"Filters": "Filter",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Nahtlose Übertragung großer externer Antwortabschnitte",
|
||||
"Focus chat input": "Chat-Eingabe fokussieren",
|
||||
"Folder deleted successfully": "Ordner erfolgreich gelöscht",
|
||||
"Folder Name": "Ordner-Name",
|
||||
"Folder name cannot be empty.": "Ordnername darf nicht leer sein.",
|
||||
"Folder name updated successfully": "Ordnername erfolgreich aktualisiert",
|
||||
"Folder updated successfully": "Ordner erfolgreich aktualisiert",
|
||||
"Follow up": "Folgefragen",
|
||||
"Follow Up Generation": "Folgefragen Generierung",
|
||||
"Follow Up Generation Prompt": "Prompt für Folgefragen Generierung",
|
||||
@@ -749,9 +756,10 @@
|
||||
"Info": "Info",
|
||||
"Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "Gesamten Inhalt als Kontext für umfassende Verarbeitung einfügen, dies wird für komplexe Abfragen empfohlen.",
|
||||
"Input commands": "Eingabebefehle",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Input Variables": "Eingabe Variablen",
|
||||
"Insert": "Einfügen",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "Prompt als Rich Text einfügen",
|
||||
"Install from Github URL": "Von GitHub-URL installieren",
|
||||
"Instant Auto-Send After Voice Transcription": "Spracherkennung direkt absenden",
|
||||
"Integration": "Integration",
|
||||
@@ -761,7 +769,7 @@
|
||||
"Invalid JSON file": "Ungültige JSON Datei",
|
||||
"Invalid Tag": "Ungültiger Tag",
|
||||
"is typing...": "schreibt ...",
|
||||
"Italic": "",
|
||||
"Italic": "Kursiv",
|
||||
"January": "Januar",
|
||||
"Jina API Key": "Jina-API-Schlüssel",
|
||||
"join our Discord for help.": "Treten Sie unserem Discord bei, um Hilfe zu erhalten.",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT-Ablauf",
|
||||
"JWT Token": "JWT-Token",
|
||||
"Kagi Search API Key": "Kagi Search API-Schlüssel",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "In Seitenleiste anzeigen",
|
||||
"Key": "Schlüssel",
|
||||
"Keyboard shortcuts": "Tastenkombinationen",
|
||||
"Knowledge": "Wissen",
|
||||
"Knowledge Access": "Wissenszugriff",
|
||||
"Knowledge Base": "Wissensdatenbank",
|
||||
"Knowledge created successfully.": "Wissen erfolgreich erstellt.",
|
||||
"Knowledge deleted successfully.": "Wissen erfolgreich gelöscht.",
|
||||
"Knowledge Public Sharing": "Öffentliche Freigabe von Wissen",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Leer lassen, um den Standardprompt zu verwenden, oder geben Sie einen benutzerdefinierten Prompt ein",
|
||||
"Leave model field empty to use the default model.": "Leer lassen, um das Standardmodell zu verwenden.",
|
||||
"License": "Lizenz",
|
||||
"Lift List": "",
|
||||
"Light": "Hell",
|
||||
"Listening...": "Höre zu...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "Neues Werkzeug",
|
||||
"new-channel": "neuer-kanal",
|
||||
"Next message": "Nächste Nachricht",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "Keine Chats für diesen Nutzer gefunden.",
|
||||
"No chats found.": "Keine Chats gefunden.",
|
||||
"No content": "Kein Inhalt",
|
||||
@@ -940,7 +952,7 @@
|
||||
"Ollama API settings updated": "Ollama-API-Einstellungen aktualisiert",
|
||||
"Ollama Version": "Ollama-Version",
|
||||
"On": "Ein",
|
||||
"OneDrive": "",
|
||||
"OneDrive": "OneDrive",
|
||||
"Only active when \"Paste Large Text as File\" setting is toggled on.": "Nur aktiv, wenn die \"Großen Text als Datei einfügen\" Option aktiviert ist.",
|
||||
"Only active when the chat input is in focus and an LLM is generating a response.": "Nur aktiv, wenn die Eingabe im Chat ausgewählt ist und ein LLM gerade eine Antwort generiert.",
|
||||
"Only alphanumeric characters and hyphens are allowed": "Nur alphanumerische Zeichen und Bindestriche sind erlaubt",
|
||||
@@ -969,7 +981,7 @@
|
||||
"openapi.json URL or Path": "",
|
||||
"Options for running a local vision-language model in the picture description. The parameters refer to a model hosted on Hugging Face. This parameter is mutually exclusive with picture_description_api.": "",
|
||||
"or": "oder",
|
||||
"Ordered List": "",
|
||||
"Ordered List": "Geordnete Liste",
|
||||
"Organize your users": "Organisieren Sie Ihre Benutzer",
|
||||
"Other": "Andere",
|
||||
"OUTPUT": "AUSGABE",
|
||||
@@ -1051,8 +1063,8 @@
|
||||
"Re-rank models by topic similarity": "Modelle nach thematischer Ähnlichkeit neu ordnen",
|
||||
"Read": "Lesen",
|
||||
"Read Aloud": "Vorlesen",
|
||||
"Reason": "",
|
||||
"Reasoning Effort": "Schlussfolgerungsaufwand",
|
||||
"Reason": "Nachdenken",
|
||||
"Reasoning Effort": "Nachdenk-Aufwand",
|
||||
"Record": "Aufzeichnen",
|
||||
"Record voice": "Stimme aufnehmen",
|
||||
"Redirecting you to Open WebUI Community": "Sie werden zur OpenWebUI-Community weitergeleitet",
|
||||
@@ -1064,15 +1076,15 @@
|
||||
"Reindex": "Neu indexieren",
|
||||
"Reindex Knowledge Base Vectors": "Vektoren der Wissensdatenbank neu indizieren",
|
||||
"Release Notes": "Veröffentlichungshinweise",
|
||||
"Releases": "",
|
||||
"Releases": "Versionen",
|
||||
"Relevance": "Relevanz",
|
||||
"Relevance Threshold": "Relevanzschwelle",
|
||||
"Remember Dismissal": "",
|
||||
"Remove": "Entfernen",
|
||||
"Remove {{MODELID}} from list.": "{{MODELID}} von der Liste entfernen.",
|
||||
"Remove file": "",
|
||||
"Remove File": "",
|
||||
"Remove image": "",
|
||||
"Remove file": "Datei entfernen",
|
||||
"Remove File": "Datei entfernen",
|
||||
"Remove image": "Bild entfernen",
|
||||
"Remove Model": "Modell entfernen",
|
||||
"Remove this tag from list": "Diesen Tag von der Liste entfernen",
|
||||
"Rename": "Umbenennen",
|
||||
@@ -1085,7 +1097,7 @@
|
||||
"Reset Upload Directory": "Upload-Verzeichnis zurücksetzen",
|
||||
"Reset Vector Storage/Knowledge": "Vektorspeicher/Wissen zurücksetzen",
|
||||
"Reset view": "Ansicht zurücksetzen",
|
||||
"Response": "",
|
||||
"Response": "Antwort",
|
||||
"Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Benachrichtigungen können nicht aktiviert werden, da die Website-Berechtigungen abgelehnt wurden. Bitte besuchen Sie Ihre Browser-Einstellungen, um den erforderlichen Zugriff zu gewähren.",
|
||||
"Response splitting": "Antwortaufteilung",
|
||||
"Response Watermark": "Antwort Wasserzeichen",
|
||||
@@ -1118,7 +1130,7 @@
|
||||
"Search Functions": "Funktionen durchsuchen...",
|
||||
"Search Knowledge": "Wissen durchsuchen",
|
||||
"Search Models": "Modelle durchsuchen...",
|
||||
"Search Notes": "",
|
||||
"Search Notes": "Notizen durchsuchen...",
|
||||
"Search options": "Suchoptionen",
|
||||
"Search Prompts": "Prompts durchsuchen...",
|
||||
"Search Result Count": "Anzahl der Suchergebnisse",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Entdecken Sie die Neuigkeiten",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "Wählen Sie ein Basismodell",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Wählen Sie eine Engine",
|
||||
"Select a function": "Wählen Sie eine Funktion",
|
||||
"Select a group": "Wählen Sie eine Gruppe",
|
||||
@@ -1191,7 +1204,7 @@
|
||||
"Show \"What's New\" modal on login": "\"Was gibt's Neues\"-Modal beim Anmelden anzeigen",
|
||||
"Show Admin Details in Account Pending Overlay": "Admin-Details im Account-Pending-Overlay anzeigen",
|
||||
"Show All": "Alle anzeigen",
|
||||
"Show image preview": "",
|
||||
"Show image preview": "Bildvorschau anzeigen",
|
||||
"Show Less": "Weniger anzeigen",
|
||||
"Show Model": "Modell anzeigen",
|
||||
"Show shortcuts": "Verknüpfungen anzeigen",
|
||||
@@ -1205,21 +1218,22 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Bei {{WEBUI_NAME}} registrieren",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "Wird bei {{WEBUI_NAME}} angemeldet",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip Cache": "Cache überspringen",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
"Sougou Search API sID": "Sougou Search API sID",
|
||||
"Sougou Search API SK": "Sougou Search API SK",
|
||||
"Source": "Quelle",
|
||||
"Speech Playback Speed": "Sprachwiedergabegeschwindigkeit",
|
||||
"Speech recognition error: {{error}}": "Spracherkennungsfehler: {{error}}",
|
||||
"Speech-to-Text": "",
|
||||
"Speech-to-Text": "Sprache-zu-Text",
|
||||
"Speech-to-Text Engine": "Sprache-zu-Text-Engine",
|
||||
"Stop": "Stop",
|
||||
"Stop Generating": "Generierung stoppen",
|
||||
"Stop Sequence": "Stop-Sequenz",
|
||||
"Stream Chat Response": "Chat-Antwort streamen",
|
||||
"Strikethrough": "",
|
||||
"Strikethrough": "Durchgestrichen",
|
||||
"Strip Existing OCR": "",
|
||||
"Strip existing OCR text from the PDF and re-run OCR. Ignored if Force OCR is enabled. Defaults to False.": "",
|
||||
"STT Model": "STT-Modell",
|
||||
@@ -1242,7 +1256,7 @@
|
||||
"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "Tail-Free Sampling wird verwendet, um den Einfluss weniger wahrscheinlicher Token auf die Ausgabe zu reduzieren. Ein höherer Wert (z. B. 2.0) reduziert den Einfluss stärker, während ein Wert von 1.0 diese Einstellung deaktiviert. (Standard: 1)",
|
||||
"Talk to model": "Zu einem Modell sprechen",
|
||||
"Tap to interrupt": "Zum Unterbrechen tippen",
|
||||
"Task List": "",
|
||||
"Task List": "Aufgabenliste",
|
||||
"Task Model": "Aufgabenmodell",
|
||||
"Tasks": "Aufgaben",
|
||||
"Tavily API Key": "Tavily-API-Schlüssel",
|
||||
@@ -1251,7 +1265,7 @@
|
||||
"Temperature": "Temperatur",
|
||||
"Temporary Chat": "Temporäre Unterhaltung",
|
||||
"Text Splitter": "Text-Splitter",
|
||||
"Text-to-Speech": "",
|
||||
"Text-to-Speech": "Text-zu-Sprache",
|
||||
"Text-to-Speech Engine": "Text-zu-Sprache-Engine",
|
||||
"Thanks for your feedback!": "Danke für Ihr Feedback!",
|
||||
"The Application Account DN you bind with for search": "Der Anwendungs-Konto-DN, mit dem Sie für die Suche binden",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Um auf das WebUI zugreifen zu können, wenden Sie sich bitte an einen Administrator. Administratoren können den Benutzerstatus über das Admin-Panel verwalten.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Um Wissensdatenbanken hier anzuhängen, fügen Sie sie zunächst dem Arbeitsbereich \"Wissen\" hinzu.",
|
||||
"To learn more about available endpoints, visit our documentation.": "Um mehr über verfügbare Endpunkte zu erfahren, besuchen Sie unsere Dokumentation.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Um Ihre Privatsphäre zu schützen, werden nur Bewertungen, Modell-IDs, Tags und Metadaten aus Ihrem Feedback geteilt – Ihre Chats bleiben privat und werden nicht einbezogen.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Um Aktionen auszuwählen, fügen Sie diese zunächst dem Arbeitsbereich „Funktionen“ hinzu.",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Um Filter auszuwählen, fügen Sie diese zunächst dem Arbeitsbereich „Funktionen“ hinzu.",
|
||||
@@ -1351,11 +1366,12 @@
|
||||
"Unarchive All": "Alle wiederherstellen",
|
||||
"Unarchive All Archived Chats": "Alle archivierten Chats wiederherstellen",
|
||||
"Unarchive Chat": "Chat wiederherstellen",
|
||||
"Underline": "",
|
||||
"Underline": "Unterstreichen",
|
||||
"Unloads {{FROM_NOW}}": "",
|
||||
"Unlock mysteries": "Geheimnisse entsperren",
|
||||
"Unpin": "Lösen",
|
||||
"Unravel secrets": "Geheimnisse lüften",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Ungetaggt",
|
||||
"Untitled": "Unbenannt",
|
||||
"Update": "Aktualisieren",
|
||||
@@ -1381,24 +1397,24 @@
|
||||
"Use Gravatar": "Gravatar verwenden",
|
||||
"Use groups to group your users and assign permissions.": "Nutzen Sie Gruppen, um Ihre Benutzer zu gruppieren und Berechtigungen zuzuweisen.",
|
||||
"Use Initials": "Initialen verwenden",
|
||||
"Use LLM": "",
|
||||
"Use LLM": "Verwende LLM",
|
||||
"Use no proxy to fetch page contents.": "Keinen Proxy zum Abrufen von Seiteninhalten verwenden.",
|
||||
"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Den durch die Umgebungsvariablen http_proxy und https_proxy festgelegten Proxy zum Abrufen von Seiteninhalten verwenden.",
|
||||
"user": "Benutzer",
|
||||
"User": "Benutzer",
|
||||
"User location successfully retrieved.": "Benutzerstandort erfolgreich ermittelt.",
|
||||
"User menu": "",
|
||||
"User menu": "Benutzermenü",
|
||||
"User Webhooks": "Benutzer Webhooks",
|
||||
"Username": "Benutzername",
|
||||
"Users": "Benutzer",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Verwendung des Standard-Arena-Modells mit allen Modellen. Klicken Sie auf die Plus-Schaltfläche, um benutzerdefinierte Modelle hinzuzufügen.",
|
||||
"Utilize": "Verwenden",
|
||||
"Valid time units:": "Gültige Zeiteinheiten:",
|
||||
"Valves": "Valves",
|
||||
"Valves updated": "Valves aktualisiert",
|
||||
"Valves updated successfully": "Valves erfolgreich aktualisiert",
|
||||
"variable": "Variable",
|
||||
"variable to have them replaced with clipboard content.": "Variable, um den Inhalt der Zwischenablage beim Nutzen des Prompts zu ersetzen.",
|
||||
"Verify Connection": "Verbindung verifizieren",
|
||||
"Verify SSL Certificate": "SSL Zertifikat prüfen",
|
||||
"Version": "Version",
|
||||
@@ -1409,7 +1425,7 @@
|
||||
"Vision": "Bilderkennung",
|
||||
"Voice": "Stimme",
|
||||
"Voice Input": "Spracheingabe",
|
||||
"Voice mode": "",
|
||||
"Voice mode": "Sprachmodus",
|
||||
"Warning": "Warnung",
|
||||
"Warning:": "Warnung:",
|
||||
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "Warnung: Wenn Sie dies aktivieren, können Benutzer beliebigen Code auf dem Server hochladen.",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Create Account",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Edit Wowser",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "",
|
||||
"Enter Google PSE API Key": "",
|
||||
"Enter Google PSE Engine Id": "",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Failed to read clipboard borks",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Fluidly wow big chunks",
|
||||
"Focus chat input": "Focus chat bork",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Input commands",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "",
|
||||
"Instant Auto-Send After Voice Transcription": "",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT Expire",
|
||||
"JWT Token": "JWT Borken",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "Keyboard Barkcuts",
|
||||
"Knowledge": "",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "Light",
|
||||
"Listening...": "",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "See what's new so amaze",
|
||||
"Seed": "Seed very plant",
|
||||
"Select a base model": "",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "",
|
||||
"Select a function": "",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "Users much users",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "Utilize very use",
|
||||
"Valid time units:": "Valid time units: much time",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "variable very variable",
|
||||
"variable to have them replaced with clipboard content.": "variable to have them replaced with clipboard content. Very replace.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Version much version",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Δημιουργία Λογαριασμού",
|
||||
"Create Admin Account": "Δημιουργία Λογαριασμού Διαχειριστή",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Δημιουργία Ομάδας",
|
||||
"Create Knowledge": "Δημιουργία Γνώσης",
|
||||
"Create new key": "Δημιουργία νέου κλειδιού",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "π.χ. Εργαλεία για την εκτέλεση διάφορων λειτουργιών",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "Επεξεργασία Σύνδεσης",
|
||||
"Edit Default Permissions": "Επεξεργασία Προεπιλεγμένων Δικαιωμάτων",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Επεξεργασία Μνήμης",
|
||||
"Edit User": "Επεξεργασία Χρήστη",
|
||||
"Edit User Group": "Επεξεργασία Ομάδας Χρηστών",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Εισάγετε το Github Raw URL",
|
||||
"Enter Google PSE API Key": "Εισάγετε το Κλειδί API Google PSE",
|
||||
"Enter Google PSE Engine Id": "Εισάγετε το Αναγνωριστικό Μηχανής Google PSE",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Αποτυχία προσθήκης αρχείου.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Αποτυχία ανάγνωσης περιεχομένων πρόχειρου",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Ροή μεγάλων εξωτερικών τμημάτων απάντησης ομαλά",
|
||||
"Focus chat input": "Εστίαση στο πεδίο συνομιλίας",
|
||||
"Folder deleted successfully": "Ο φάκελος διαγράφηκε με επιτυχία",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Το όνομα του φακέλου δεν μπορεί να είναι κενό.",
|
||||
"Folder name updated successfully": "Το όνομα του φακέλου ενημερώθηκε με επιτυχία",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Εισαγωγή εντολών",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Εγκατάσταση από URL Github",
|
||||
"Instant Auto-Send After Voice Transcription": "Άμεση Αυτόματη Αποστολή μετά τη μεταγραφή φωνής",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Λήξη JWT",
|
||||
"JWT Token": "Token JWT",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "Κλειδί",
|
||||
"Keyboard shortcuts": "Συντομεύσεις Πληκτρολογίου",
|
||||
"Knowledge": "Γνώση",
|
||||
"Knowledge Access": "Πρόσβαση στη Γνώση",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Η γνώση δημιουργήθηκε με επιτυχία.",
|
||||
"Knowledge deleted successfully.": "Η γνώση διαγράφηκε με επιτυχία.",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Αφήστε κενό για να χρησιμοποιήσετε την προεπιλεγμένη προτροπή, ή εισάγετε μια προσαρμοσμένη προτροπή",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "Φως",
|
||||
"Listening...": "Ακούγεται...",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Δείτε τι νέο υπάρχει",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "Επιλέξτε ένα βασικό μοντέλο",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Επιλέξτε μια μηχανή",
|
||||
"Select a function": "Επιλέξτε μια λειτουργία",
|
||||
"Select a group": "Επιλέξτε μια ομάδα",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Εγγραφή στο {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "Σύνδεση στο {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Για να αποκτήσετε πρόσβαση στο WebUI, παρακαλώ επικοινωνήστε με τον διαχειριστή. Οι διαχειριστές μπορούν να διαχειριστούν τις καταστάσεις των χρηστών από τον Πίνακα Διαχειριστή.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Για να επισυνάψετε τη βάση γνώσης εδώ, προσθέστε τα πρώτα στο χώρο εργασίας \"Knowledge\".",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Για να προστατεύσετε την ιδιωτικότητά σας, μόνο οι βαθμολογίες, τα IDs μοντέλων, οι ετικέτες και τα μεταδεδομένα μοιράζονται από την ανατροφοδότησή σας—τα αρχεία συνομιλιών σας παραμένουν ιδιωτικά και δεν περιλαμβάνονται.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Για να επιλέξετε ενέργειες εδώ, προσθέστε τις πρώτα στο χώρο εργασίας \"Functions\".",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Για να επιλέξετε φίλτρα εδώ, προσθέστε τα πρώτα στο χώρο εργασίας \"Functions\".",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Ξεκλείδωμα μυστηρίων",
|
||||
"Unpin": "Αφαίρεση καρφίτσματος",
|
||||
"Unravel secrets": "Ξετυλίξτε μυστικά",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Χωρίς Ετικέτες",
|
||||
"Untitled": "",
|
||||
"Update": "Ενημέρωση",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "Όνομα Χρήστη",
|
||||
"Users": "Χρήστες",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Χρησιμοποιώντας το προεπιλεγμένο μοντέλο arena με όλα τα μοντέλα. Κάντε κλικ στο κουμπί συν για να προσθέσετε προσαρμοσμένα μοντέλα.",
|
||||
"Utilize": "Αξιοποίηση",
|
||||
"Valid time units:": "Έγκυρες μονάδες χρόνου:",
|
||||
"Valves": "Βαλβίδες",
|
||||
"Valves updated": "Οι βαλβίδες ενημερώθηκαν",
|
||||
"Valves updated successfully": "Οι βαλβίδες ενημερώθηκαν με επιτυχία",
|
||||
"variable": "μεταβλητή",
|
||||
"variable to have them replaced with clipboard content.": "μεταβλητή να αντικατασταθούν με το περιεχόμενο του πρόχειρου.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Έκδοση",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "",
|
||||
"Enter Google PSE API Key": "",
|
||||
"Enter Google PSE Engine Id": "",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "",
|
||||
"Focus chat input": "",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "",
|
||||
"Instant Auto-Send After Voice Transcription": "",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "",
|
||||
"JWT Token": "",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "",
|
||||
"Knowledge": "",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "",
|
||||
"Listening...": "",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "",
|
||||
"Seed": "",
|
||||
"Select a base model": "",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "",
|
||||
"Select a function": "",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "Utilise",
|
||||
"Valid time units:": "",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "",
|
||||
"variable to have them replaced with clipboard content.": "",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "",
|
||||
"Enter Google PSE API Key": "",
|
||||
"Enter Google PSE Engine Id": "",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "",
|
||||
"Focus chat input": "",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "",
|
||||
"Instant Auto-Send After Voice Transcription": "",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "",
|
||||
"JWT Token": "",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "",
|
||||
"Knowledge": "",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "",
|
||||
"Listening...": "",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "Next message",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "",
|
||||
"Seed": "",
|
||||
"Select a base model": "",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "",
|
||||
"Select a function": "",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "",
|
||||
"Valid time units:": "",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "",
|
||||
"variable to have them replaced with clipboard content.": "",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "",
|
||||
|
||||
@@ -1410,13 +1410,11 @@
|
||||
"Using Entire Document": "Usando Documento Completo",
|
||||
"Using Focused Retrieval": "Usando Recuperación Focalizada",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Usando el modelo de arena predeterminado con todos los modelos. Pulsar en el botón + para agregar modelos personalizados.",
|
||||
"Utilize": "Utilizar",
|
||||
"Valid time units:": "Unidades de tiempo válidas:",
|
||||
"Valves": "Válvulas",
|
||||
"Valves updated": "Válvulas actualizadas",
|
||||
"Valves updated successfully": "Válvulas actualizados correctamente",
|
||||
"variable": "variable",
|
||||
"variable to have them replaced with clipboard content.": "hace que la variable sea reemplazada con el contenido del portapapeles.",
|
||||
"Verify Connection": "Verificar Conexión",
|
||||
"Verify SSL Certificate": "Verificar Certificado SSL",
|
||||
"Version": "Versión",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Loo konto",
|
||||
"Create Admin Account": "Loo administraatori konto",
|
||||
"Create Channel": "Loo kanal",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Loo grupp",
|
||||
"Create Knowledge": "Loo teadmised",
|
||||
"Create new key": "Loo uus võti",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "nt tööriistad mitmesuguste operatsioonide teostamiseks",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Muuda kanalit",
|
||||
"Edit Connection": "Muuda ühendust",
|
||||
"Edit Default Permissions": "Muuda vaikimisi õigusi",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Muuda mälu",
|
||||
"Edit User": "Muuda kasutajat",
|
||||
"Edit User Group": "Muuda kasutajagruppi",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Sisestage Github toorURL",
|
||||
"Enter Google PSE API Key": "Sisestage Google PSE API võti",
|
||||
"Enter Google PSE Engine Id": "Sisestage Google PSE mootori ID",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Faili lisamine ebaõnnestus.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "Mudelite toomine ebaõnnestus",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Lõikelaua sisu lugemine ebaõnnestus",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Suurte väliste vastuste tükkide sujuv voogedastus",
|
||||
"Focus chat input": "Fokuseeri vestluse sisendile",
|
||||
"Folder deleted successfully": "Kaust edukalt kustutatud",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Kausta nimi ei saa olla tühi.",
|
||||
"Folder name updated successfully": "Kausta nimi edukalt uuendatud",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Sisendkäsud",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Installige Github URL-ilt",
|
||||
"Instant Auto-Send After Voice Transcription": "Kohene automaatne saatmine pärast hääle transkriptsiooni",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT aegumine",
|
||||
"JWT Token": "JWT token",
|
||||
"Kagi Search API Key": "Kagi Search API võti",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "Võti",
|
||||
"Keyboard shortcuts": "Klaviatuuri otseteed",
|
||||
"Knowledge": "Teadmised",
|
||||
"Knowledge Access": "Teadmiste juurdepääs",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Teadmised edukalt loodud.",
|
||||
"Knowledge deleted successfully.": "Teadmised edukalt kustutatud.",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Jäta tühjaks, et kasutada vaikimisi vihjet, või sisesta kohandatud vihje",
|
||||
"Leave model field empty to use the default model.": "Jäta mudeli väli tühjaks, et kasutada vaikimisi mudelit.",
|
||||
"License": "Litsents",
|
||||
"Lift List": "",
|
||||
"Light": "Hele",
|
||||
"Listening...": "Kuulamine...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "uus-kanal",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Vaata, mis on uut",
|
||||
"Seed": "Seeme",
|
||||
"Select a base model": "Valige baas mudel",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Valige mootor",
|
||||
"Select a function": "Valige funktsioon",
|
||||
"Select a group": "Valige grupp",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Registreeru {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "Sisselogimine {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "WebUI-le juurdepääsuks võtke ühendust administraatoriga. Administraatorid saavad hallata kasutajate staatuseid administraatori paneelist.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Teadmiste baasi siia lisamiseks lisage need esmalt \"Teadmiste\" tööalale.",
|
||||
"To learn more about available endpoints, visit our documentation.": "Saadaolevate lõpp-punktide kohta rohkem teada saamiseks külastage meie dokumentatsiooni.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Teie privaatsuse kaitsmiseks jagatakse teie tagasisidest ainult hinnanguid, mudeli ID-sid, silte ja metaandmeid - teie vestluslogi jääb privaatseks ja neid ei kaasata.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Toimingute siit valimiseks lisage need esmalt \"Funktsioonide\" tööalale.",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Filtrite siit valimiseks lisage need esmalt \"Funktsioonide\" tööalale.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Ava mõistatused",
|
||||
"Unpin": "Võta lahti",
|
||||
"Unravel secrets": "Ava saladused",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Sildistamata",
|
||||
"Untitled": "",
|
||||
"Update": "Uuenda",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "Kasutajanimi",
|
||||
"Users": "Kasutajad",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Kasutatakse vaikimisi areena mudelit kõigi mudelitega. Kohandatud mudelite lisamiseks klõpsake plussmärgiga nuppu.",
|
||||
"Utilize": "Kasuta",
|
||||
"Valid time units:": "Kehtivad ajaühikud:",
|
||||
"Valves": "Klapid",
|
||||
"Valves updated": "Klapid uuendatud",
|
||||
"Valves updated successfully": "Klapid edukalt uuendatud",
|
||||
"variable": "muutuja",
|
||||
"variable to have them replaced with clipboard content.": "muutuja, et need asendataks lõikelaua sisuga.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Versioon",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Sortu Kontua",
|
||||
"Create Admin Account": "Sortu Administratzaile Kontua",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Sortu Taldea",
|
||||
"Create Knowledge": "Sortu Ezagutza",
|
||||
"Create new key": "Sortu gako berria",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "adib. Hainbat eragiketa egiteko tresnak",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "Editatu Konexioa",
|
||||
"Edit Default Permissions": "Editatu Baimen Lehenetsiak",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Editatu Memoria",
|
||||
"Edit User": "Editatu Erabiltzailea",
|
||||
"Edit User Group": "Editatu Erabiltzaile Taldea",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Sartu Github Raw URLa",
|
||||
"Enter Google PSE API Key": "Sartu Google PSE API Gakoa",
|
||||
"Enter Google PSE Engine Id": "Sartu Google PSE Motor IDa",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Huts egin du fitxategia gehitzean.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Huts egin du arbelaren edukia irakurtzean",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Modu jariagarrian transmititu kanpoko erantzun zati handiak",
|
||||
"Focus chat input": "Fokuratu txataren sarrera",
|
||||
"Folder deleted successfully": "Karpeta ongi ezabatu da",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Karpetaren izena ezin da hutsik egon.",
|
||||
"Folder name updated successfully": "Karpetaren izena ongi eguneratu da",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Sartu komandoak",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Instalatu Github URLtik",
|
||||
"Instant Auto-Send After Voice Transcription": "Bidalketa Automatiko Berehalakoa Ahots Transkripzioaren Ondoren",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT Iraungitzea",
|
||||
"JWT Token": "JWT Tokena",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "Gakoa",
|
||||
"Keyboard shortcuts": "Teklatuko lasterbideak",
|
||||
"Knowledge": "Ezagutza",
|
||||
"Knowledge Access": "Ezagutzarako Sarbidea",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Ezagutza ongi sortu da.",
|
||||
"Knowledge deleted successfully.": "Ezagutza ongi ezabatu da.",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Utzi hutsik prompt lehenetsia erabiltzeko, edo sartu prompt pertsonalizatu bat",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "Argia",
|
||||
"Listening...": "Entzuten...",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Ikusi berritasunak",
|
||||
"Seed": "Hazia",
|
||||
"Select a base model": "Hautatu oinarrizko modeloa",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Hautatu motor bat",
|
||||
"Select a function": "Hautatu funtzio bat",
|
||||
"Select a group": "Hautatu talde bat",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Erregistratu {{WEBUI_NAME}}-n",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "{{WEBUI_NAME}}-n saioa hasten",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "WebUI-a atzitzeko, mesedez jarri harremanetan administratzailearekin. Administratzaileek erabiltzaileen egoerak kudeatu ditzakete Admin Paneletik.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Ezagutza-basea hemen eransteko, gehitu ezazu lehenik \"Ezagutza\" lan-eremura.",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Zure pribatutasuna babesteko, zure feedbacketik bakarrik partekatzen dira balorazioak, modelo IDak, etiketak eta metadatuak—zure txat erregistroak pribatuak dira eta ez dira sartzen.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Ekintzak hemen hautatzeko, gehitu itzazu lehenik \"Funtzioak\" lan-eremura.",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Iragazkiak hemen hautatzeko, gehitu itzazu lehenik \"Funtzioak\" lan-eremura.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Askatu misterioak",
|
||||
"Unpin": "Kendu aingura",
|
||||
"Unravel secrets": "Askatu sekretuak",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Etiketatu gabea",
|
||||
"Untitled": "",
|
||||
"Update": "Eguneratu",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "Erabiltzaile-izena",
|
||||
"Users": "Erabiltzaileak",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Arena modelo lehenetsia erabiltzen modelo guztiekin. Egin klik plus botoian modelo pertsonalizatuak gehitzeko.",
|
||||
"Utilize": "Erabili",
|
||||
"Valid time units:": "Denbora unitate baliozkoak:",
|
||||
"Valves": "Balbulak",
|
||||
"Valves updated": "Balbulak eguneratuta",
|
||||
"Valves updated successfully": "Balbulak ongi eguneratu dira",
|
||||
"variable": "aldagaia",
|
||||
"variable to have them replaced with clipboard content.": "aldagaia arbeleko edukiarekin ordezkatzeko.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Bertsioa",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "ساخت حساب کاربری",
|
||||
"Create Admin Account": "ایجاد حساب مدیر",
|
||||
"Create Channel": "ایجاد کانال",
|
||||
"Create Folder": "",
|
||||
"Create Group": "ایجاد گروه",
|
||||
"Create Knowledge": "ایجاد دانش",
|
||||
"Create new key": "ساخت کلید جدید",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "مثلا ابزارهایی برای انجام عملیات مختلف",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "مثلا en-US,ja-JP (برای تشخیص خودکار خالی بگذارید)",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "ویرایش کانال",
|
||||
"Edit Connection": "ویرایش اتصال",
|
||||
"Edit Default Permissions": "ویرایش مجوزهای پیش\u200cفرض",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "ویرایش حافظه",
|
||||
"Edit User": "ویرایش کاربر",
|
||||
"Edit User Group": "ویرایش گروه کاربری",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "آدرس پایه API فایرکراول را وارد کنید",
|
||||
"Enter Firecrawl API Key": "کلید API فایرکراول را وارد کنید",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "آدرس Github Raw را وارد کنید",
|
||||
"Enter Google PSE API Key": "کلید API گوگل PSE را وارد کنید",
|
||||
"Enter Google PSE Engine Id": "شناسه موتور PSE گوگل را وارد کنید",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "خطا در افزودن پرونده",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "خطا در اتصال به سرور ابزار OpenAPI {{URL}}",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "خطا در دریافت مدل\u200cها",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "خواندن محتوای کلیپ بورد ناموفق بود",
|
||||
"Failed to save connections": "خطا در ذخیره\u200cسازی اتصالات",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "تکه های پاسخ خارجی بزرگ را به صورت سیال پخش کنید",
|
||||
"Focus chat input": "فوکوس کردن ورودی گپ",
|
||||
"Folder deleted successfully": "پوشه با موفقیت حذف شد",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "نام پوشه نمی\u200cتواند خالی باشد.",
|
||||
"Folder name updated successfully": "نام پوشه با موفقیت به\u200cروز شد",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "ورودی دستورات",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "نصب از ادرس Github",
|
||||
"Instant Auto-Send After Voice Transcription": "ارسال خودکار فوری پس از رونویسی صوتی",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT انقضای",
|
||||
"JWT Token": "JWT توکن",
|
||||
"Kagi Search API Key": "کلید API جستجوی کاگی",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "کلید",
|
||||
"Keyboard shortcuts": "میانبرهای صفحه کلید",
|
||||
"Knowledge": "دانش",
|
||||
"Knowledge Access": "دسترسی به دانش",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "دانش با موفقیت ایجاد شد.",
|
||||
"Knowledge deleted successfully.": "دانش با موفقیت حذف شد.",
|
||||
"Knowledge Public Sharing": "اشتراک\u200cگذاری عمومی دانش",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "برای استفاده از پرامپت پیش\u200cفرض خالی بگذارید، یا یک پرامپت سفارشی وارد کنید",
|
||||
"Leave model field empty to use the default model.": "برای استفاده از مدل پیش\u200cفرض، فیلد مدل را خالی بگذارید.",
|
||||
"License": "مجوز",
|
||||
"Lift List": "",
|
||||
"Light": "روشن",
|
||||
"Listening...": "در حال گوش دادن...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "کانال-جدید",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "ببینید موارد جدید چه بوده",
|
||||
"Seed": "هسته",
|
||||
"Select a base model": "انتخاب یک مدل پایه",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "انتخاب یک موتور",
|
||||
"Select a function": "انتخاب یک تابع",
|
||||
"Select a group": "انتخاب یک گروه",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "ثبت نام در {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "در حال ورود به {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "برای دسترسی به رابط کاربری وب، لطفاً با مدیر تماس بگیرید. مدیران می\u200cتوانند وضعیت کاربران را از پنل مدیریت مدیریت کنند.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "برای اتصال پایگاه دانش در اینجا، ابتدا آنها را به فضای کاری \"دانش\" اضافه کنید.",
|
||||
"To learn more about available endpoints, visit our documentation.": "برای کسب اطلاعات بیشتر در مورد نقاط پایانی موجود، به مستندات ما مراجعه کنید.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "برای حفظ حریم خصوصی شما، فقط امتیازات، شناسه\u200cهای مدل، برچسب\u200cها و متادیتا از بازخورد شما به اشتراک گذاشته می\u200cشود - گفتگوهای شما خصوصی باقی می\u200cماند و شامل نمی\u200cشود.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "برای انتخاب عملیات در اینجا، ابتدا آنها را به فضای کاری \"توابع\" اضافه کنید.",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "برای انتخاب فیلترها در اینجا، ابتدا آنها را به فضای کاری \"توابع\" اضافه کنید.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "رمزگشایی از اسرار",
|
||||
"Unpin": "برداشتن پین",
|
||||
"Unravel secrets": "کشف رازها",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "بدون برچسب",
|
||||
"Untitled": "",
|
||||
"Update": "به\u200cروزرسانی",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "وب\u200cهوک\u200cهای کاربر",
|
||||
"Username": "نام کاربری",
|
||||
"Users": "کاربران",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "در حال استفاده از مدل آرنا با همهٔ مدل\u200cهای دیگر به طور پیش\u200cفرض. برای افزودن مدل\u200cهای سفارشی، روی دکمه به\u200cعلاوه کلیک کنید.",
|
||||
"Utilize": "استفاده کنید",
|
||||
"Valid time units:": "واحدهای زمانی معتبر:",
|
||||
"Valves": "شیرها",
|
||||
"Valves updated": "شیرها به\u200cروزرسانی شدند",
|
||||
"Valves updated successfully": "شیرها با موفقیت به\u200cروزرسانی شدند",
|
||||
"variable": "متغیر",
|
||||
"variable to have them replaced with clipboard content.": "متغیر برای جایگزینی آنها با محتوای بریده\u200cدان.",
|
||||
"Verify Connection": "تأیید اتصال",
|
||||
"Verify SSL Certificate": "تأیید گواهی SSL",
|
||||
"Version": "نسخه",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Luo tili",
|
||||
"Create Admin Account": "Luo ylläpitäjätili",
|
||||
"Create Channel": "Luo kanava",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Luo ryhmä",
|
||||
"Create Knowledge": "Luo tietoa",
|
||||
"Create new key": "Luo uusi avain",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "esim. pdf, docx, txt",
|
||||
"e.g. Tools for performing various operations": "esim. työkaluja erilaisten toimenpiteiden suorittamiseen",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "esim. 3, 4, 5 (jätä tyhjäksi, jos haluat oletusarvon)",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "esim. en-US,ja-JP (Tyhjäksi jättämällä, automaattinen tunnistus)",
|
||||
"e.g., westus (leave blank for eastus)": "esim. westus (jätä tyhjäksi eastusta varten)",
|
||||
"e.g.) en,fr,de": "esim.) en,fr,de",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Muokkaa kanavaa",
|
||||
"Edit Connection": "Muokkaa yhteyttä",
|
||||
"Edit Default Permissions": "Muokkaa oletuskäyttöoikeuksia",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Muokkaa muistia",
|
||||
"Edit User": "Muokkaa käyttäjää",
|
||||
"Edit User Group": "Muokkaa käyttäjäryhmää",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "Kirjoita ulkoisen Web Search verkko-osoite",
|
||||
"Enter Firecrawl API Base URL": "Kirjoita Firecrawl API -verkko-osoite",
|
||||
"Enter Firecrawl API Key": "Kirjoita Firecrawl API-avain",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Kirjoita Github Raw -verkko-osoite",
|
||||
"Enter Google PSE API Key": "Kirjoita Google PSE API -avain",
|
||||
"Enter Google PSE Engine Id": "Kirjoita Google PSE -moottorin tunnus",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "Ulkoinen Web Loader verkko-osoite",
|
||||
"External Web Search API Key": "Ulkoinen Web Search API-avain",
|
||||
"External Web Search URL": "Ulkoinen Web Search verkko-osoite",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Tiedoston lisääminen epäonnistui.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "Yhdistäminen {{URL}} OpenAPI työkalu palvelimeen epäonnistui",
|
||||
"Failed to copy link": "Linkin kopioinmti epäonnistui",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "Mallien hakeminen epäonnistui",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "Tiedoston sisällön lataaminen epäonnistui.",
|
||||
"Failed to read clipboard contents": "Leikepöydän sisällön lukeminen epäonnistui",
|
||||
"Failed to save connections": "Yhteyksien tallentaminen epäonnistui",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Virtaa suuria ulkoisia vastausosia joustavasti",
|
||||
"Focus chat input": "Fokusoi syöttökenttään",
|
||||
"Folder deleted successfully": "Kansio poistettu onnistuneesti",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Kansion nimi ei voi olla tyhjä.",
|
||||
"Folder name updated successfully": "Kansion nimi päivitetty onnistuneesti",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "Jatkokysymykset",
|
||||
"Follow Up Generation": "Jatkokysymysten luonti",
|
||||
"Follow Up Generation Prompt": "Jatkokysymysten luonti kehoite",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Syötekäskyt",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Asenna Github-URL:stä",
|
||||
"Instant Auto-Send After Voice Transcription": "Heti automaattinen lähetys äänitunnistuksen jälkeen",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT-vanheneminen",
|
||||
"JWT Token": "JWT-token",
|
||||
"Kagi Search API Key": "Kagi Search API -avain",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "Pidä sivupalkissa",
|
||||
"Key": "Avain",
|
||||
"Keyboard shortcuts": "Pikanäppäimet",
|
||||
"Knowledge": "Tietämys",
|
||||
"Knowledge Access": "Tiedon käyttöoikeus",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Tietokanta luotu onnistuneesti.",
|
||||
"Knowledge deleted successfully.": "Tietokanta poistettu onnistuneesti.",
|
||||
"Knowledge Public Sharing": "Tietokannan julkinen jakaminen",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Jätä tyhjäksi käyttääksesi oletuskehotetta tai kirjoita mukautettu kehote",
|
||||
"Leave model field empty to use the default model.": "Jätä malli kenttä tyhjäksi käyttääksesi oletus mallia.",
|
||||
"License": "Lisenssi",
|
||||
"Lift List": "",
|
||||
"Light": "Vaalea",
|
||||
"Listening...": "Kuuntelee...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "Uusi työkalu",
|
||||
"new-channel": "uusi-kanava",
|
||||
"Next message": "Seuraava viesti",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "Käyttäjän keskusteluja ei löytynyt.",
|
||||
"No chats found.": "Keskusteluja ei löytynyt",
|
||||
"No content": "Ei sisältöä",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Katso, mitä uutta",
|
||||
"Seed": "Siemenluku",
|
||||
"Select a base model": "Valitse perusmalli",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Valitse moottori",
|
||||
"Select a function": "Valitse toiminto",
|
||||
"Select a group": "Valitse ryhmä",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Rekisteröidy palveluun {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "Parantaa merkittävästi tarkkuutta käyttämällä LLM:ää taulukoiden, lomakkeiden, matematiikan ja asettelun havaitsemisen parantamiseen. Lisää viivettä. Oletusarvo on käytössä.",
|
||||
"Signing in to {{WEBUI_NAME}}": "Kirjaudutaan sisään palveluun {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "Ohita välimuisti",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "Ohita välimuisti ja suorita päätelmä uudelleen. Oletusarvo ei käytössä.",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Päästäksesi käyttämään WebUI:ta, ota yhteyttä ylläpitäjään. Ylläpitäjät voivat hallita käyttäjien tiloja Ylläpitopaneelista.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Liittääksesi tietokantasi tähän, lisää ne ensin \"Tietämys\"-työtilaan.",
|
||||
"To learn more about available endpoints, visit our documentation.": "Jos haluat lisätietoja käytettävissä olevista päätepisteistä, tutustu dokumentaatioomme.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Yksityisyydensuojasi vuoksi palautteestasi jaetaan vain arvostelut, mallitunnukset, tagit ja metadata - keskustelulokisi pysyvät yksityisinä eikä niitä sisällytetä.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Valitaksesi toimintoja tässä, lisää ne ensin \"Toiminnot\"-työtilaan.",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Valitaksesi suodattimia tässä, lisää ne ensin \"Toiminnot\"-työtilaan.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Selvitä arvoituksia",
|
||||
"Unpin": "Irrota kiinnitys",
|
||||
"Unravel secrets": "Avaa salaisuuksia",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Ei tageja",
|
||||
"Untitled": "Nimetön",
|
||||
"Update": "Päivitä",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "Käyttäjän Webhook:it",
|
||||
"Username": "Käyttäjätunnus",
|
||||
"Users": "Käyttäjät",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Käytetään oletusarena-mallia kaikkien mallien kanssa. Napsauta plus-painiketta lisätäksesi mukautettuja malleja.",
|
||||
"Utilize": "Hyödynnä",
|
||||
"Valid time units:": "Kelvolliset aikayksiköt:",
|
||||
"Valves": "Venttiilit",
|
||||
"Valves updated": "Venttiilit päivitetty",
|
||||
"Valves updated successfully": "Venttiilit päivitetty onnistuneesti",
|
||||
"variable": "muuttuja",
|
||||
"variable to have them replaced with clipboard content.": "muuttuja korvataan leikepöydän sisällöllä.",
|
||||
"Verify Connection": "Tarkista yhteys",
|
||||
"Verify SSL Certificate": "Tarkista SSL-varmenne",
|
||||
"Version": "Versio",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Créer un compte",
|
||||
"Create Admin Account": "Créer un compte administrateur",
|
||||
"Create Channel": "Créer un canal",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Créer un groupe",
|
||||
"Create Knowledge": "Créer une connaissance",
|
||||
"Create new key": "Créer une nouvelle clé",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "par ex. pdf, docx, txt",
|
||||
"e.g. Tools for performing various operations": "par ex. Outils pour effectuer diverses opérations",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "par ex., 3, 4, 5 (laisser vide pour par défaut)",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "par ex., en-US, ja-JP (laisser vide pour détection automatique)",
|
||||
"e.g., westus (leave blank for eastus)": "par ex., westus (laisser vide pour eastus)",
|
||||
"e.g.) en,fr,de": "par ex., fr, en, de",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Modifier le canal",
|
||||
"Edit Connection": "Modifier la connexion",
|
||||
"Edit Default Permissions": "Modifier les autorisations par défaut",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Modifier la mémoire",
|
||||
"Edit User": "Modifier l'utilisateur",
|
||||
"Edit User Group": "Modifier le groupe d'utilisateurs",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "Entrez l'URL de la recherche Web externe",
|
||||
"Enter Firecrawl API Base URL": "Entrez l'URL de base de l'API Firecrawl",
|
||||
"Enter Firecrawl API Key": "Entrez la clé API de Firecrawl",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
|
||||
"Enter Google PSE API Key": "Entrez la clé API Google PSE",
|
||||
"Enter Google PSE Engine Id": "Entrez l'identifiant du moteur Google PSE",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "URL du chargeur Web externe",
|
||||
"External Web Search API Key": "Clé API de la recherche Web externe",
|
||||
"External Web Search URL": "URL de la recherche Web externe",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Échec de l'ajout du fichier.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "Échec de la connexion au serveur d'outils OpenAPI {{URL}}",
|
||||
"Failed to copy link": "Échec de la copie du lien",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "Échec de la récupération des modèles",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "Échec du chargement du contenu du fichier",
|
||||
"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
|
||||
"Failed to save connections": "Échec de la sauvegarde des connexions",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Streaming fluide de gros chunks de réponses externes",
|
||||
"Focus chat input": "Mettre le focus sur l'entrée de la conversation",
|
||||
"Folder deleted successfully": "Dossier supprimé avec succès",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Le nom du dossier ne peut pas être vide.",
|
||||
"Folder name updated successfully": "Le nom du dossier a été mis à jour avec succès",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "Suivi",
|
||||
"Follow Up Generation": "Suivi de la génération",
|
||||
"Follow Up Generation Prompt": "Suivi de la génération du protompt",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Commandes d'entrée",
|
||||
"Input Variables": "Variables d'entrée",
|
||||
"Insert": "Insérer",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "Insérer le prompt en tant que texte enrichi",
|
||||
"Install from Github URL": "Installer depuis une URL GitHub",
|
||||
"Instant Auto-Send After Voice Transcription": "Envoi automatique après la transcription",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Expiration du token JWT",
|
||||
"JWT Token": "Token JWT",
|
||||
"Kagi Search API Key": "Clé API Kagi Search",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "Epingler dans la barre latérale",
|
||||
"Key": "Clé",
|
||||
"Keyboard shortcuts": "Raccourcis clavier",
|
||||
"Knowledge": "Connaissances",
|
||||
"Knowledge Access": "Accès aux connaissances",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Connaissance créée avec succès.",
|
||||
"Knowledge deleted successfully.": "Connaissance supprimée avec succès.",
|
||||
"Knowledge Public Sharing": "Partage public des Connaissances",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Laissez vide pour utiliser le prompt par défaut, ou entrez un prompt personnalisé",
|
||||
"Leave model field empty to use the default model.": "Laisser le champ du modèle vide pour utiliser le modèle par défaut.",
|
||||
"License": "Licence",
|
||||
"Lift List": "",
|
||||
"Light": "Clair",
|
||||
"Listening...": "Écoute en cours...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "Nouvel outil",
|
||||
"new-channel": "nouveau-canal",
|
||||
"Next message": "Message suivant",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "Pas de conversation trouvée pour cet utilisateur.",
|
||||
"No chats found.": "Pas de conversation trouvée.",
|
||||
"No content": "Pas de contenu",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Découvrez les nouvelles fonctionnalités",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "Sélectionnez un modèle de base",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Sélectionnez un moteur",
|
||||
"Select a function": "Sélectionnez une fonction",
|
||||
"Select a group": "Sélectionner un groupe",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Inscrivez-vous à {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "Améliore considérablement la précision en utilisant un LLM pour améliorer la détection des tableaux, des formulaires, des mathématiques en ligne et de la mise en page. Augmente la latence. Par défaut à True.",
|
||||
"Signing in to {{WEBUI_NAME}}": "Connexion à {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "Ne pas utiliser le cache",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "Ne pas utiliser le cache et re executer l'inférence. Par defaut à False",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Pour accéder à l'interface Web, veuillez contacter l'administrateur. Les administrateurs peuvent gérer les statuts des utilisateurs depuis le panneau d'administration.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Pour attacher une base de connaissances ici, ajoutez-les d'abord à l'espace de travail « Connaissances ».",
|
||||
"To learn more about available endpoints, visit our documentation.": "Pour en savoir plus sur les points de terminaison disponibles, consultez notre documentation.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Pour protéger votre confidentialité, seules les notes, les identifiants de modèle, les tags et les métadonnées de vos commentaires sont partagés. Vos journaux de discussion restent privés et ne sont pas inclus.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Pour sélectionner des actions ici, ajoutez-les d'abord à l'espace de travail « Fonctions ».",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Pour sélectionner des filtres ici, ajoutez-les d'abord à l'espace de travail « Fonctions ». ",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Déverrouiller les mystères",
|
||||
"Unpin": "Désépingler",
|
||||
"Unravel secrets": "Dévoiler les secrets",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Pas de tag",
|
||||
"Untitled": "Sans titre",
|
||||
"Update": "Mise à jour",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "Webhooks utilisateur",
|
||||
"Username": "Nom d'utilisateur",
|
||||
"Users": "Utilisateurs",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Utilisation du modèle d'arène par défaut avec tous les modèles. Cliquez sur le bouton plus pour ajouter des modèles personnalisés.",
|
||||
"Utilize": "Utilisez",
|
||||
"Valid time units:": "Unités de temps valides\u00a0:",
|
||||
"Valves": "Vannes",
|
||||
"Valves updated": "Vannes mises à jour",
|
||||
"Valves updated successfully": "Les vannes ont été mises à jour avec succès",
|
||||
"variable": "variable",
|
||||
"variable to have them replaced with clipboard content.": "variable pour qu'elles soient remplacées par le contenu du presse-papiers.",
|
||||
"Verify Connection": "Vérifier la connexion",
|
||||
"Verify SSL Certificate": "Vérifier le certificat SSL",
|
||||
"Version": "Version:",
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
"[Yesterday at] h:mm A": "",
|
||||
"{{ models }}": "{{ models }}",
|
||||
"{{COUNT}} Available Tools": "Nombre d'outils disponibles {{COUNT}}",
|
||||
"{{COUNT}} characters": "",
|
||||
"{{COUNT}} characters": "{{COUNT}} caractères",
|
||||
"{{COUNT}} hidden lines": "Nombres de lignes cachées {{COUNT}}",
|
||||
"{{COUNT}} Replies": "{{COUNT}} réponses",
|
||||
"{{COUNT}} words": "",
|
||||
"{{COUNT}} words": "{{COUNT}} mots",
|
||||
"{{user}}'s Chats": "Conversations de {{user}}",
|
||||
"{{webUIName}} Backend Required": "Backend {{webUIName}} requis",
|
||||
"*Prompt node ID(s) are required for image generation": "*Les ID de noeud du prompt sont nécessaires pour la génération d'images",
|
||||
@@ -61,7 +61,7 @@
|
||||
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Les administrateurs ont accès à tous les outils en permanence ; les utilisateurs doivent se voir attribuer des outils pour chaque modèle dans l'espace de travail.",
|
||||
"Advanced Parameters": "Réglages avancés",
|
||||
"Advanced Params": "Réglages avancés",
|
||||
"AI": "",
|
||||
"AI": "IA",
|
||||
"All": "Tout",
|
||||
"All Documents": "Tous les documents",
|
||||
"All models deleted successfully": "Tous les modèles ont été supprimés avec succès",
|
||||
@@ -159,11 +159,11 @@
|
||||
"Bing Search V7 Endpoint": "Point de terminaison Bing Search V7",
|
||||
"Bing Search V7 Subscription Key": "Clé d'abonnement Bing Search V7",
|
||||
"Bocha Search API Key": "Clé API Bocha Search",
|
||||
"Bold": "",
|
||||
"Bold": "Gras",
|
||||
"Boosting or penalizing specific tokens for constrained responses. Bias values will be clamped between -100 and 100 (inclusive). (Default: none)": "Renforcer ou pénaliser des éléments spécifiques pour les réponses contraintes. Les valeurs du biais seront comprises entre -100 et 100 (inclus). (Par défaut : aucun)",
|
||||
"Both Docling OCR Engine and Language(s) must be provided or both left empty.": "Le moteur d'OCR de Docling et la (les) langue(s) doivent être fournis ou laissés vides.",
|
||||
"Brave Search API Key": "Clé API Brave Search",
|
||||
"Bullet List": "",
|
||||
"Bullet List": "Liste à puces",
|
||||
"By {{name}}": "Par {{name}}",
|
||||
"Bypass Embedding and Retrieval": "Ignorer l'Embedding et le Retrieval",
|
||||
"Bypass Web Loader": "Ignorer le chargeur Web",
|
||||
@@ -224,7 +224,7 @@
|
||||
"Close Configure Connection Modal": "Fermer la fenêtre de configuration de la connexion",
|
||||
"Close modal": "Fermer la fenêtre",
|
||||
"Close settings modal": "Fermer la fenêtre des réglages",
|
||||
"Code Block": "",
|
||||
"Code Block": "Bloc de code",
|
||||
"Code execution": "Exécution de code",
|
||||
"Code Execution": "Exécution de code",
|
||||
"Code Execution Engine": "Moteur d'execution de code",
|
||||
@@ -279,7 +279,7 @@
|
||||
"Copy Formatted Text": "Copier le texte en gardant le format",
|
||||
"Copy last code block": "Copier le dernier bloc de code",
|
||||
"Copy last response": "Copier la dernière réponse",
|
||||
"Copy link": "",
|
||||
"Copy link": "Copier le lien",
|
||||
"Copy Link": "Copier le lien",
|
||||
"Copy to clipboard": "Copier dans le presse-papiers",
|
||||
"Copying to clipboard was successful!": "La copie dans le presse-papiers a réussi !",
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Créer un compte",
|
||||
"Create Admin Account": "Créer un compte administrateur",
|
||||
"Create Channel": "Créer un canal",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Créer un groupe",
|
||||
"Create Knowledge": "Créer une connaissance",
|
||||
"Create new key": "Créer une nouvelle clé",
|
||||
@@ -312,7 +313,7 @@
|
||||
"Database": "Base de données",
|
||||
"Datalab Marker API": "API Datalab Marker",
|
||||
"Datalab Marker API Key required.": "Clé API Datalab Marker requise.",
|
||||
"DD/MM/YYYY": "",
|
||||
"DD/MM/YYYY": "JJ/MM/AAAA",
|
||||
"December": "Décembre",
|
||||
"Default": "Par défaut",
|
||||
"Default (Open AI)": "Par défaut (OpenAI)",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "par ex. pdf, docx, txt",
|
||||
"e.g. Tools for performing various operations": "par ex. Outils pour effectuer diverses opérations",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "par ex., 3, 4, 5 (laisser vide pour par défaut)",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "par ex., en-US, ja-JP (laisser vide pour détection automatique)",
|
||||
"e.g., westus (leave blank for eastus)": "par ex., westus (laisser vide pour eastus)",
|
||||
"e.g.) en,fr,de": "par ex., fr, en, de",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Modifier le canal",
|
||||
"Edit Connection": "Modifier la connexion",
|
||||
"Edit Default Permissions": "Modifier les autorisations par défaut",
|
||||
"Edit Folder": "Modifier le dossier",
|
||||
"Edit Memory": "Modifier la mémoire",
|
||||
"Edit User": "Modifier l'utilisateur",
|
||||
"Edit User Group": "Modifier le groupe d'utilisateurs",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "Entrez l'URL de la recherche Web externe",
|
||||
"Enter Firecrawl API Base URL": "Entrez l'URL de base de l'API Firecrawl",
|
||||
"Enter Firecrawl API Key": "Entrez la clé API de Firecrawl",
|
||||
"Enter folder name": "Entrez le nom du dossier",
|
||||
"Enter Github Raw URL": "Entrez l'URL brute de GitHub",
|
||||
"Enter Google PSE API Key": "Entrez la clé API Google PSE",
|
||||
"Enter Google PSE Engine Id": "Entrez l'identifiant du moteur Google PSE",
|
||||
@@ -599,15 +602,17 @@
|
||||
"External Web Loader URL": "URL du chargeur Web externe",
|
||||
"External Web Search API Key": "Clé API de la recherche Web externe",
|
||||
"External Web Search URL": "URL de la recherche Web externe",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Échec de l'ajout du fichier.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "Échec de la connexion au serveur d'outils OpenAPI {{URL}}",
|
||||
"Failed to copy link": "Échec de la copie du lien",
|
||||
"Failed to create API Key.": "Échec de la création de la clé API.",
|
||||
"Failed to delete note": "Échec de la délétion de la note",
|
||||
"Failed to extract content from the file: {{error}}": "",
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to extract content from the file: {{error}}": "Échec de l'extraction du contenu du fichier : {{error}}",
|
||||
"Failed to extract content from the file.": "Échec de l'extraction du contenu du fichier",
|
||||
"Failed to fetch models": "Échec de la récupération des modèles",
|
||||
"Failed to generate title": "",
|
||||
"Failed to generate title": "Échec de la génération du titre",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "Échec du chargement du contenu du fichier",
|
||||
"Failed to read clipboard contents": "Échec de la lecture du contenu du presse-papiers",
|
||||
"Failed to save connections": "Échec de la sauvegarde des connexions",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Streaming fluide de gros chunks de réponses externes",
|
||||
"Focus chat input": "Mettre le focus sur l'entrée de la conversation",
|
||||
"Folder deleted successfully": "Dossier supprimé avec succès",
|
||||
"Folder Name": "Nom du dossier",
|
||||
"Folder name cannot be empty.": "Le nom du dossier ne peut pas être vide.",
|
||||
"Folder name updated successfully": "Le nom du dossier a été mis à jour avec succès",
|
||||
"Folder updated successfully": "Le dossier a été mis à jour avec succès",
|
||||
"Follow up": "Suivi",
|
||||
"Follow Up Generation": "Suivi de la génération",
|
||||
"Follow Up Generation Prompt": "Suivi de la génération du protompt",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Commandes d'entrée",
|
||||
"Input Variables": "Variables d'entrée",
|
||||
"Insert": "Insérer",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "Insérer le prompt en tant que texte enrichi",
|
||||
"Install from Github URL": "Installer depuis une URL GitHub",
|
||||
"Instant Auto-Send After Voice Transcription": "Envoi automatique après la transcription",
|
||||
@@ -761,7 +769,7 @@
|
||||
"Invalid JSON file": "Fichier JSON non valide",
|
||||
"Invalid Tag": "Tag non valide",
|
||||
"is typing...": "est en train d'écrire...",
|
||||
"Italic": "",
|
||||
"Italic": "Italique",
|
||||
"January": "Janvier",
|
||||
"Jina API Key": "Clé API Jina",
|
||||
"join our Discord for help.": "Rejoignez notre Discord pour obtenir de l'aide.",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Expiration du token JWT",
|
||||
"JWT Token": "Token JWT",
|
||||
"Kagi Search API Key": "Clé API Kagi Search",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "Epingler dans la barre latérale",
|
||||
"Key": "Clé",
|
||||
"Keyboard shortcuts": "Raccourcis clavier",
|
||||
"Knowledge": "Connaissances",
|
||||
"Knowledge Access": "Accès aux connaissances",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Connaissance créée avec succès.",
|
||||
"Knowledge deleted successfully.": "Connaissance supprimée avec succès.",
|
||||
"Knowledge Public Sharing": "Partage public des Connaissances",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Laissez vide pour utiliser le prompt par défaut, ou entrez un prompt personnalisé",
|
||||
"Leave model field empty to use the default model.": "Laisser le champ du modèle vide pour utiliser le modèle par défaut.",
|
||||
"License": "Licence",
|
||||
"Lift List": "",
|
||||
"Light": "Clair",
|
||||
"Listening...": "Écoute en cours...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "Nouvel outil",
|
||||
"new-channel": "nouveau-canal",
|
||||
"Next message": "Message suivant",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "Pas de conversation trouvée pour cet utilisateur.",
|
||||
"No chats found.": "Pas de conversation trouvée.",
|
||||
"No content": "Pas de contenu",
|
||||
@@ -969,7 +981,7 @@
|
||||
"openapi.json URL or Path": "URL ou chemin openapi.json",
|
||||
"Options for running a local vision-language model in the picture description. The parameters refer to a model hosted on Hugging Face. This parameter is mutually exclusive with picture_description_api.": "Options pour exécuter un modèle de vision local dans la description d'image. Les réglages font référence à un modèle hébergé sur Hugging Face. Ce réglage est mutuellement exclusif avec picture_description_api.",
|
||||
"or": "ou",
|
||||
"Ordered List": "",
|
||||
"Ordered List": "Liste ordonnéee",
|
||||
"Organize your users": "Organisez vos utilisateurs",
|
||||
"Other": "Autre",
|
||||
"OUTPUT": "SORTIE",
|
||||
@@ -1118,7 +1130,7 @@
|
||||
"Search Functions": "Rechercher des fonctions",
|
||||
"Search Knowledge": "Rechercher des connaissances",
|
||||
"Search Models": "Rechercher des modèles",
|
||||
"Search Notes": "",
|
||||
"Search Notes": "Rechercher des notes",
|
||||
"Search options": "Options de recherche",
|
||||
"Search Prompts": "Rechercher des prompts",
|
||||
"Search Result Count": "Nombre de résultats de recherche",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Découvrez les nouvelles fonctionnalités",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "Sélectionnez un modèle de base",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Sélectionnez un moteur",
|
||||
"Select a function": "Sélectionnez une fonction",
|
||||
"Select a group": "Sélectionner un groupe",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Inscrivez-vous à {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "Améliore considérablement la précision en utilisant un LLM pour améliorer la détection des tableaux, des formulaires, des mathématiques en ligne et de la mise en page. Augmente la latence. Par défaut à True.",
|
||||
"Signing in to {{WEBUI_NAME}}": "Connexion à {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "Ne pas utiliser le cache",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "Ne pas utiliser le cache et re executer l'inférence. Par defaut à False",
|
||||
@@ -1242,7 +1256,7 @@
|
||||
"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting.": "Le sampling sans queue est utilisé pour réduire l'impact des tokens moins probables dans la sortie. Une valeur plus élevée (par exemple, 2.0) réduira davantage l'impact, tandis qu'une valeur de 1.0 désactive ce réglage.",
|
||||
"Talk to model": "Parler au modèle",
|
||||
"Tap to interrupt": "Appuyez pour interrompre",
|
||||
"Task List": "",
|
||||
"Task List": "Liste pour les tâches",
|
||||
"Task Model": "Modèle pour les tâches",
|
||||
"Tasks": "Tâches",
|
||||
"Tavily API Key": "Clé API Tavily",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Pour accéder à l'interface Web, veuillez contacter l'administrateur. Les administrateurs peuvent gérer les statuts des utilisateurs depuis le panneau d'administration.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Pour attacher une base de connaissances ici, ajoutez-les d'abord à l'espace de travail « Connaissances ».",
|
||||
"To learn more about available endpoints, visit our documentation.": "Pour en savoir plus sur les points de terminaison disponibles, consultez notre documentation.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Pour protéger votre confidentialité, seules les notes, les identifiants de modèle, les tags et les métadonnées de vos commentaires sont partagés. Vos journaux de discussion restent privés et ne sont pas inclus.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Pour sélectionner des actions ici, ajoutez-les d'abord à l'espace de travail « Fonctions ».",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Pour sélectionner des filtres ici, ajoutez-les d'abord à l'espace de travail « Fonctions ». ",
|
||||
@@ -1351,11 +1366,12 @@
|
||||
"Unarchive All": "Désarchiver tout",
|
||||
"Unarchive All Archived Chats": "Désarchiver toutes les conversations archivées",
|
||||
"Unarchive Chat": "Désarchiver la conversation",
|
||||
"Underline": "",
|
||||
"Underline": "Souligner",
|
||||
"Unloads {{FROM_NOW}}": "Décharge {{FROM_NOW}}",
|
||||
"Unlock mysteries": "Déverrouiller les mystères",
|
||||
"Unpin": "Désépingler",
|
||||
"Unravel secrets": "Dévoiler les secrets",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Pas de tag",
|
||||
"Untitled": "Sans titre",
|
||||
"Update": "Mise à jour",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "Webhooks utilisateur",
|
||||
"Username": "Nom d'utilisateur",
|
||||
"Users": "Utilisateurs",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Utilisation du modèle d'arène par défaut avec tous les modèles. Cliquez sur le bouton plus pour ajouter des modèles personnalisés.",
|
||||
"Utilize": "Utilisez",
|
||||
"Valid time units:": "Unités de temps valides\u00a0:",
|
||||
"Valves": "Vannes",
|
||||
"Valves updated": "Vannes mises à jour",
|
||||
"Valves updated successfully": "Les vannes ont été mises à jour avec succès",
|
||||
"variable": "variable",
|
||||
"variable to have them replaced with clipboard content.": "variable pour qu'elles soient remplacées par le contenu du presse-papiers.",
|
||||
"Verify Connection": "Vérifier la connexion",
|
||||
"Verify SSL Certificate": "Vérifier le certificat SSL",
|
||||
"Version": "Version:",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Xerar unha conta",
|
||||
"Create Admin Account": "Xerar conta administrativa",
|
||||
"Create Channel": "Xerar Canal",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Xerar grupo",
|
||||
"Create Knowledge": "Xerar Conocemento",
|
||||
"Create new key": "Xerar unha nova chave",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "p.ej. ferramentas para realizar diversas operacions",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Editar Canal",
|
||||
"Edit Connection": "Editar Conexión",
|
||||
"Edit Default Permissions": "Editar permisos predeterminados",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Editar Memoria",
|
||||
"Edit User": "Editar Usuario",
|
||||
"Edit User Group": "Editar grupo de usuarios",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Ingresa a URL sin procesar de Github",
|
||||
"Enter Google PSE API Key": "Ingrese a chave API de Google PSE",
|
||||
"Enter Google PSE Engine Id": "Introduzca o ID do motor PSE de Google",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Non pudo agregarse o Arquivo.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "Non puderon obterse os modelos",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Non pudo Lerse o contido do portapapeles",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de resposta externa",
|
||||
"Focus chat input": "Enfoca a entrada do chat",
|
||||
"Folder deleted successfully": "Carpeta eliminada correctamente",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "O nome da carpeta non pode estar vacío",
|
||||
"Folder name updated successfully": "Nombre da carpeta actualizado correctamente",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Ingresar comandos",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Instalar desde a URL de Github",
|
||||
"Instant Auto-Send After Voice Transcription": "Auto-Enviar despois da Transcripción de Voz",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Expiración do JWT",
|
||||
"JWT Token": "Token JWT",
|
||||
"Kagi Search API Key": "chave API de Kagi Search",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "Chave",
|
||||
"Keyboard shortcuts": "Atallos de teclado",
|
||||
"Knowledge": "coñecemento",
|
||||
"Knowledge Access": "Acceso al coñecemento",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "coñecemento creado exitosamente.",
|
||||
"Knowledge deleted successfully.": "coñecemento eliminado exitosamente.",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Deixa vacío para usar o prompt predeterminado, o ingrese un prompt personalizado",
|
||||
"Leave model field empty to use the default model.": "Deixa o campo do modelo vacío para usar o modelo predeterminado.",
|
||||
"License": "Licencia",
|
||||
"Lift List": "",
|
||||
"Light": "Claro",
|
||||
"Listening...": "Escoitando...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "novo-canal",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Ver as novedades",
|
||||
"Seed": "Semilla",
|
||||
"Select a base model": "Seleccionar un modelo base",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Busca un motor",
|
||||
"Select a function": "Busca unha función",
|
||||
"Select a group": "Seleccionar un grupo",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Xerar unha conta en {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "Iniciando sesión en {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para acceder al interfaz de usuario web, por favor contacte al administrador. os administradores pueden administrar os estados de os usuarios desde o panel de administración.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Para adjuntar la base de coñecementos aquí, agreguelas al área de trabajo \"coñecemento\" primeiro.",
|
||||
"To learn more about available endpoints, visit our documentation.": "Para obter mais información sobre os endpoints disponibles, visite nuestra documentación.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Para protexer a sua privacidade, solo compartense as calificacions, IDs dos modelos, etiquetas e metadatos da sua retroalimentación; os seus rexistros de chat permanecen privados e non se incluen.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Para seleccionar accions aquí, agreguelas al área de trabajo \"Funcions\" primeiro.",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Para seleccionar filtros aquí, agreguelos al área de trabajo \"Funcions\" primeiro.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Desbloquear misterios",
|
||||
"Unpin": "Desanclar",
|
||||
"Unravel secrets": "Desentrañar secretos",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Sin etiquetar",
|
||||
"Untitled": "",
|
||||
"Update": "Actualizar",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "Nombre de usuario",
|
||||
"Users": "Usuarios",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Usando o modelo de arena predeterminado con todos os modelos. Haga clic no botón mais para agregar modelos personalizados.",
|
||||
"Utilize": "Utilizar",
|
||||
"Valid time units:": "Unidades válidas de tempo:",
|
||||
"Valves": "Valves",
|
||||
"Valves updated": "Valves actualizados",
|
||||
"Valves updated successfully": "Valves actualizados con éxito",
|
||||
"variable": "variable",
|
||||
"variable to have them replaced with clipboard content.": "variable para reemplazarlos co contido do portapapeles.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Versión",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "צור חשבון",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "יצירת קבוצה",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "צור מפתח חדש",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "ערוך משתמש",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "הזן כתובת URL של Github Raw",
|
||||
"Enter Google PSE API Key": "הזן מפתח API של Google PSE",
|
||||
"Enter Google PSE Engine Id": "הזן את מזהה מנוע PSE של Google",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "קריאת תוכן הלוח נכשלה",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "שידור נתונים חיצוניים בקצב רציף",
|
||||
"Focus chat input": "מיקוד הקלט לצ'אט",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "פקודות קלט",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "התקן מכתובת URL של Github",
|
||||
"Instant Auto-Send After Voice Transcription": "",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "תפוגת JWT",
|
||||
"JWT Token": "אסימון JWT",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "קיצורי מקלדת",
|
||||
"Knowledge": "",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "רישיון",
|
||||
"Lift List": "",
|
||||
"Light": "בהיר",
|
||||
"Listening...": "",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "כלי חדש",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "לא נמצאו צ'אטים ליוזר הזה.",
|
||||
"No chats found.": "לא נמצאו צ'אטים",
|
||||
"No content": "אין תוכן",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "ראה מה חדש",
|
||||
"Seed": "זרע",
|
||||
"Select a base model": "בחירת מודל בסיס",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "",
|
||||
"Select a function": "",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "משתמשים",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "שימוש",
|
||||
"Valid time units:": "יחידות זמן תקינות:",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "משתנה",
|
||||
"variable to have them replaced with clipboard content.": "משתנה להחליפו ב- clipboard תוכן.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "גרסה",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "खाता बनाएं",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "नया क्रिप्टोग्राफिक क्षेत्र बनाएं",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "यूजर को संपादित करो",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Github Raw URL दर्ज करें",
|
||||
"Enter Google PSE API Key": "Google PSE API कुंजी दर्ज करें",
|
||||
"Enter Google PSE Engine Id": "Google PSE इंजन आईडी दर्ज करें",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "क्लिपबोर्ड सामग्री पढ़ने में विफल",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "बड़े बाह्य प्रतिक्रिया खंडों को तरल रूप से प्रवाहित करें",
|
||||
"Focus chat input": "चैट इनपुट पर फ़ोकस करें",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "इनपुट क命",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Github URL से इंस्टॉल करें",
|
||||
"Instant Auto-Send After Voice Transcription": "",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT समाप्ति",
|
||||
"JWT Token": "जट टोकन",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "कीबोर्ड शॉर्टकट",
|
||||
"Knowledge": "",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "सुन",
|
||||
"Listening...": "",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "देखें, क्या नया है",
|
||||
"Seed": "सीड्\u200c",
|
||||
"Select a base model": "एक आधार मॉडल का चयन करें",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "",
|
||||
"Select a function": "",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "उपयोगकर्ताओं",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "उपयोग करें",
|
||||
"Valid time units:": "मान्य समय इकाइयाँ:",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "वेरिएबल",
|
||||
"variable to have them replaced with clipboard content.": "उन्हें क्लिपबोर्ड सामग्री से बदलने के लिए वेरिएबल।",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "संस्करण",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Stvori račun",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "Stvori novi ključ",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Uredi korisnika",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Unesite Github sirovi URL",
|
||||
"Enter Google PSE API Key": "Unesite Google PSE API ključ",
|
||||
"Enter Google PSE Engine Id": "Unesite ID Google PSE motora",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Neuspješno čitanje sadržaja međuspremnika",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Glavno strujanje velikih vanjskih dijelova odgovora",
|
||||
"Focus chat input": "Fokusiraj unos razgovora",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Unos naredbi",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Instaliraj s Github URL-a",
|
||||
"Instant Auto-Send After Voice Transcription": "Trenutačno automatsko slanje nakon glasovne transkripcije",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Isticanje JWT-a",
|
||||
"JWT Token": "JWT token",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "Tipkovnički prečaci",
|
||||
"Knowledge": "Znanje",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "Svijetlo",
|
||||
"Listening...": "Slušam...",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Pogledajte što je novo",
|
||||
"Seed": "Sjeme",
|
||||
"Select a base model": "Odabir osnovnog modela",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Odaberite pogon",
|
||||
"Select a function": "",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Za pristup WebUI-u obratite se administratoru. Administratori mogu upravljati statusima korisnika s Admin panela.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "Korisnici",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "Iskoristi",
|
||||
"Valid time units:": "Važeće vremenske jedinice:",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "varijabla",
|
||||
"variable to have them replaced with clipboard content.": "varijabla za zamjenu sadržajem međuspremnika.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Verzija",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Fiók létrehozása",
|
||||
"Create Admin Account": "Admin fiók létrehozása",
|
||||
"Create Channel": "Csatorna létrehozása",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Csoport létrehozása",
|
||||
"Create Knowledge": "Tudás létrehozása",
|
||||
"Create new key": "Új kulcs létrehozása",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "pl. Eszközök különböző műveletek elvégzéséhez",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Csatorna szerkesztése",
|
||||
"Edit Connection": "Kapcsolat szerkesztése",
|
||||
"Edit Default Permissions": "Alapértelmezett engedélyek szerkesztése",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Memória szerkesztése",
|
||||
"Edit User": "Felhasználó szerkesztése",
|
||||
"Edit User Group": "Felhasználói csoport szerkesztése",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Add meg a Github Raw URL-t",
|
||||
"Enter Google PSE API Key": "Add meg a Google PSE API kulcsot",
|
||||
"Enter Google PSE Engine Id": "Add meg a Google PSE motor azonosítót",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Nem sikerült hozzáadni a fájlt.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "Nem sikerült csatlakozni a {{URL}} OpenAPI eszköszerverhez",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "Nem sikerült lekérni a modelleket",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Nem sikerült olvasni a vágólap tartalmát",
|
||||
"Failed to save connections": "Nem sikerült menteni a kapcsolatokat",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Nagy külső válasz darabok folyamatos streamelése",
|
||||
"Focus chat input": "Chat bevitel fókuszálása",
|
||||
"Folder deleted successfully": "Mappa sikeresen törölve",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "A mappa neve nem lehet üres.",
|
||||
"Folder name updated successfully": "Mappa neve sikeresen frissítve",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Beviteli parancsok",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Telepítés Github URL-ről",
|
||||
"Instant Auto-Send After Voice Transcription": "Azonnali automatikus küldés hangfelismerés után",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT lejárat",
|
||||
"JWT Token": "JWT token",
|
||||
"Kagi Search API Key": "Kagi Search API kulcs",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "Kulcs",
|
||||
"Keyboard shortcuts": "Billentyűparancsok",
|
||||
"Knowledge": "Tudásbázis",
|
||||
"Knowledge Access": "Tudásbázis hozzáférés",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Tudásbázis sikeresen létrehozva.",
|
||||
"Knowledge deleted successfully.": "Tudásbázis sikeresen törölve.",
|
||||
"Knowledge Public Sharing": "Tudásbázis nyilvános megosztása",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Hagyja üresen az alapértelmezett prompt használatához, vagy adjon meg egyéni promptot",
|
||||
"Leave model field empty to use the default model.": "Hagyja üresen a modell mezőt az alapértelmezett modell használatához.",
|
||||
"License": "Licenc",
|
||||
"Lift List": "",
|
||||
"Light": "Világos",
|
||||
"Listening...": "Hallgatás...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "új csatorna",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Újdonságok megtekintése",
|
||||
"Seed": "Seed",
|
||||
"Select a base model": "Válasszon egy alapmodellt",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Válasszon egy motort",
|
||||
"Select a function": "Válasszon egy funkciót",
|
||||
"Select a group": "Válasszon egy csoportot",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Regisztráció ide: {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "Bejelentkezés ide: {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "A WebUI eléréséhez kérjük, forduljon az adminisztrátorhoz. Az adminisztrátorok az Admin Panelen keresztül kezelhetik a felhasználói státuszokat.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "A tudásbázis csatolásához először adja hozzá őket a \"Knowledge\" munkaterülethez.",
|
||||
"To learn more about available endpoints, visit our documentation.": "Az elérhető végpontokról további információért látogassa meg dokumentációnkat.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Adatai védelme érdekében a visszajelzésből csak az értékelések, modell azonosítók, címkék és metaadatok kerülnek megosztásra - a csevegési előzményei privátak maradnak és nem kerülnek megosztásra.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "A műveletek kiválasztásához először adja hozzá őket a \"Functions\" munkaterülethez.",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "A szűrők kiválasztásához először adja hozzá őket a \"Functions\" munkaterülethez.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Titkok feloldása",
|
||||
"Unpin": "Rögzítés feloldása",
|
||||
"Unravel secrets": "Titkok megfejtése",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Címkézetlen",
|
||||
"Untitled": "",
|
||||
"Update": "Frissítés",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "Felhasználói webhookok",
|
||||
"Username": "Felhasználónév",
|
||||
"Users": "Felhasználók",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Az alapértelmezett aréna modell használata az összes modellel. Kattintson a plusz gombra egyéni modellek hozzáadásához.",
|
||||
"Utilize": "Használat",
|
||||
"Valid time units:": "Érvényes időegységek:",
|
||||
"Valves": "Szelepek",
|
||||
"Valves updated": "Szelepek frissítve",
|
||||
"Valves updated successfully": "Szelepek sikeresen frissítve",
|
||||
"variable": "változó",
|
||||
"variable to have them replaced with clipboard content.": "változó, hogy a vágólap tartalmával helyettesítse őket.",
|
||||
"Verify Connection": "Kapcsolat ellenőrzése",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Verzió",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Buat Akun",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "Buat kunci baru",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Edit Memori",
|
||||
"Edit User": "Edit Pengguna",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Masukkan URL Mentah Github",
|
||||
"Enter Google PSE API Key": "Masukkan Kunci API Google PSE",
|
||||
"Enter Google PSE Engine Id": "Masukkan Id Mesin Google PSE",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Gagal membaca konten papan klip",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Mengalirkan potongan respons eksternal yang besar dengan lancar",
|
||||
"Focus chat input": "Memfokuskan input obrolan",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Perintah masukan",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Instal dari URL Github",
|
||||
"Instant Auto-Send After Voice Transcription": "Kirim Otomatis Instan Setelah Transkripsi Suara",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Kedaluwarsa JWT",
|
||||
"JWT Token": "Token JWT",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "Pintasan keyboard",
|
||||
"Knowledge": "Pengetahuan",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "Cahaya",
|
||||
"Listening...": "Mendengarkan",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Lihat apa yang baru",
|
||||
"Seed": "Benih",
|
||||
"Select a base model": "Pilih model dasar",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Pilih mesin",
|
||||
"Select a function": "Memilih fungsi",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Untuk mengakses WebUI, hubungi administrator. Admin dapat mengelola status pengguna dari Panel Admin.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Untuk memilih filter di sini, tambahkan filter ke ruang kerja \"Fungsi\" terlebih dahulu.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "Memperbarui",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "Pengguna",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "Memanfaatkan",
|
||||
"Valid time units:": "Unit waktu yang valid:",
|
||||
"Valves": "Katup",
|
||||
"Valves updated": "Katup diperbarui",
|
||||
"Valves updated successfully": "Katup berhasil diperbarui",
|
||||
"variable": "variabel",
|
||||
"variable to have them replaced with clipboard content.": "variabel untuk diganti dengan konten papan klip.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Versi",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Cruthaigh Cuntas",
|
||||
"Create Admin Account": "Cruthaigh Cuntas Riaracháin",
|
||||
"Create Channel": "Cruthaigh Cainéal",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Cruthaigh Grúpa",
|
||||
"Create Knowledge": "Cruthaigh Eolais",
|
||||
"Create new key": "Cruthaigh eochair nua",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "m.sh. pdf, docx, txt",
|
||||
"e.g. Tools for performing various operations": "m.sh. Uirlisí chun oibríochtaí éagsúla a dhéanamh",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "m.sh., 3, 4, 5 (fág bán le haghaidh réamhshocraithe)",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "m.sh., en-US, ja-JP (fág bán le haghaidh uathbhraite)",
|
||||
"e.g., westus (leave blank for eastus)": "m.sh., westus (fág bán le haghaidh eastus)",
|
||||
"e.g.) en,fr,de": "m.sh.) en, fr, de",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Cuir Cainéal in Eagar",
|
||||
"Edit Connection": "Cuir Ceangal in Eagar",
|
||||
"Edit Default Permissions": "Cuir Ceadanna Réamhshocraithe in Eagar",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Cuir Cuimhne in eagar",
|
||||
"Edit User": "Cuir Úsáideoir in eagar",
|
||||
"Edit User Group": "Cuir Grúpa Úsáideoirí in Eagar",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "Cuir isteach URL Cuardaigh Gréasáin Sheachtrach",
|
||||
"Enter Firecrawl API Base URL": "Cuir isteach URL Bonn API Firecrawl",
|
||||
"Enter Firecrawl API Key": "Cuir isteach Eochair API Firecrawl",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Cuir isteach URL Github Raw",
|
||||
"Enter Google PSE API Key": "Cuir isteach Eochair API Google PSE",
|
||||
"Enter Google PSE Engine Id": "Cuir isteach ID Inneall Google PSE",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "URL Luchtóra Gréasáin Sheachtraigh",
|
||||
"External Web Search API Key": "Eochair API Cuardaigh Gréasáin Sheachtrach",
|
||||
"External Web Search URL": "URL Cuardaigh Gréasáin Sheachtrach",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Theip ar an gcomhad a chur leis.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "Theip ar nascadh le {{URL}} freastalaí uirlisí OpenAPI",
|
||||
"Failed to copy link": "Theip ar an nasc a chóipeáil",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "Theip ar shamhlacha a fháil",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "Theip ar lódáil ábhar an chomhaid.",
|
||||
"Failed to read clipboard contents": "Theip ar ábhar gearrthaisce a lé",
|
||||
"Failed to save connections": "Theip ar na naisc a shábháil",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Sruthaigh codanna móra freagartha seachtracha go sreabhach",
|
||||
"Focus chat input": "Ionchur comhrá fócas",
|
||||
"Folder deleted successfully": "Scriosadh an fillteán go rathúil",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Ní féidir ainm fillteáin a bheith folamh.",
|
||||
"Folder name updated successfully": "D'éirigh le hainm an fhillteáin a nuashonrú",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "Leanúint suas",
|
||||
"Follow Up Generation": "Giniúint Leantach",
|
||||
"Follow Up Generation Prompt": "Leid Ghiniúna Leanúnach",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Orduithe ionchuir",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Suiteáil ó Github URL",
|
||||
"Instant Auto-Send After Voice Transcription": "Seoladh Uathoibríoch Láithreach Tar éis",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Éag JWT",
|
||||
"JWT Token": "Comhartha JWT",
|
||||
"Kagi Search API Key": "Eochair API Chuardaigh Kagi",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "Coinnigh sa Bharra Taobh",
|
||||
"Key": "Eochair",
|
||||
"Keyboard shortcuts": "Aicearraí méarchlár",
|
||||
"Knowledge": "Eolas",
|
||||
"Knowledge Access": "Rochtain Eolais",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Eolas cruthaithe go rathúil.",
|
||||
"Knowledge deleted successfully.": "D'éirigh leis an eolas a scriosadh.",
|
||||
"Knowledge Public Sharing": "Roinnt Faisnéise Poiblí",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Fág folamh chun an leid réamhshocraithe a úsáid, nó cuir isteach leid saincheaptha",
|
||||
"Leave model field empty to use the default model.": "Fág réimse an mhúnla folamh chun an tsamhail réamhshocraithe a úsáid.",
|
||||
"License": "Ceadúnas",
|
||||
"Lift List": "",
|
||||
"Light": "Solas",
|
||||
"Listening...": "Éisteacht...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "Uirlis Nua",
|
||||
"new-channel": "nua-chainéil",
|
||||
"Next message": "An chéad teachtaireacht eile",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "Ní bhfuarthas aon chomhráite don úsáideoir seo.",
|
||||
"No chats found.": "Ní bhfuarthas aon chomhráite.",
|
||||
"No content": "Gan aon ábhar",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Féach cad atá nua",
|
||||
"Seed": "Síol",
|
||||
"Select a base model": "Roghnaigh múnla bonn",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Roghnaigh inneall",
|
||||
"Select a function": "Roghnaigh feidhm",
|
||||
"Select a group": "Roghnaigh grúpa",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Cláraigh le {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "Feabhsaíonn sé cruinneas go suntasach trí LLM a úsáid chun táblaí, foirmeacha, matamaitic inlíne, agus braiteadh leagan amach a fheabhsú. Méadóidh sé an mhoill. Réamhshocrú go Fíor.",
|
||||
"Signing in to {{WEBUI_NAME}}": "Ag síniú isteach ar {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "Seachain an Taisce",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "Seachain an taisce agus athrith an tátal. Réamhshocrú Bréagach.",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Chun rochtain a fháil ar an WebUI, déan teagmháil leis an riarthóir le do thoil. Is féidir le riarthóirí stádas úsáideora a bhainistiú ón bPainéal Riaracháin.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Chun an bonn eolais a cheangal anseo, cuir leis an spás oibre \"Eolas\" iad ar dtús.",
|
||||
"To learn more about available endpoints, visit our documentation.": "Chun tuilleadh a fhoghlaim faoi na críochphointí atá ar fáil, tabhair cuairt ar ár gcáipéisíocht.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Chun do phríobháideachas a chosaint, ní roinntear ach rátálacha, aitheantais mhúnla, clibeanna agus meiteashonraí ó d'aiseolas - fanann do logaí comhrá príobháideach agus níl siad san áireamh.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Chun gníomhartha a roghnú anseo, cuir iad leis an spás oibre \"Feidhmeanna\" ar dtús.",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Chun scagairí a roghnú anseo, cuir iad leis an spás oibre \"Feidhmeanna\" ar dtús.",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Díghlasáil rúndiamhra",
|
||||
"Unpin": "Díphoráil",
|
||||
"Unravel secrets": "Rúin a réiteach",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Gan chlib",
|
||||
"Untitled": "Gan Teideal",
|
||||
"Update": "Nuashonraigh",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "Crúcaí Gréasáin Úsáideoir",
|
||||
"Username": "Ainm Úsáideora",
|
||||
"Users": "Úsáideoirí",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Ag baint úsáide as an múnla réimse réamhshocraithe le gach múnlaí. Cliceáil ar an gcnaipe móide chun múnlaí saincheaptha a chur leis.",
|
||||
"Utilize": "Úsáid",
|
||||
"Valid time units:": "Aonaid ama bailí:",
|
||||
"Valves": "Comhlaí",
|
||||
"Valves updated": "Comhlaí dáta",
|
||||
"Valves updated successfully": "Comhlaí nuashonraíodh",
|
||||
"variable": "athraitheach",
|
||||
"variable to have them replaced with clipboard content.": "athróg chun ábhar gearrthaisce a chur in ionad iad.",
|
||||
"Verify Connection": "Fíoraigh Ceangal",
|
||||
"Verify SSL Certificate": "Fíoraigh Deimhniú SSL",
|
||||
"Version": "Leagan",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Crea account",
|
||||
"Create Admin Account": "Crea account amministratore",
|
||||
"Create Channel": "Crea canale",
|
||||
"Create Folder": "",
|
||||
"Create Group": "Crea gruppo",
|
||||
"Create Knowledge": "Crea conoscenza",
|
||||
"Create new key": "Crea nuova chiave",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "ad esempio pdf, docx, txt",
|
||||
"e.g. Tools for performing various operations": "ad esempio strumenti per eseguire varie operazioni",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "ad esempio, 3, 4, 5 (lascia vuoto per predefinito)",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "ad esempio, en-US,ja-JP (lascia vuoto per auto-rilevamento)",
|
||||
"e.g., westus (leave blank for eastus)": "ad esempio, westus (lascia vuoto per est)",
|
||||
"e.g.) en,fr,de": "ad esempio ) en,fr,de",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "Modifica Canale",
|
||||
"Edit Connection": "Modifica Connessione",
|
||||
"Edit Default Permissions": "Modifica Permessi Predefiniti",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Modifica Memoria",
|
||||
"Edit User": "Modifica Utente",
|
||||
"Edit User Group": "Modifica Gruppo Utente",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "Inserisci URL di Ricerca Web Esterna",
|
||||
"Enter Firecrawl API Base URL": "Inserisci l'URL base dell'API Firecrawl",
|
||||
"Enter Firecrawl API Key": "Inserisci Chiave API Firecrawl",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Inserisci URL Grezzo di Github",
|
||||
"Enter Google PSE API Key": "Inserisci Chiave API per Google PSE",
|
||||
"Enter Google PSE Engine Id": "Inserisci Engine Id per Google PSE",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "URL del web loader esterno",
|
||||
"External Web Search API Key": "Chiave API di ricerca web esterna",
|
||||
"External Web Search URL": "URL di ricerca web esterna",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "Impossibile aggiungere il file.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "Impossibile connettersi al server dello strumento OpenAPI {{URL}}",
|
||||
"Failed to copy link": "Impossibile copiare il link",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "Impossibile recuperare i modelli",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "Impossibile caricare il contenuto del file.",
|
||||
"Failed to read clipboard contents": "Impossibile leggere il contenuto degli appunti",
|
||||
"Failed to save connections": "Impossibile salvare le connessioni",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Trasmetti in modo fluido blocchi di risposta esterni di grandi dimensioni",
|
||||
"Focus chat input": "Metti a fuoco l'input della chat",
|
||||
"Folder deleted successfully": "Cartella rimossa con successo",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "Il nome della cartella non può essere vuoto.",
|
||||
"Folder name updated successfully": "Nome cartella aggiornato con successo",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "Follow up",
|
||||
"Follow Up Generation": "Generazione follow up",
|
||||
"Follow Up Generation Prompt": "Generazione prompt follow up",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Comandi di input",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Eseguire l'installazione dall'URL di Github",
|
||||
"Instant Auto-Send After Voice Transcription": "Invio automatico istantaneo dopo la trascrizione vocale",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "Scadenza JWT",
|
||||
"JWT Token": "Token JWT",
|
||||
"Kagi Search API Key": "Chiave API di ricerca Kagi",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "Mantieni nella barra laterale",
|
||||
"Key": "Chiave",
|
||||
"Keyboard shortcuts": "Scorciatoie da tastiera",
|
||||
"Knowledge": "Conoscenza",
|
||||
"Knowledge Access": "Accesso alla conoscenza",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "Conoscenza creata con successo.",
|
||||
"Knowledge deleted successfully.": "Conoscenza eliminata con successo.",
|
||||
"Knowledge Public Sharing": "Conoscenza condivisione pubblica",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "Lascia vuoto per utilizzare il prompt predefinito o inserisci un prompt personalizzato",
|
||||
"Leave model field empty to use the default model.": "Lascia vuoto il campo modello per utilizzare il modello predefinito.",
|
||||
"License": "Licenza",
|
||||
"Lift List": "",
|
||||
"Light": "Chiaro",
|
||||
"Listening...": "In ascolto...",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "Nuovo strumento",
|
||||
"new-channel": "nuovo-canale",
|
||||
"Next message": "Messaggio successivo",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "Nessuna chat trovata per questo utente.",
|
||||
"No chats found.": "Nessuna chat trovata.",
|
||||
"No content": "Nessun contenuto",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Guarda le novità",
|
||||
"Seed": "Seme",
|
||||
"Select a base model": "Selezionare un modello di base",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Seleziona un motore",
|
||||
"Select a function": "Seleziona una funzione",
|
||||
"Select a group": "Seleziona un gruppo",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "Registrati a {{WEBUI_NAME}}",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "Accedi a {{WEBUI_NAME}}",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "Salta cache",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Per accedere a WebUI, contatta l'amministratore. Gli amministratori possono gestire gli stati degli utenti dal pannello di amministrazione.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "Per allegare la base di conoscenza qui, aggiungili prima allo spazio di lavoro \"Conoscenza\".",
|
||||
"To learn more about available endpoints, visit our documentation.": "Per saperne di più sugli endpoint disponibili, visita la nostra documentazione.",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "Per proteggere la tua privacy, solo le valutazioni, gli ID dei modelli, i tag e i metadati vengono condivisi dal tuo feedback: i registri della chat rimangono privati e non sono inclusi.",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Per selezionare le azioni qui, aggiungile prima allo spazio di lavoro \"Funzioni\".",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Per selezionare i filtri qui, aggiungili prima allo spazio di lavoro \"Funzioni\".",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "Sblocca misteri",
|
||||
"Unpin": "Rimuovi fissato",
|
||||
"Unravel secrets": "Svela segreti",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "Non taggato",
|
||||
"Untitled": "Senza titolo",
|
||||
"Update": "Aggiorna",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "Webhook Utente",
|
||||
"Username": "Nome Utente",
|
||||
"Users": "Utenti",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "Utilizzando il modello di arena predefinito con tutti i modelli. Fai clic sul pulsante più per aggiungere modelli personalizzati.",
|
||||
"Utilize": "Utilizza",
|
||||
"Valid time units:": "Unità di tempo valide:",
|
||||
"Valves": "Valvole",
|
||||
"Valves updated": "Valvole aggiornate",
|
||||
"Valves updated successfully": "Valvole aggiornate con successo",
|
||||
"variable": "variabile",
|
||||
"variable to have them replaced with clipboard content.": "variabile per farli sostituire con il contenuto degli appunti.",
|
||||
"Verify Connection": "Verifica connessione",
|
||||
"Verify SSL Certificate": "Verifica certificato SSL",
|
||||
"Version": "Versione",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "アカウントを作成",
|
||||
"Create Admin Account": "管理者アカウントを作成",
|
||||
"Create Channel": "チャンネルを作成",
|
||||
"Create Folder": "",
|
||||
"Create Group": "グループを作成",
|
||||
"Create Knowledge": "ナレッジベース作成",
|
||||
"Create new key": "新しいキーを作成",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "チャンネルを編集",
|
||||
"Edit Connection": "接続を編集",
|
||||
"Edit Default Permissions": "デフォルトの許可を編集",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "メモリを編集",
|
||||
"Edit User": "ユーザーを編集",
|
||||
"Edit User Group": "ユーザーグループを編集",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "External Web Search URLを入力",
|
||||
"Enter Firecrawl API Base URL": "Firecrawl API Base URLを入力",
|
||||
"Enter Firecrawl API Key": "Firecrawl APIキーを入力",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Github Raw URLを入力",
|
||||
"Enter Google PSE API Key": "Google PSE APIキーの入力",
|
||||
"Enter Google PSE Engine Id": "Google PSE エンジン ID を入力します。",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "External Web Loader URL",
|
||||
"External Web Search API Key": "External Web Search APIキー",
|
||||
"External Web Search URL": "External Web Search URL",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "ファイルの追加に失敗しました。",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPIツールサーバーへの接続に失敗しました。",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "モデルの取得に失敗しました。",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "ファイルの内容を読み込めませんでした。",
|
||||
"Failed to read clipboard contents": "クリップボードの内容を読み取れませんでした",
|
||||
"Failed to save connections": "接続の保存に失敗しました。",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "大規模な外部応答チャンクをスムーズにストリーミングする",
|
||||
"Focus chat input": "チャット入力をフォーカス",
|
||||
"Folder deleted successfully": "フォルダー削除が成功しました。",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "フォルダー名を入力してください。",
|
||||
"Folder name updated successfully": "フォルダー名更新が成功しました。",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "入力コマンド",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Github URLからインストール",
|
||||
"Instant Auto-Send After Voice Transcription": "音声文字変換後に即時自動送信",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT 有効期限",
|
||||
"JWT Token": "JWT トークン",
|
||||
"Kagi Search API Key": "Kagi Search APIキー",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "キー",
|
||||
"Keyboard shortcuts": "キーボードショートカット",
|
||||
"Knowledge": "ナレッジベース",
|
||||
"Knowledge Access": "ナレッジアクセス",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "ナレッジベースの作成に成功しました",
|
||||
"Knowledge deleted successfully.": "ナレッジベースの削除に成功しました",
|
||||
"Knowledge Public Sharing": "ナレッジベースの公開共有",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "カスタムプロンプトを入力。空欄ならデフォルトプロンプト",
|
||||
"Leave model field empty to use the default model.": "モデルフィールドを空欄にしてデフォルトモデルを使用",
|
||||
"License": "ライセンス",
|
||||
"Lift List": "",
|
||||
"Light": "ライト",
|
||||
"Listening...": "聞いています...",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "新しいチャンネル",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "内容がありません",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "新機能を見る",
|
||||
"Seed": "シード",
|
||||
"Select a base model": "基本モデルの選択",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "エンジンの選択",
|
||||
"Select a function": "Functionの選択",
|
||||
"Select a group": "グループの選択",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "{{WEBUI_NAME}}にサインアップ",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "{{WEBUI_NAME}}にサインイン",
|
||||
"Sink List": "",
|
||||
"sk-1234": "sk-1234",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "WebUIにアクセスするには、管理者にお問い合わせください。管理者は管理者パネルからユーザーのステータスを管理できます。",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "ここに知識ベースを添付するには、まず \"Knowledge\" ワークスペースに追加してください。",
|
||||
"To learn more about available endpoints, visit our documentation.": "利用可能なエンドポイントについては、ドキュメントを参照してください。",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "プライバシーを保護するため、評価、モデル ID、タグ、およびメタデータのみがフィードバックから共有されます。— チャットログはプライバシーを保護され、含まれません。",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "ここでアクションを選択するには、まず \"Functions\" ワークスペースに追加してください。",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "ここでフィルターを選択するには、まず \"Functions\" ワークスペースに追加してください。",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "ピン留め解除",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "タイトルなし",
|
||||
"Update": "更新",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "ユーザー名",
|
||||
"Users": "ユーザー",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "活用",
|
||||
"Valid time units:": "有効な時間単位:",
|
||||
"Valves": "",
|
||||
"Valves updated": "バルブが更新されました",
|
||||
"Valves updated successfully": "バルブが正常に更新されました",
|
||||
"variable": "変数",
|
||||
"variable to have them replaced with clipboard content.": "クリップボードの内容に置き換える変数。",
|
||||
"Verify Connection": "接続を確認",
|
||||
"Verify SSL Certificate": "SSL証明書を確認",
|
||||
"Version": "バージョン",
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"Create Account": "ანგარიშის შექმნა",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "არხის შექმნა",
|
||||
"Create Folder": "",
|
||||
"Create Group": "ჯგუფის შექმნა",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "ახალი გასაღების შექმნა",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "არხის ჩასწორება",
|
||||
"Edit Connection": "შეერთების ჩასწორება",
|
||||
"Edit Default Permissions": "ნაგულისხმევი წვდომების ჩასწორება",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "მეხსიერების ჩასწორება",
|
||||
"Edit User": "მომხმარებლის ჩასწორება",
|
||||
"Edit User Group": "მომხმარებლის ჯგუფის ჩასწორება",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "შეიყვანეთ Github Raw URL",
|
||||
"Enter Google PSE API Key": "შეიყვანეთ Google PSE API-ის გასაღები",
|
||||
"Enter Google PSE Engine Id": "შეიყვანეთ Google PSE ძრავის ID",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "ფაილის დამატების შეცდომა.",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "ბუფერის შემცველობის წაკითხვა ჩავარდა",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "დიდი გარე პასუხის ფრაგმენტების გლუვად დასტრიმვა",
|
||||
"Focus chat input": "ჩატში შეყვანის ფოკუსი",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "შეიყვანეთ ბრძანებები",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "დაყენება Github-ის ბმულიდან",
|
||||
"Instant Auto-Send After Voice Transcription": "",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT-ის ვადა",
|
||||
"JWT Token": "JWT ტოკენი",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "გასაღები",
|
||||
"Keyboard shortcuts": "კლავიატურის მალსახმობები",
|
||||
"Knowledge": "ცოდნა",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "ლიცენზია",
|
||||
"Lift List": "",
|
||||
"Light": "ღია",
|
||||
"Listening...": "",
|
||||
"Llama.cpp": "Llama.cpp",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "new-channel",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "ნახეთ, რა არის ახალი",
|
||||
"Seed": "თესლი",
|
||||
"Select a base model": "აირჩიეთ საბაზისო მოდელი",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "აირჩიეთ ძრავა",
|
||||
"Select a function": "აირჩიეთ ფუნქცია",
|
||||
"Select a group": "აირჩიეთ ჯგუფი",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "ჩამოხსნა",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "ჭდის გარეშე",
|
||||
"Untitled": "",
|
||||
"Update": "განახლება",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "მომხმარებლის სახელი",
|
||||
"Users": "მომხმარებლები",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "გამოყენება",
|
||||
"Valid time units:": "სწორი დროის ერთეულები:",
|
||||
"Valves": "",
|
||||
"Valves updated": "",
|
||||
"Valves updated successfully": "",
|
||||
"variable": "ცვლადი",
|
||||
"variable to have them replaced with clipboard content.": "ცვლადი მისი ბუფერის მნიშვნელობით ჩასანაცვლებლად.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "ვერსია",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -290,6 +290,7 @@
|
||||
"Create Account": "Créer un compte",
|
||||
"Create Admin Account": "",
|
||||
"Create Channel": "",
|
||||
"Create Folder": "",
|
||||
"Create Group": "",
|
||||
"Create Knowledge": "",
|
||||
"Create new key": "Sukurti naują raktą",
|
||||
@@ -413,7 +414,7 @@
|
||||
"e.g. pdf, docx, txt": "",
|
||||
"e.g. Tools for performing various operations": "",
|
||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults, * for all)": "",
|
||||
"e.g., audio/wav,audio/mpeg,video/* (leave blank for defaults)": "",
|
||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||
"e.g., westus (leave blank for eastus)": "",
|
||||
"e.g.) en,fr,de": "",
|
||||
@@ -422,6 +423,7 @@
|
||||
"Edit Channel": "",
|
||||
"Edit Connection": "",
|
||||
"Edit Default Permissions": "",
|
||||
"Edit Folder": "",
|
||||
"Edit Memory": "Koreguoti atminį",
|
||||
"Edit User": "Redaguoti naudotoją",
|
||||
"Edit User Group": "",
|
||||
@@ -487,6 +489,7 @@
|
||||
"Enter External Web Search URL": "",
|
||||
"Enter Firecrawl API Base URL": "",
|
||||
"Enter Firecrawl API Key": "",
|
||||
"Enter folder name": "",
|
||||
"Enter Github Raw URL": "Įveskite GitHub Raw nuorodą",
|
||||
"Enter Google PSE API Key": "Įveskite Google PSE API raktą",
|
||||
"Enter Google PSE Engine Id": "Įveskite Google PSE variklio ID",
|
||||
@@ -599,6 +602,7 @@
|
||||
"External Web Loader URL": "",
|
||||
"External Web Search API Key": "",
|
||||
"External Web Search URL": "",
|
||||
"Fade Effect for Streaming Text": "",
|
||||
"Failed to add file.": "",
|
||||
"Failed to connect to {{URL}} OpenAPI tool server": "",
|
||||
"Failed to copy link": "",
|
||||
@@ -608,6 +612,7 @@
|
||||
"Failed to extract content from the file.": "",
|
||||
"Failed to fetch models": "",
|
||||
"Failed to generate title": "",
|
||||
"Failed to load chat preview": "",
|
||||
"Failed to load file content.": "",
|
||||
"Failed to read clipboard contents": "Nepavyko perskaityti kopijuoklės",
|
||||
"Failed to save connections": "",
|
||||
@@ -641,8 +646,10 @@
|
||||
"Fluidly stream large external response chunks": "Sklandžiai transliuoti ilgus atsakymus",
|
||||
"Focus chat input": "Fokusuoti žinutės įvestį",
|
||||
"Folder deleted successfully": "",
|
||||
"Folder Name": "",
|
||||
"Folder name cannot be empty.": "",
|
||||
"Folder name updated successfully": "",
|
||||
"Folder updated successfully": "",
|
||||
"Follow up": "",
|
||||
"Follow Up Generation": "",
|
||||
"Follow Up Generation Prompt": "",
|
||||
@@ -751,6 +758,7 @@
|
||||
"Input commands": "Įvesties komandos",
|
||||
"Input Variables": "",
|
||||
"Insert": "",
|
||||
"Insert Follow-Up Prompt to Input": "",
|
||||
"Insert Prompt as Rich Text": "",
|
||||
"Install from Github URL": "Instaliuoti Github nuorodą",
|
||||
"Instant Auto-Send After Voice Transcription": "Siųsti iškart po balso transkripcijos",
|
||||
@@ -774,11 +782,13 @@
|
||||
"JWT Expiration": "JWT išėjimas iš galiojimo",
|
||||
"JWT Token": "JWT žetonas",
|
||||
"Kagi Search API Key": "",
|
||||
"Keep Follow-Up Prompts in Chat": "",
|
||||
"Keep in Sidebar": "",
|
||||
"Key": "",
|
||||
"Keyboard shortcuts": "Klaviatūros trumpiniai",
|
||||
"Knowledge": "Žinios",
|
||||
"Knowledge Access": "",
|
||||
"Knowledge Base": "",
|
||||
"Knowledge created successfully.": "",
|
||||
"Knowledge deleted successfully.": "",
|
||||
"Knowledge Public Sharing": "",
|
||||
@@ -807,6 +817,7 @@
|
||||
"Leave empty to use the default prompt, or enter a custom prompt": "",
|
||||
"Leave model field empty to use the default model.": "",
|
||||
"License": "",
|
||||
"Lift List": "",
|
||||
"Light": "Šviesus",
|
||||
"Listening...": "Klausoma...",
|
||||
"Llama.cpp": "",
|
||||
@@ -897,6 +908,7 @@
|
||||
"New Tool": "",
|
||||
"new-channel": "",
|
||||
"Next message": "",
|
||||
"No chats found": "",
|
||||
"No chats found for this user.": "",
|
||||
"No chats found.": "",
|
||||
"No content": "",
|
||||
@@ -1135,6 +1147,7 @@
|
||||
"See what's new": "Žiūrėti naujoves",
|
||||
"Seed": "Sėkla",
|
||||
"Select a base model": "Pasirinkite bazinį modelį",
|
||||
"Select a conversation to preview": "",
|
||||
"Select a engine": "Pasirinkite variklį",
|
||||
"Select a function": "Pasirinkite funkciją",
|
||||
"Select a group": "",
|
||||
@@ -1205,6 +1218,7 @@
|
||||
"Sign up to {{WEBUI_NAME}}": "",
|
||||
"Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to True.": "",
|
||||
"Signing in to {{WEBUI_NAME}}": "",
|
||||
"Sink List": "",
|
||||
"sk-1234": "",
|
||||
"Skip Cache": "",
|
||||
"Skip the cache and re-run the inference. Defaults to False.": "",
|
||||
@@ -1310,6 +1324,7 @@
|
||||
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Norėdami prieiti prie programos, susisiekite su administratoriumi, kuris Jus patvirtins.",
|
||||
"To attach knowledge base here, add them to the \"Knowledge\" workspace first.": "",
|
||||
"To learn more about available endpoints, visit our documentation.": "",
|
||||
"To learn more about powerful prompt variables, click here": "",
|
||||
"To protect your privacy, only ratings, model IDs, tags, and metadata are shared from your feedback—your chat logs remain private and are not included.": "",
|
||||
"To select actions here, add them to the \"Functions\" workspace first.": "Norėdami pasirinkti veiksmus, pirmiausia pridėkite juos funkcijų nuostatuose",
|
||||
"To select filters here, add them to the \"Functions\" workspace first.": "Norėdami pasirinkti filtrus, pirmiausia pridėkite juos funkcijų nuostatuose",
|
||||
@@ -1356,6 +1371,7 @@
|
||||
"Unlock mysteries": "",
|
||||
"Unpin": "Atsemigti",
|
||||
"Unravel secrets": "",
|
||||
"Unsupported file type.": "",
|
||||
"Untagged": "",
|
||||
"Untitled": "",
|
||||
"Update": "Atnaujinti",
|
||||
@@ -1391,14 +1407,14 @@
|
||||
"User Webhooks": "",
|
||||
"Username": "",
|
||||
"Users": "Naudotojai",
|
||||
"Using Entire Document": "",
|
||||
"Using Focused Retrieval": "",
|
||||
"Using the default arena model with all models. Click the plus button to add custom models.": "",
|
||||
"Utilize": "Naudoti",
|
||||
"Valid time units:": "Teisingūs laiko vienetai :",
|
||||
"Valves": "Įeitys",
|
||||
"Valves updated": "Įeitys atnaujintos",
|
||||
"Valves updated successfully": "Įeitys atnaujintos sėkmingai",
|
||||
"variable": "kintamasis",
|
||||
"variable to have them replaced with clipboard content.": "kintamoji pakeičiama kopijuoklės turiniu.",
|
||||
"Verify Connection": "",
|
||||
"Verify SSL Certificate": "",
|
||||
"Version": "Versija",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user