"src/vscode:/vscode.git/clone" did not exist on "b35cc36e192cb7c96f194cc0851178a8616e8e53"
Unverified Commit 75e51ecf authored by Que Nguyen's avatar Que Nguyen Committed by GitHub
Browse files

Merge branch 'open-webui:main' into searxng

parents a02ba52d 9e4dd4b8
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
convertMessagesToHistory, convertMessagesToHistory,
copyToClipboard, copyToClipboard,
extractSentencesForAudio, extractSentencesForAudio,
getUserPosition,
promptTemplate, promptTemplate,
splitStream splitStream
} from '$lib/utils'; } from '$lib/utils';
...@@ -50,7 +51,7 @@ ...@@ -50,7 +51,7 @@
import { runWebSearch } from '$lib/apis/rag'; import { runWebSearch } from '$lib/apis/rag';
import { createOpenAITextStream } from '$lib/apis/streaming'; import { createOpenAITextStream } from '$lib/apis/streaming';
import { queryMemory } from '$lib/apis/memories'; import { queryMemory } from '$lib/apis/memories';
import { getUserSettings } from '$lib/apis/users'; import { getAndUpdateUserLocation, getUserSettings } from '$lib/apis/users';
import { chatCompleted, generateTitle, generateSearchQuery } from '$lib/apis'; import { chatCompleted, generateTitle, generateSearchQuery } from '$lib/apis';
import Banner from '../common/Banner.svelte'; import Banner from '../common/Banner.svelte';
...@@ -533,7 +534,13 @@ ...@@ -533,7 +534,13 @@
$settings.system || (responseMessage?.userContext ?? null) $settings.system || (responseMessage?.userContext ?? null)
? { ? {
role: 'system', role: 'system',
content: `${promptTemplate($settings?.system ?? '', $user.name)}${ content: `${promptTemplate(
$settings?.system ?? '',
$user.name,
$settings?.userLocation
? await getAndUpdateUserLocation(localStorage.token)
: undefined
)}${
responseMessage?.userContext ?? null responseMessage?.userContext ?? null
? `\n\nUser Context:\n${(responseMessage?.userContext ?? []).join('\n')}` ? `\n\nUser Context:\n${(responseMessage?.userContext ?? []).join('\n')}`
: '' : ''
...@@ -871,7 +878,13 @@ ...@@ -871,7 +878,13 @@
$settings.system || (responseMessage?.userContext ?? null) $settings.system || (responseMessage?.userContext ?? null)
? { ? {
role: 'system', role: 'system',
content: `${promptTemplate($settings?.system ?? '', $user.name)}${ content: `${promptTemplate(
$settings?.system ?? '',
$user.name,
$settings?.userLocation
? await getAndUpdateUserLocation(localStorage.token)
: undefined
)}${
responseMessage?.userContext ?? null responseMessage?.userContext ?? null
? `\n\nUser Context:\n${(responseMessage?.userContext ?? []).join('\n')}` ? `\n\nUser Context:\n${(responseMessage?.userContext ?? []).join('\n')}`
: '' : ''
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
let loading = false; let loading = false;
let confirmed = false; let confirmed = false;
let interrupted = false; let interrupted = false;
let assistantSpeaking = false;
let emoji = null; let emoji = null;
...@@ -268,6 +269,15 @@ ...@@ -268,6 +269,15 @@
return; return;
} }
if (assistantSpeaking) {
// Mute the audio if the assistant is speaking
analyser.maxDecibels = 0;
analyser.minDecibels = -1;
} else {
analyser.minDecibels = MIN_DECIBELS;
analyser.maxDecibels = -30;
}
analyser.getByteTimeDomainData(timeDomainData); analyser.getByteTimeDomainData(timeDomainData);
analyser.getByteFrequencyData(domainData); analyser.getByteFrequencyData(domainData);
...@@ -379,6 +389,7 @@ ...@@ -379,6 +389,7 @@
}; };
const stopAllAudio = async () => { const stopAllAudio = async () => {
assistantSpeaking = false;
interrupted = true; interrupted = true;
if (chatStreaming) { if (chatStreaming) {
...@@ -485,6 +496,7 @@ ...@@ -485,6 +496,7 @@
} }
} else if (finishedMessages[id] && messages[id] && messages[id].length === 0) { } else if (finishedMessages[id] && messages[id] && messages[id].length === 0) {
// If the message is finished and there are no more messages to process, break the loop // If the message is finished and there are no more messages to process, break the loop
assistantSpeaking = false;
break; break;
} else { } else {
// No messages to process, sleep for a bit // No messages to process, sleep for a bit
...@@ -511,6 +523,7 @@ ...@@ -511,6 +523,7 @@
} }
audioAbortController = new AbortController(); audioAbortController = new AbortController();
assistantSpeaking = true;
// Start monitoring and playing audio for the message ID // Start monitoring and playing audio for the message ID
monitorAndPlayAudio(id, audioAbortController.signal); monitorAndPlayAudio(id, audioAbortController.signal);
} }
...@@ -545,9 +558,9 @@ ...@@ -545,9 +558,9 @@
const chatFinishHandler = async (e) => { const chatFinishHandler = async (e) => {
const { id, content } = e.detail; const { id, content } = e.detail;
// "content" here is the entire message from the assistant // "content" here is the entire message from the assistant
finishedMessages[id] = true;
chatStreaming = false; chatStreaming = false;
finishedMessages[id] = true;
}; };
eventTarget.addEventListener('chat:start', chatStartHandler); eventTarget.addEventListener('chat:start', chatStartHandler);
...@@ -577,7 +590,15 @@ ...@@ -577,7 +590,15 @@
> >
<div class="max-w-lg w-full h-screen max-h-[100dvh] flex flex-col justify-between p-3 md:p-6"> <div class="max-w-lg w-full h-screen max-h-[100dvh] flex flex-col justify-between p-3 md:p-6">
{#if camera} {#if camera}
<div class="flex justify-center items-center w-full h-20 min-h-20"> <button
type="button"
class="flex justify-center items-center w-full h-20 min-h-20"
on:click={() => {
if (assistantSpeaking) {
stopAllAudio();
}
}}
>
{#if emoji} {#if emoji}
<div <div
class=" transition-all rounded-full" class=" transition-all rounded-full"
...@@ -591,7 +612,7 @@ ...@@ -591,7 +612,7 @@
> >
{emoji} {emoji}
</div> </div>
{:else if loading} {:else if loading || assistantSpeaking}
<svg <svg
class="size-12 text-gray-900 dark:text-gray-400" class="size-12 text-gray-900 dark:text-gray-400"
viewBox="0 0 24 24" viewBox="0 0 24 24"
...@@ -640,11 +661,19 @@ ...@@ -640,11 +661,19 @@
/> />
{/if} {/if}
<!-- navbar --> <!-- navbar -->
</div> </button>
{/if} {/if}
<div class="flex justify-center items-center flex-1 h-full w-full max-h-full"> <div class="flex justify-center items-center flex-1 h-full w-full max-h-full">
{#if !camera} {#if !camera}
<button
type="button"
on:click={() => {
if (assistantSpeaking) {
stopAllAudio();
}
}}
>
{#if emoji} {#if emoji}
<div <div
class=" transition-all rounded-full" class=" transition-all rounded-full"
...@@ -658,7 +687,7 @@ ...@@ -658,7 +687,7 @@
> >
{emoji} {emoji}
</div> </div>
{:else if loading} {:else if loading || assistantSpeaking}
<svg <svg
class="size-44 text-gray-900 dark:text-gray-400" class="size-44 text-gray-900 dark:text-gray-400"
viewBox="0 0 24 24" viewBox="0 0 24 24"
...@@ -706,6 +735,7 @@ ...@@ -706,6 +735,7 @@
: 'size-44'} transition-all bg-black dark:bg-white rounded-full" : 'size-44'} transition-all bg-black dark:bg-white rounded-full"
/> />
{/if} {/if}
</button>
{:else} {:else}
<div <div
class="relative flex video-container w-full max-h-full pt-2 pb-4 md:py-6 px-2 h-full" class="relative flex video-container w-full max-h-full pt-2 pb-4 md:py-6 px-2 h-full"
...@@ -805,10 +835,19 @@ ...@@ -805,10 +835,19 @@
</div> </div>
<div> <div>
<button type="button"> <button
type="button"
on:click={() => {
if (assistantSpeaking) {
stopAllAudio();
}
}}
>
<div class=" line-clamp-1 text-sm font-medium"> <div class=" line-clamp-1 text-sm font-medium">
{#if loading} {#if loading}
{$i18n.t('Thinking...')} {$i18n.t('Thinking...')}
{:else if assistantSpeaking}
{$i18n.t('Tap to interrupt')}
{:else} {:else}
{$i18n.t('Listening...')} {$i18n.t('Listening...')}
{/if} {/if}
......
...@@ -102,17 +102,19 @@ ...@@ -102,17 +102,19 @@
{#if filteredItems.length > 0 || prompt.split(' ')?.at(0)?.substring(1).startsWith('http')} {#if filteredItems.length > 0 || prompt.split(' ')?.at(0)?.substring(1).startsWith('http')}
<div class="pl-1 pr-12 mb-3 text-left w-full absolute bottom-0 left-0 right-0"> <div class="pl-1 pr-12 mb-3 text-left w-full absolute bottom-0 left-0 right-0">
<div class="flex w-full px-2"> <div class="flex w-full dark:border dark:border-gray-850 rounded-lg">
<div class=" bg-gray-100 dark:bg-gray-700 w-10 rounded-l-xl text-center"> <div class=" bg-gray-50 dark:bg-gray-850 w-10 rounded-l-lg text-center">
<div class=" text-lg font-semibold mt-2">#</div> <div class=" text-lg font-semibold mt-2">#</div>
</div> </div>
<div class="max-h-60 flex flex-col w-full rounded-r-xl bg-white"> <div
<div class="m-1 overflow-y-auto p-1 rounded-r-xl space-y-0.5"> class="max-h-60 flex flex-col w-full rounded-r-xl bg-white dark:bg-gray-900 dark:text-gray-100"
>
<div class="m-1 overflow-y-auto p-1 rounded-r-xl space-y-0.5 scrollbar-hidden">
{#each filteredItems as doc, docIdx} {#each filteredItems as doc, docIdx}
<button <button
class=" px-3 py-1.5 rounded-xl w-full text-left {docIdx === selectedIdx class=" px-3 py-1.5 rounded-xl w-full text-left {docIdx === selectedIdx
? ' bg-gray-100 selected-command-option-button' ? ' bg-gray-50 dark:bg-gray-850 dark:text-gray-100 selected-command-option-button'
: ''}" : ''}"
type="button" type="button"
on:click={() => { on:click={() => {
...@@ -126,17 +128,19 @@ ...@@ -126,17 +128,19 @@
on:focus={() => {}} on:focus={() => {}}
> >
{#if doc.type === 'collection'} {#if doc.type === 'collection'}
<div class=" font-medium text-black line-clamp-1"> <div class=" font-medium text-black dark:text-gray-100 line-clamp-1">
{doc?.title ?? `#${doc.name}`} {doc?.title ?? `#${doc.name}`}
</div> </div>
<div class=" text-xs text-gray-600 line-clamp-1">{$i18n.t('Collection')}</div> <div class=" text-xs text-gray-600 dark:text-gray-100 line-clamp-1">
{$i18n.t('Collection')}
</div>
{:else} {:else}
<div class=" font-medium text-black line-clamp-1"> <div class=" font-medium text-black dark:text-gray-100 line-clamp-1">
#{doc.name} ({doc.filename}) #{doc.name} ({doc.filename})
</div> </div>
<div class=" text-xs text-gray-600 line-clamp-1"> <div class=" text-xs text-gray-600 dark:text-gray-100 line-clamp-1">
{doc.title} {doc.title}
</div> </div>
{/if} {/if}
......
...@@ -134,17 +134,19 @@ ...@@ -134,17 +134,19 @@
{#if prompt.charAt(0) === '@'} {#if prompt.charAt(0) === '@'}
{#if filteredModels.length > 0} {#if filteredModels.length > 0}
<div class="pl-1 pr-12 mb-3 text-left w-full absolute bottom-0 left-0 right-0"> <div class="pl-1 pr-12 mb-3 text-left w-full absolute bottom-0 left-0 right-0">
<div class="flex w-full px-2"> <div class="flex w-full dark:border dark:border-gray-850 rounded-lg">
<div class=" bg-gray-100 dark:bg-gray-700 w-10 rounded-l-xl text-center"> <div class=" bg-gray-50 dark:bg-gray-850 w-10 rounded-l-lg text-center">
<div class=" text-lg font-semibold mt-2">@</div> <div class=" text-lg font-semibold mt-2">@</div>
</div> </div>
<div class="max-h-60 flex flex-col w-full rounded-r-xl bg-white"> <div
<div class="m-1 overflow-y-auto p-1 rounded-r-xl space-y-0.5"> class="max-h-60 flex flex-col w-full rounded-r-lg bg-white dark:bg-gray-900 dark:text-gray-100"
>
<div class="m-1 overflow-y-auto p-1 rounded-r-lg space-y-0.5 scrollbar-hidden">
{#each filteredModels as model, modelIdx} {#each filteredModels as model, modelIdx}
<button <button
class=" px-3 py-1.5 rounded-xl w-full text-left {modelIdx === selectedIdx class=" px-3 py-1.5 rounded-xl w-full text-left {modelIdx === selectedIdx
? ' bg-gray-100 selected-command-option-button' ? ' bg-gray-50 dark:bg-gray-850 selected-command-option-button'
: ''}" : ''}"
type="button" type="button"
on:click={() => { on:click={() => {
...@@ -155,7 +157,7 @@ ...@@ -155,7 +157,7 @@
}} }}
on:focus={() => {}} on:focus={() => {}}
> >
<div class=" font-medium text-black line-clamp-1"> <div class=" font-medium text-black dark:text-gray-100 line-clamp-1">
{model.name} {model.name}
</div> </div>
......
...@@ -89,17 +89,19 @@ ...@@ -89,17 +89,19 @@
{#if filteredPromptCommands.length > 0} {#if filteredPromptCommands.length > 0}
<div class="pl-1 pr-12 mb-3 text-left w-full absolute bottom-0 left-0 right-0"> <div class="pl-1 pr-12 mb-3 text-left w-full absolute bottom-0 left-0 right-0">
<div class="flex w-full px-2"> <div class="flex w-full dark:border dark:border-gray-850 rounded-lg">
<div class=" bg-gray-100 dark:bg-gray-700 w-10 rounded-l-xl text-center"> <div class=" bg-gray-50 dark:bg-gray-850 w-10 rounded-l-lg text-center">
<div class=" text-lg font-semibold mt-2">/</div> <div class=" text-lg font-semibold mt-2">/</div>
</div> </div>
<div class="max-h-60 flex flex-col w-full rounded-r-xl bg-white"> <div
<div class="m-1 overflow-y-auto p-1 rounded-r-xl space-y-0.5"> class="max-h-60 flex flex-col w-full rounded-r-lg bg-white dark:bg-gray-900 dark:text-gray-100"
>
<div class="m-1 overflow-y-auto p-1 rounded-r-lg space-y-0.5 scrollbar-hidden">
{#each filteredPromptCommands as command, commandIdx} {#each filteredPromptCommands as command, commandIdx}
<button <button
class=" px-3 py-1.5 rounded-xl w-full text-left {commandIdx === selectedCommandIdx class=" px-3 py-1.5 rounded-xl w-full text-left {commandIdx === selectedCommandIdx
? ' bg-gray-100 selected-command-option-button' ? ' bg-gray-50 dark:bg-gray-850 selected-command-option-button'
: ''}" : ''}"
type="button" type="button"
on:click={() => { on:click={() => {
...@@ -110,11 +112,11 @@ ...@@ -110,11 +112,11 @@
}} }}
on:focus={() => {}} on:focus={() => {}}
> >
<div class=" font-medium text-black"> <div class=" font-medium text-black dark:text-gray-100">
{command.command} {command.command}
</div> </div>
<div class=" text-xs text-gray-600"> <div class=" text-xs text-gray-600 dark:text-gray-100">
{command.title} {command.title}
</div> </div>
</button> </button>
...@@ -122,7 +124,7 @@ ...@@ -122,7 +124,7 @@
</div> </div>
<div <div
class=" px-2 pb-1 text-xs text-gray-600 bg-white rounded-br-xl flex items-center space-x-1" class=" px-2 pb-1 text-xs text-gray-600 dark:text-gray-100 bg-white dark:bg-gray-900 rounded-br-xl flex items-center space-x-1"
> >
<div> <div>
<svg <svg
......
...@@ -202,38 +202,51 @@ ...@@ -202,38 +202,51 @@
}, 100); }, 100);
}; };
const messageDeleteHandler = async (messageId) => { const deleteMessageHandler = async (messageId) => {
const messageToDelete = history.messages[messageId]; const messageToDelete = history.messages[messageId];
const messageParentId = messageToDelete.parentId;
const messageChildrenIds = messageToDelete.childrenIds ?? []; const parentMessageId = messageToDelete.parentId;
const hasSibling = messageChildrenIds.some( const childMessageIds = messageToDelete.childrenIds ?? [];
const hasDescendantMessages = childMessageIds.some(
(childId) => history.messages[childId]?.childrenIds?.length > 0 (childId) => history.messages[childId]?.childrenIds?.length > 0
); );
messageChildrenIds.forEach((childId) => {
const child = history.messages[childId]; history.currentId = parentMessageId;
if (child && child.childrenIds) { await tick();
if (child.childrenIds.length === 0 && !hasSibling) {
// if last prompt/response pair // Remove the message itself from the parent message's children array
history.messages[messageParentId].childrenIds = []; history.messages[parentMessageId].childrenIds = history.messages[
history.currentId = messageParentId; parentMessageId
].childrenIds.filter((id) => id !== messageId);
await tick();
childMessageIds.forEach((childId) => {
const childMessage = history.messages[childId];
if (childMessage && childMessage.childrenIds) {
if (childMessage.childrenIds.length === 0 && !hasDescendantMessages) {
// If there are no other responses/prompts
history.messages[parentMessageId].childrenIds = [];
} else { } else {
child.childrenIds.forEach((grandChildId) => { childMessage.childrenIds.forEach((grandChildId) => {
if (history.messages[grandChildId]) { if (history.messages[grandChildId]) {
history.messages[grandChildId].parentId = messageParentId; history.messages[grandChildId].parentId = parentMessageId;
history.messages[messageParentId].childrenIds.push(grandChildId); history.messages[parentMessageId].childrenIds.push(grandChildId);
} }
}); });
} }
} }
// remove response
history.messages[messageParentId].childrenIds = history.messages[ // Remove child message id from the parent message's children array
messageParentId history.messages[parentMessageId].childrenIds = history.messages[
parentMessageId
].childrenIds.filter((id) => id !== childId); ].childrenIds.filter((id) => id !== childId);
}); });
// remove prompt
history.messages[messageParentId].childrenIds = history.messages[ await tick();
messageParentId
].childrenIds.filter((id) => id !== messageId);
await updateChatById(localStorage.token, chatId, { await updateChatById(localStorage.token, chatId, {
messages: messages, messages: messages,
history: history history: history
...@@ -292,7 +305,7 @@ ...@@ -292,7 +305,7 @@
> >
{#if message.role === 'user'} {#if message.role === 'user'}
<UserMessage <UserMessage
on:delete={() => messageDeleteHandler(message.id)} on:delete={() => deleteMessageHandler(message.id)}
{user} {user}
{readOnly} {readOnly}
{message} {message}
...@@ -308,7 +321,7 @@ ...@@ -308,7 +321,7 @@
copyToClipboard={copyToClipboardWithToast} copyToClipboard={copyToClipboardWithToast}
/> />
{:else if $mobile || (history.messages[message.parentId]?.models?.length ?? 1) === 1} {:else if $mobile || (history.messages[message.parentId]?.models?.length ?? 1) === 1}
{#key message.id} {#key message.id && history.currentId}
<ResponseMessage <ResponseMessage
{message} {message}
siblings={history.messages[message.parentId]?.childrenIds ?? []} siblings={history.messages[message.parentId]?.childrenIds ?? []}
......
...@@ -940,9 +940,8 @@ ...@@ -940,9 +940,8 @@
> >
</button> </button>
</Tooltip> </Tooltip>
{/if}
{#if isLastMessage && !readOnly} {#if isLastMessage}
<Tooltip content={$i18n.t('Continue Response')} placement="bottom"> <Tooltip content={$i18n.t('Continue Response')} placement="bottom">
<button <button
type="button" type="button"
...@@ -1004,6 +1003,7 @@ ...@@ -1004,6 +1003,7 @@
</Tooltip> </Tooltip>
{/if} {/if}
{/if} {/if}
{/if}
</div> </div>
{/if} {/if}
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
import { createEventDispatcher, onMount, getContext } from 'svelte'; import { createEventDispatcher, onMount, getContext } from 'svelte';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import Tooltip from '$lib/components/common/Tooltip.svelte'; import Tooltip from '$lib/components/common/Tooltip.svelte';
import { updateUserInfo } from '$lib/apis/users';
import { getUserPosition } from '$lib/utils';
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
const i18n = getContext('i18n'); const i18n = getContext('i18n');
...@@ -16,6 +18,7 @@ ...@@ -16,6 +18,7 @@
let responseAutoCopy = false; let responseAutoCopy = false;
let widescreenMode = false; let widescreenMode = false;
let splitLargeChunks = false; let splitLargeChunks = false;
let userLocation = false;
// Interface // Interface
let defaultModelId = ''; let defaultModelId = '';
...@@ -51,6 +54,26 @@ ...@@ -51,6 +54,26 @@
saveSettings({ showEmojiInCall: showEmojiInCall }); saveSettings({ showEmojiInCall: showEmojiInCall });
}; };
const toggleUserLocation = async () => {
userLocation = !userLocation;
if (userLocation) {
const position = await getUserPosition().catch((error) => {
toast.error(error.message);
return null;
});
if (position) {
await updateUserInfo(localStorage.token, { location: position });
toast.success('User location successfully retrieved.');
} else {
userLocation = false;
}
}
saveSettings({ userLocation });
};
const toggleTitleAutoGenerate = async () => { const toggleTitleAutoGenerate = async () => {
titleAutoGenerate = !titleAutoGenerate; titleAutoGenerate = !titleAutoGenerate;
saveSettings({ saveSettings({
...@@ -106,6 +129,7 @@ ...@@ -106,6 +129,7 @@
widescreenMode = $settings.widescreenMode ?? false; widescreenMode = $settings.widescreenMode ?? false;
splitLargeChunks = $settings.splitLargeChunks ?? false; splitLargeChunks = $settings.splitLargeChunks ?? false;
chatDirection = $settings.chatDirection ?? 'LTR'; chatDirection = $settings.chatDirection ?? 'LTR';
userLocation = $settings.userLocation ?? false;
defaultModelId = ($settings?.models ?? ['']).at(0); defaultModelId = ($settings?.models ?? ['']).at(0);
}); });
...@@ -142,6 +166,26 @@ ...@@ -142,6 +166,26 @@
</div> </div>
</div> </div>
<div>
<div class=" py-0.5 flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Widescreen Mode')}</div>
<button
class="p-1 px-3 text-xs flex rounded transition"
on:click={() => {
togglewidescreenMode();
}}
type="button"
>
{#if widescreenMode === 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>
<div class=" py-0.5 flex w-full justify-between"> <div class=" py-0.5 flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Title Auto-Generation')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('Title Auto-Generation')}</div>
...@@ -186,16 +230,16 @@ ...@@ -186,16 +230,16 @@
<div> <div>
<div class=" py-0.5 flex w-full justify-between"> <div class=" py-0.5 flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Widescreen Mode')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('Allow User Location')}</div>
<button <button
class="p-1 px-3 text-xs flex rounded transition" class="p-1 px-3 text-xs flex rounded transition"
on:click={() => { on:click={() => {
togglewidescreenMode(); toggleUserLocation();
}} }}
type="button" type="button"
> >
{#if widescreenMode === true} {#if userLocation === true}
<span class="ml-2 self-center">{$i18n.t('On')}</span> <span class="ml-2 self-center">{$i18n.t('On')}</span>
{:else} {:else}
<span class="ml-2 self-center">{$i18n.t('Off')}</span> <span class="ml-2 self-center">{$i18n.t('Off')}</span>
......
...@@ -120,18 +120,31 @@ ...@@ -120,18 +120,31 @@
} }
}; };
document.addEventListener('keydown', onKeyDown); const onFocus = () => {};
document.addEventListener('keyup', onKeyUp);
const onBlur = () => {
shiftKey = false;
selectedChatId = null;
};
window.addEventListener('keydown', onKeyDown);
window.addEventListener('keyup', onKeyUp);
window.addEventListener('touchstart', onTouchStart); window.addEventListener('touchstart', onTouchStart);
window.addEventListener('touchend', onTouchEnd); window.addEventListener('touchend', onTouchEnd);
window.addEventListener('focus', onFocus);
window.addEventListener('blur', onBlur);
return () => { return () => {
window.removeEventListener('keydown', onKeyDown); window.removeEventListener('keydown', onKeyDown);
window.removeEventListener('keyup', onKeyUp); window.removeEventListener('keyup', onKeyUp);
window.removeEventListener('touchstart', onTouchStart); window.removeEventListener('touchstart', onTouchStart);
window.removeEventListener('touchend', onTouchEnd); window.removeEventListener('touchend', onTouchEnd);
window.removeEventListener('focus', onFocus);
window.removeEventListener('blur', onBlur);
}; };
}); });
...@@ -464,9 +477,16 @@ ...@@ -464,9 +477,16 @@
on:select={() => { on:select={() => {
selectedChatId = chat.id; selectedChatId = chat.id;
}} }}
on:delete={() => { on:unselect={() => {
selectedChatId = null;
}}
on:delete={(e) => {
if ((e?.detail ?? '') === 'shift') {
deleteChatHandler(chat.id);
} else {
deleteChat = chat; deleteChat = chat;
showDeleteConfirm = true; showDeleteConfirm = true;
}
}} }}
/> />
{/each} {/each}
......
...@@ -201,7 +201,7 @@ ...@@ -201,7 +201,7 @@
<button <button
class=" self-center dark:hover:text-white transition" class=" self-center dark:hover:text-white transition"
on:click={() => { on:click={() => {
deleteChat(chat.id); dispatch('delete', 'shift');
}} }}
type="button" type="button"
> >
...@@ -231,7 +231,7 @@ ...@@ -231,7 +231,7 @@
dispatch('delete'); dispatch('delete');
}} }}
onClose={() => { onClose={() => {
selected = false; dispatch('unselect');
}} }}
> >
<button <button
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "يسمح", "Allow": "يسمح",
"Allow Chat Deletion": "يستطيع حذف المحادثات", "Allow Chat Deletion": "يستطيع حذف المحادثات",
"Allow non-local voices": "", "Allow non-local voices": "",
"Allow User Location": "",
"alphanumeric characters and hyphens": "الأحرف الأبجدية الرقمية والواصلات", "alphanumeric characters and hyphens": "الأحرف الأبجدية الرقمية والواصلات",
"Already have an account?": "هل تملك حساب ؟", "Already have an account?": "هل تملك حساب ؟",
"an assistant": "مساعد", "an assistant": "مساعد",
...@@ -178,6 +179,7 @@ ...@@ -178,6 +179,7 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. الوحدات الزمنية الصالحة هي 's', 'm', 'h'.", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. الوحدات الزمنية الصالحة هي 's', 'm', 'h'.",
"Edit": "تعديل", "Edit": "تعديل",
"Edit Doc": "تعديل الملف", "Edit Doc": "تعديل الملف",
"Edit Memory": "",
"Edit User": "تعديل المستخدم", "Edit User": "تعديل المستخدم",
"Email": "البريد", "Email": "البريد",
"Embedding Batch Size": "", "Embedding Batch Size": "",
...@@ -283,6 +285,7 @@ ...@@ -283,6 +285,7 @@
"Knowledge": "", "Knowledge": "",
"Language": "اللغة", "Language": "اللغة",
"Last Active": "آخر نشاط", "Last Active": "آخر نشاط",
"Last Modified": "",
"Light": "فاتح", "Light": "فاتح",
"Listening...": "", "Listening...": "",
"LLMs can make mistakes. Verify important information.": "يمكن أن تصدر بعض الأخطاء. لذلك يجب التحقق من المعلومات المهمة", "LLMs can make mistakes. Verify important information.": "يمكن أن تصدر بعض الأخطاء. لذلك يجب التحقق من المعلومات المهمة",
...@@ -307,6 +310,7 @@ ...@@ -307,6 +310,7 @@
"Mirostat Tau": "Mirostat Tau", "Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM DD, YYYY", "MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm", "MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "تم تحميل النموذج '{{modelName}}' بنجاح", "Model '{{modelName}}' has been successfully downloaded.": "تم تحميل النموذج '{{modelName}}' بنجاح",
"Model '{{modelTag}}' is already in queue for downloading.": "النموذج '{{modelTag}}' موجود بالفعل في قائمة الانتظار للتحميل", "Model '{{modelTag}}' is already in queue for downloading.": "النموذج '{{modelTag}}' موجود بالفعل في قائمة الانتظار للتحميل",
"Model {{modelId}} not found": "لم يتم العثور على النموذج {{modelId}}.", "Model {{modelId}} not found": "لم يتم العثور على النموذج {{modelId}}.",
...@@ -495,6 +499,7 @@ ...@@ -495,6 +499,7 @@
"System": "النظام", "System": "النظام",
"System Prompt": "محادثة النظام", "System Prompt": "محادثة النظام",
"Tags": "الوسوم", "Tags": "الوسوم",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "أخبرنا المزيد:", "Tell us more:": "أخبرنا المزيد:",
"Temperature": "درجة حرارة", "Temperature": "درجة حرارة",
...@@ -538,8 +543,10 @@ ...@@ -538,8 +543,10 @@
"Type Hugging Face Resolve (Download) URL": "اكتب عنوان URL لحل مشكلة الوجه (تنزيل).", "Type Hugging Face Resolve (Download) URL": "اكتب عنوان URL لحل مشكلة الوجه (تنزيل).",
"Uh-oh! There was an issue connecting to {{provider}}.": "{{provider}}خطاء أوه! حدثت مشكلة في الاتصال بـ ", "Uh-oh! There was an issue connecting to {{provider}}.": "{{provider}}خطاء أوه! حدثت مشكلة في الاتصال بـ ",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع ملف غير معروف '{{file_type}}', ولكن القبول والتعامل كنص عادي ", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع ملف غير معروف '{{file_type}}', ولكن القبول والتعامل كنص عادي ",
"Update": "",
"Update and Copy Link": "تحديث ونسخ الرابط", "Update and Copy Link": "تحديث ونسخ الرابط",
"Update password": "تحديث كلمة المرور", "Update password": "تحديث كلمة المرور",
"Updated at": "",
"Upload a GGUF model": "GGUF رفع موديل نوع", "Upload a GGUF model": "GGUF رفع موديل نوع",
"Upload Files": "تحميل الملفات", "Upload Files": "تحميل الملفات",
"Upload Pipeline": "", "Upload Pipeline": "",
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "Позволи", "Allow": "Позволи",
"Allow Chat Deletion": "Позволи Изтриване на Чат", "Allow Chat Deletion": "Позволи Изтриване на Чат",
"Allow non-local voices": "", "Allow non-local voices": "",
"Allow User Location": "",
"alphanumeric characters and hyphens": "алфанумерични знаци и тире", "alphanumeric characters and hyphens": "алфанумерични знаци и тире",
"Already have an account?": "Вече имате акаунт? ", "Already have an account?": "Вече имате акаунт? ",
"an assistant": "асистент", "an assistant": "асистент",
...@@ -178,6 +179,7 @@ ...@@ -178,6 +179,7 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр. '30с','10м'. Валидни единици са 'с', 'м', 'ч'.", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр. '30с','10м'. Валидни единици са 'с', 'м', 'ч'.",
"Edit": "Редактиране", "Edit": "Редактиране",
"Edit Doc": "Редактиране на документ", "Edit Doc": "Редактиране на документ",
"Edit Memory": "",
"Edit User": "Редактиране на потребител", "Edit User": "Редактиране на потребител",
"Email": "Имейл", "Email": "Имейл",
"Embedding Batch Size": "", "Embedding Batch Size": "",
...@@ -283,6 +285,7 @@ ...@@ -283,6 +285,7 @@
"Knowledge": "", "Knowledge": "",
"Language": "Език", "Language": "Език",
"Last Active": "Последни активни", "Last Active": "Последни активни",
"Last Modified": "",
"Light": "Светъл", "Light": "Светъл",
"Listening...": "", "Listening...": "",
"LLMs can make mistakes. Verify important information.": "LLMs могат да правят грешки. Проверете важните данни.", "LLMs can make mistakes. Verify important information.": "LLMs могат да правят грешки. Проверете важните данни.",
...@@ -307,6 +310,7 @@ ...@@ -307,6 +310,7 @@
"Mirostat Tau": "Mirostat Tau", "Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM DD, YYYY", "MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm", "MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "Моделът '{{modelName}}' беше успешно свален.", "Model '{{modelName}}' has been successfully downloaded.": "Моделът '{{modelName}}' беше успешно свален.",
"Model '{{modelTag}}' is already in queue for downloading.": "Моделът '{{modelTag}}' е вече в очакване за сваляне.", "Model '{{modelTag}}' is already in queue for downloading.": "Моделът '{{modelTag}}' е вече в очакване за сваляне.",
"Model {{modelId}} not found": "Моделът {{modelId}} не е намерен", "Model {{modelId}} not found": "Моделът {{modelId}} не е намерен",
...@@ -491,6 +495,7 @@ ...@@ -491,6 +495,7 @@
"System": "Система", "System": "Система",
"System Prompt": "Системен Промпт", "System Prompt": "Системен Промпт",
"Tags": "Тагове", "Tags": "Тагове",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "Повече информация:", "Tell us more:": "Повече информация:",
"Temperature": "Температура", "Temperature": "Температура",
...@@ -534,8 +539,10 @@ ...@@ -534,8 +539,10 @@
"Type Hugging Face Resolve (Download) URL": "Въведете Hugging Face Resolve (Download) URL", "Type Hugging Face Resolve (Download) URL": "Въведете Hugging Face Resolve (Download) URL",
"Uh-oh! There was an issue connecting to {{provider}}.": "О, не! Възникна проблем при свързването с {{provider}}.", "Uh-oh! There was an issue connecting to {{provider}}.": "О, не! Възникна проблем при свързването с {{provider}}.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Непознат файлов тип '{{file_type}}', но се приема и обработва като текст", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Непознат файлов тип '{{file_type}}', но се приема и обработва като текст",
"Update": "",
"Update and Copy Link": "Обнови и копирай връзка", "Update and Copy Link": "Обнови и копирай връзка",
"Update password": "Обновяване на парола", "Update password": "Обновяване на парола",
"Updated at": "",
"Upload a GGUF model": "Качване на GGUF модел", "Upload a GGUF model": "Качване на GGUF модел",
"Upload Files": "Качване на файлове", "Upload Files": "Качване на файлове",
"Upload Pipeline": "", "Upload Pipeline": "",
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "অনুমোদন", "Allow": "অনুমোদন",
"Allow Chat Deletion": "চ্যাট ডিলিট করতে দিন", "Allow Chat Deletion": "চ্যাট ডিলিট করতে দিন",
"Allow non-local voices": "", "Allow non-local voices": "",
"Allow User Location": "",
"alphanumeric characters and hyphens": "ইংরেজি অক্ষর, সংখ্যা এবং হাইফেন", "alphanumeric characters and hyphens": "ইংরেজি অক্ষর, সংখ্যা এবং হাইফেন",
"Already have an account?": "আগে থেকেই একাউন্ট আছে?", "Already have an account?": "আগে থেকেই একাউন্ট আছে?",
"an assistant": "একটা এসিস্ট্যান্ট", "an assistant": "একটা এসিস্ট্যান্ট",
...@@ -178,6 +179,7 @@ ...@@ -178,6 +179,7 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "যেমন '30s','10m'. সময়ের অনুমোদিত অনুমোদিত এককগুলি হচ্ছে 's', 'm', 'h'.", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "যেমন '30s','10m'. সময়ের অনুমোদিত অনুমোদিত এককগুলি হচ্ছে 's', 'm', 'h'.",
"Edit": "এডিট করুন", "Edit": "এডিট করুন",
"Edit Doc": "ডকুমেন্ট এডিট করুন", "Edit Doc": "ডকুমেন্ট এডিট করুন",
"Edit Memory": "",
"Edit User": "ইউজার এডিট করুন", "Edit User": "ইউজার এডিট করুন",
"Email": "ইমেইল", "Email": "ইমেইল",
"Embedding Batch Size": "", "Embedding Batch Size": "",
...@@ -283,6 +285,7 @@ ...@@ -283,6 +285,7 @@
"Knowledge": "", "Knowledge": "",
"Language": "ভাষা", "Language": "ভাষা",
"Last Active": "সর্বশেষ সক্রিয়", "Last Active": "সর্বশেষ সক্রিয়",
"Last Modified": "",
"Light": "লাইট", "Light": "লাইট",
"Listening...": "", "Listening...": "",
"LLMs can make mistakes. Verify important information.": "LLM ভুল করতে পারে। গুরুত্বপূর্ণ তথ্য যাচাই করে নিন।", "LLMs can make mistakes. Verify important information.": "LLM ভুল করতে পারে। গুরুত্বপূর্ণ তথ্য যাচাই করে নিন।",
...@@ -307,6 +310,7 @@ ...@@ -307,6 +310,7 @@
"Mirostat Tau": "Mirostat Tau", "Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM DD, YYYY", "MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm", "MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' মডেল সফলভাবে ডাউনলোড হয়েছে।", "Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' মডেল সফলভাবে ডাউনলোড হয়েছে।",
"Model '{{modelTag}}' is already in queue for downloading.": "{{modelTag}} ডাউনলোডের জন্য আগে থেকেই অপেক্ষমান আছে।", "Model '{{modelTag}}' is already in queue for downloading.": "{{modelTag}} ডাউনলোডের জন্য আগে থেকেই অপেক্ষমান আছে।",
"Model {{modelId}} not found": "{{modelId}} মডেল পাওয়া যায়নি", "Model {{modelId}} not found": "{{modelId}} মডেল পাওয়া যায়নি",
...@@ -491,6 +495,7 @@ ...@@ -491,6 +495,7 @@
"System": "সিস্টেম", "System": "সিস্টেম",
"System Prompt": "সিস্টেম প্রম্পট", "System Prompt": "সিস্টেম প্রম্পট",
"Tags": "ট্যাগসমূহ", "Tags": "ট্যাগসমূহ",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "আরও বলুন:", "Tell us more:": "আরও বলুন:",
"Temperature": "তাপমাত্রা", "Temperature": "তাপমাত্রা",
...@@ -534,8 +539,10 @@ ...@@ -534,8 +539,10 @@
"Type Hugging Face Resolve (Download) URL": "Hugging Face থেকে ডাউনলোড করার ইউআরএল টাইপ করুন", "Type Hugging Face Resolve (Download) URL": "Hugging Face থেকে ডাউনলোড করার ইউআরএল টাইপ করুন",
"Uh-oh! There was an issue connecting to {{provider}}.": "ওহ-হো! {{provider}} এর সাথে কানেকশনে সমস্যা হয়েছে।", "Uh-oh! There was an issue connecting to {{provider}}.": "ওহ-হো! {{provider}} এর সাথে কানেকশনে সমস্যা হয়েছে।",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "অপরিচিত ফাইল ফরম্যাট '{{file_type}}', তবে প্লেইন টেক্সট হিসেবে গ্রহণ করা হলো", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "অপরিচিত ফাইল ফরম্যাট '{{file_type}}', তবে প্লেইন টেক্সট হিসেবে গ্রহণ করা হলো",
"Update": "",
"Update and Copy Link": "আপডেট এবং লিংক কপি করুন", "Update and Copy Link": "আপডেট এবং লিংক কপি করুন",
"Update password": "পাসওয়ার্ড আপডেট করুন", "Update password": "পাসওয়ার্ড আপডেট করুন",
"Updated at": "",
"Upload a GGUF model": "একটি GGUF মডেল আপলোড করুন", "Upload a GGUF model": "একটি GGUF মডেল আপলোড করুন",
"Upload Files": "ফাইল আপলোড করুন", "Upload Files": "ফাইল আপলোড করুন",
"Upload Pipeline": "", "Upload Pipeline": "",
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "Permet", "Allow": "Permet",
"Allow Chat Deletion": "Permet la Supressió del Xat", "Allow Chat Deletion": "Permet la Supressió del Xat",
"Allow non-local voices": "", "Allow non-local voices": "",
"Allow User Location": "",
"alphanumeric characters and hyphens": "caràcters alfanumèrics i guions", "alphanumeric characters and hyphens": "caràcters alfanumèrics i guions",
"Already have an account?": "Ja tens un compte?", "Already have an account?": "Ja tens un compte?",
"an assistant": "un assistent", "an assistant": "un assistent",
...@@ -178,6 +179,7 @@ ...@@ -178,6 +179,7 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s','10m'. Les unitats de temps vàlides són 's', 'm', 'h'.", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s','10m'. Les unitats de temps vàlides són 's', 'm', 'h'.",
"Edit": "Editar", "Edit": "Editar",
"Edit Doc": "Edita Document", "Edit Doc": "Edita Document",
"Edit Memory": "",
"Edit User": "Edita Usuari", "Edit User": "Edita Usuari",
"Email": "Correu electrònic", "Email": "Correu electrònic",
"Embedding Batch Size": "", "Embedding Batch Size": "",
...@@ -283,6 +285,7 @@ ...@@ -283,6 +285,7 @@
"Knowledge": "", "Knowledge": "",
"Language": "Idioma", "Language": "Idioma",
"Last Active": "Últim Actiu", "Last Active": "Últim Actiu",
"Last Modified": "",
"Light": "Clar", "Light": "Clar",
"Listening...": "", "Listening...": "",
"LLMs can make mistakes. Verify important information.": "Els LLMs poden cometre errors. Verifica la informació important.", "LLMs can make mistakes. Verify important information.": "Els LLMs poden cometre errors. Verifica la informació important.",
...@@ -307,6 +310,7 @@ ...@@ -307,6 +310,7 @@
"Mirostat Tau": "Tau de Mirostat", "Mirostat Tau": "Tau de Mirostat",
"MMMM DD, YYYY": "DD de MMMM, YYYY", "MMMM DD, YYYY": "DD de MMMM, YYYY",
"MMMM DD, YYYY HH:mm": "DD de MMMM, YYYY HH:mm", "MMMM DD, YYYY HH:mm": "DD de MMMM, YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "El model '{{modelName}}' s'ha descarregat amb èxit.", "Model '{{modelName}}' has been successfully downloaded.": "El model '{{modelName}}' s'ha descarregat amb èxit.",
"Model '{{modelTag}}' is already in queue for downloading.": "El model '{{modelTag}}' ja està en cua per ser descarregat.", "Model '{{modelTag}}' is already in queue for downloading.": "El model '{{modelTag}}' ja està en cua per ser descarregat.",
"Model {{modelId}} not found": "Model {{modelId}} no trobat", "Model {{modelId}} not found": "Model {{modelId}} no trobat",
...@@ -492,6 +496,7 @@ ...@@ -492,6 +496,7 @@
"System": "Sistema", "System": "Sistema",
"System Prompt": "Prompt del Sistema", "System Prompt": "Prompt del Sistema",
"Tags": "Etiquetes", "Tags": "Etiquetes",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "Dóna'ns més informació:", "Tell us more:": "Dóna'ns més informació:",
"Temperature": "Temperatura", "Temperature": "Temperatura",
...@@ -535,8 +540,10 @@ ...@@ -535,8 +540,10 @@
"Type Hugging Face Resolve (Download) URL": "Escriu URL de Resolució (Descàrrega) de Hugging Face", "Type Hugging Face Resolve (Download) URL": "Escriu URL de Resolució (Descàrrega) de Hugging Face",
"Uh-oh! There was an issue connecting to {{provider}}.": "Uf! Hi va haver un problema connectant-se a {{provider}}.", "Uh-oh! There was an issue connecting to {{provider}}.": "Uf! Hi va haver un problema connectant-se a {{provider}}.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipus d'Arxiu Desconegut '{{file_type}}', però acceptant i tractant com a text pla", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipus d'Arxiu Desconegut '{{file_type}}', però acceptant i tractant com a text pla",
"Update": "",
"Update and Copy Link": "Actualitza i Copia enllaç", "Update and Copy Link": "Actualitza i Copia enllaç",
"Update password": "Actualitza contrasenya", "Update password": "Actualitza contrasenya",
"Updated at": "",
"Upload a GGUF model": "Puja un model GGUF", "Upload a GGUF model": "Puja un model GGUF",
"Upload Files": "Pujar fitxers", "Upload Files": "Pujar fitxers",
"Upload Pipeline": "", "Upload Pipeline": "",
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "Sa pagtugot", "Allow": "Sa pagtugot",
"Allow Chat Deletion": "Tugoti nga mapapas ang mga chat", "Allow Chat Deletion": "Tugoti nga mapapas ang mga chat",
"Allow non-local voices": "", "Allow non-local voices": "",
"Allow User Location": "",
"alphanumeric characters and hyphens": "alphanumeric nga mga karakter ug hyphen", "alphanumeric characters and hyphens": "alphanumeric nga mga karakter ug hyphen",
"Already have an account?": "Naa na kay account ?", "Already have an account?": "Naa na kay account ?",
"an assistant": "usa ka katabang", "an assistant": "usa ka katabang",
...@@ -178,6 +179,7 @@ ...@@ -178,6 +179,7 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ",
"Edit": "", "Edit": "",
"Edit Doc": "I-edit ang dokumento", "Edit Doc": "I-edit ang dokumento",
"Edit Memory": "",
"Edit User": "I-edit ang tiggamit", "Edit User": "I-edit ang tiggamit",
"Email": "E-mail", "Email": "E-mail",
"Embedding Batch Size": "", "Embedding Batch Size": "",
...@@ -283,6 +285,7 @@ ...@@ -283,6 +285,7 @@
"Knowledge": "", "Knowledge": "",
"Language": "Pinulongan", "Language": "Pinulongan",
"Last Active": "", "Last Active": "",
"Last Modified": "",
"Light": "Kahayag", "Light": "Kahayag",
"Listening...": "", "Listening...": "",
"LLMs can make mistakes. Verify important information.": "Ang mga LLM mahimong masayop. ", "LLMs can make mistakes. Verify important information.": "Ang mga LLM mahimong masayop. ",
...@@ -307,6 +310,7 @@ ...@@ -307,6 +310,7 @@
"Mirostat Tau": "Mirostat Tau", "Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM DD, YYYY", "MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "", "MMMM DD, YYYY HH:mm": "",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "Ang modelo'{{modelName}}' malampuson nga na-download.", "Model '{{modelName}}' has been successfully downloaded.": "Ang modelo'{{modelName}}' malampuson nga na-download.",
"Model '{{modelTag}}' is already in queue for downloading.": "Ang modelo'{{modelTag}}' naa na sa pila para ma-download.", "Model '{{modelTag}}' is already in queue for downloading.": "Ang modelo'{{modelTag}}' naa na sa pila para ma-download.",
"Model {{modelId}} not found": "Modelo {{modelId}} wala makit-an", "Model {{modelId}} not found": "Modelo {{modelId}} wala makit-an",
...@@ -491,6 +495,7 @@ ...@@ -491,6 +495,7 @@
"System": "Sistema", "System": "Sistema",
"System Prompt": "Madasig nga Sistema", "System Prompt": "Madasig nga Sistema",
"Tags": "Mga tag", "Tags": "Mga tag",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "", "Tell us more:": "",
"Temperature": "Temperatura", "Temperature": "Temperatura",
...@@ -534,8 +539,10 @@ ...@@ -534,8 +539,10 @@
"Type Hugging Face Resolve (Download) URL": "Pagsulod sa resolusyon (pag-download) URL Hugging Face", "Type Hugging Face Resolve (Download) URL": "Pagsulod sa resolusyon (pag-download) URL Hugging Face",
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! {{provider}}.", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! {{provider}}.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Wala mailhi nga tipo sa file '{{file_type}}', apan gidawat ug gitratar ingon yano nga teksto", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Wala mailhi nga tipo sa file '{{file_type}}', apan gidawat ug gitratar ingon yano nga teksto",
"Update": "",
"Update and Copy Link": "", "Update and Copy Link": "",
"Update password": "I-update ang password", "Update password": "I-update ang password",
"Updated at": "",
"Upload a GGUF model": "Pag-upload ug modelo sa GGUF", "Upload a GGUF model": "Pag-upload ug modelo sa GGUF",
"Upload Files": "", "Upload Files": "",
"Upload Pipeline": "", "Upload Pipeline": "",
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "Erlauben", "Allow": "Erlauben",
"Allow Chat Deletion": "Chat Löschung erlauben", "Allow Chat Deletion": "Chat Löschung erlauben",
"Allow non-local voices": "Nicht-lokale Stimmen erlauben", "Allow non-local voices": "Nicht-lokale Stimmen erlauben",
"Allow User Location": "",
"alphanumeric characters and hyphens": "alphanumerische Zeichen und Bindestriche", "alphanumeric characters and hyphens": "alphanumerische Zeichen und Bindestriche",
"Already have an account?": "Hast du vielleicht schon ein Account?", "Already have an account?": "Hast du vielleicht schon ein Account?",
"an assistant": "ein Assistent", "an assistant": "ein Assistent",
...@@ -178,6 +179,7 @@ ...@@ -178,6 +179,7 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "z.B. '30s','10m'. Gültige Zeiteinheiten sind 's', 'm', 'h'.", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "z.B. '30s','10m'. Gültige Zeiteinheiten sind 's', 'm', 'h'.",
"Edit": "Bearbeiten", "Edit": "Bearbeiten",
"Edit Doc": "Dokument bearbeiten", "Edit Doc": "Dokument bearbeiten",
"Edit Memory": "",
"Edit User": "Benutzer bearbeiten", "Edit User": "Benutzer bearbeiten",
"Email": "E-Mail", "Email": "E-Mail",
"Embedding Batch Size": "Embedding Batch Größe", "Embedding Batch Size": "Embedding Batch Größe",
...@@ -283,6 +285,7 @@ ...@@ -283,6 +285,7 @@
"Knowledge": "", "Knowledge": "",
"Language": "Sprache", "Language": "Sprache",
"Last Active": "Zuletzt aktiv", "Last Active": "Zuletzt aktiv",
"Last Modified": "",
"Light": "Hell", "Light": "Hell",
"Listening...": "", "Listening...": "",
"LLMs can make mistakes. Verify important information.": "LLMs können Fehler machen. Überprüfe wichtige Informationen.", "LLMs can make mistakes. Verify important information.": "LLMs können Fehler machen. Überprüfe wichtige Informationen.",
...@@ -307,6 +310,7 @@ ...@@ -307,6 +310,7 @@
"Mirostat Tau": "Mirostat Tau", "Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "DD MMMM YYYY", "MMMM DD, YYYY": "DD MMMM YYYY",
"MMMM DD, YYYY HH:mm": "DD MMMM YYYY HH:mm", "MMMM DD, YYYY HH:mm": "DD MMMM YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "Modell '{{modelName}}' wurde erfolgreich heruntergeladen.", "Model '{{modelName}}' has been successfully downloaded.": "Modell '{{modelName}}' wurde erfolgreich heruntergeladen.",
"Model '{{modelTag}}' is already in queue for downloading.": "Modell '{{modelTag}}' befindet sich bereits in der Warteschlange zum Herunterladen.", "Model '{{modelTag}}' is already in queue for downloading.": "Modell '{{modelTag}}' befindet sich bereits in der Warteschlange zum Herunterladen.",
"Model {{modelId}} not found": "Modell {{modelId}} nicht gefunden", "Model {{modelId}} not found": "Modell {{modelId}} nicht gefunden",
...@@ -491,6 +495,7 @@ ...@@ -491,6 +495,7 @@
"System": "System", "System": "System",
"System Prompt": "System-Prompt", "System Prompt": "System-Prompt",
"Tags": "Tags", "Tags": "Tags",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "Erzähl uns mehr", "Tell us more:": "Erzähl uns mehr",
"Temperature": "Temperatur", "Temperature": "Temperatur",
...@@ -534,8 +539,10 @@ ...@@ -534,8 +539,10 @@
"Type Hugging Face Resolve (Download) URL": "Gib die Hugging Face Resolve (Download) URL ein", "Type Hugging Face Resolve (Download) URL": "Gib die Hugging Face Resolve (Download) URL ein",
"Uh-oh! There was an issue connecting to {{provider}}.": "Ups! Es gab ein Problem bei der Verbindung mit {{provider}}.", "Uh-oh! There was an issue connecting to {{provider}}.": "Ups! Es gab ein Problem bei der Verbindung mit {{provider}}.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unbekannter Dateityp '{{file_type}}', wird jedoch akzeptiert und als einfacher Text behandelt.", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unbekannter Dateityp '{{file_type}}', wird jedoch akzeptiert und als einfacher Text behandelt.",
"Update": "",
"Update and Copy Link": "Erneuern und kopieren", "Update and Copy Link": "Erneuern und kopieren",
"Update password": "Passwort aktualisieren", "Update password": "Passwort aktualisieren",
"Updated at": "",
"Upload a GGUF model": "GGUF Model hochladen", "Upload a GGUF model": "GGUF Model hochladen",
"Upload Files": "Dateien hochladen", "Upload Files": "Dateien hochladen",
"Upload Pipeline": "", "Upload Pipeline": "",
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "Allow", "Allow": "Allow",
"Allow Chat Deletion": "Allow Delete Chats", "Allow Chat Deletion": "Allow Delete Chats",
"Allow non-local voices": "", "Allow non-local voices": "",
"Allow User Location": "",
"alphanumeric characters and hyphens": "so alpha, many hyphen", "alphanumeric characters and hyphens": "so alpha, many hyphen",
"Already have an account?": "Such account exists?", "Already have an account?": "Such account exists?",
"an assistant": "such assistant", "an assistant": "such assistant",
...@@ -178,6 +179,7 @@ ...@@ -178,6 +179,7 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. Much time units are 's', 'm', 'h'.", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. Much time units are 's', 'm', 'h'.",
"Edit": "", "Edit": "",
"Edit Doc": "Edit Doge", "Edit Doc": "Edit Doge",
"Edit Memory": "",
"Edit User": "Edit Wowser", "Edit User": "Edit Wowser",
"Email": "Email", "Email": "Email",
"Embedding Batch Size": "", "Embedding Batch Size": "",
...@@ -283,6 +285,7 @@ ...@@ -283,6 +285,7 @@
"Knowledge": "", "Knowledge": "",
"Language": "Doge Speak", "Language": "Doge Speak",
"Last Active": "", "Last Active": "",
"Last Modified": "",
"Light": "Light", "Light": "Light",
"Listening...": "", "Listening...": "",
"LLMs can make mistakes. Verify important information.": "LLMs can make borks. Verify important info.", "LLMs can make mistakes. Verify important information.": "LLMs can make borks. Verify important info.",
...@@ -307,6 +310,7 @@ ...@@ -307,6 +310,7 @@
"Mirostat Tau": "Mirostat Tau", "Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM DD, YYYY", "MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "", "MMMM DD, YYYY HH:mm": "",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' has been successfully downloaded.", "Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' has been successfully downloaded.",
"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' is already in queue for downloading.", "Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' is already in queue for downloading.",
"Model {{modelId}} not found": "Model {{modelId}} not found", "Model {{modelId}} not found": "Model {{modelId}} not found",
...@@ -491,6 +495,7 @@ ...@@ -491,6 +495,7 @@
"System": "System very system", "System": "System very system",
"System Prompt": "System Prompt much prompt", "System Prompt": "System Prompt much prompt",
"Tags": "Tags very tags", "Tags": "Tags very tags",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "", "Tell us more:": "",
"Temperature": "Temperature very temp", "Temperature": "Temperature very temp",
...@@ -534,8 +539,10 @@ ...@@ -534,8 +539,10 @@
"Type Hugging Face Resolve (Download) URL": "Type Hugging Face Resolve (Download) URL much download", "Type Hugging Face Resolve (Download) URL": "Type Hugging Face Resolve (Download) URL much download",
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! There was an issue connecting to {{provider}}. Much uh-oh!", "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! There was an issue connecting to {{provider}}. Much uh-oh!",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unknown File Type '{{file_type}}', but accepting and treating as plain text very unknown", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unknown File Type '{{file_type}}', but accepting and treating as plain text very unknown",
"Update": "",
"Update and Copy Link": "", "Update and Copy Link": "",
"Update password": "Update password much change", "Update password": "Update password much change",
"Updated at": "",
"Upload a GGUF model": "Upload a GGUF model very upload", "Upload a GGUF model": "Upload a GGUF model very upload",
"Upload Files": "", "Upload Files": "",
"Upload Pipeline": "", "Upload Pipeline": "",
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "", "Allow": "",
"Allow Chat Deletion": "", "Allow Chat Deletion": "",
"Allow non-local voices": "", "Allow non-local voices": "",
"Allow User Location": "",
"alphanumeric characters and hyphens": "", "alphanumeric characters and hyphens": "",
"Already have an account?": "", "Already have an account?": "",
"an assistant": "", "an assistant": "",
...@@ -309,6 +310,7 @@ ...@@ -309,6 +310,7 @@
"Mirostat Tau": "", "Mirostat Tau": "",
"MMMM DD, YYYY": "", "MMMM DD, YYYY": "",
"MMMM DD, YYYY HH:mm": "", "MMMM DD, YYYY HH:mm": "",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "", "Model '{{modelName}}' has been successfully downloaded.": "",
"Model '{{modelTag}}' is already in queue for downloading.": "", "Model '{{modelTag}}' is already in queue for downloading.": "",
"Model {{modelId}} not found": "", "Model {{modelId}} not found": "",
...@@ -493,6 +495,7 @@ ...@@ -493,6 +495,7 @@
"System": "", "System": "",
"System Prompt": "", "System Prompt": "",
"Tags": "", "Tags": "",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "", "Tell us more:": "",
"Temperature": "", "Temperature": "",
...@@ -536,8 +539,10 @@ ...@@ -536,8 +539,10 @@
"Type Hugging Face Resolve (Download) URL": "", "Type Hugging Face Resolve (Download) URL": "",
"Uh-oh! There was an issue connecting to {{provider}}.": "", "Uh-oh! There was an issue connecting to {{provider}}.": "",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "",
"Update": "",
"Update and Copy Link": "", "Update and Copy Link": "",
"Update password": "", "Update password": "",
"Updated at": "",
"Upload a GGUF model": "", "Upload a GGUF model": "",
"Upload Files": "", "Upload Files": "",
"Upload Pipeline": "", "Upload Pipeline": "",
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "", "Allow": "",
"Allow Chat Deletion": "", "Allow Chat Deletion": "",
"Allow non-local voices": "", "Allow non-local voices": "",
"Allow User Location": "",
"alphanumeric characters and hyphens": "", "alphanumeric characters and hyphens": "",
"Already have an account?": "", "Already have an account?": "",
"an assistant": "", "an assistant": "",
...@@ -178,6 +179,7 @@ ...@@ -178,6 +179,7 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "",
"Edit": "", "Edit": "",
"Edit Doc": "", "Edit Doc": "",
"Edit Memory": "",
"Edit User": "", "Edit User": "",
"Email": "", "Email": "",
"Embedding Batch Size": "", "Embedding Batch Size": "",
...@@ -283,6 +285,7 @@ ...@@ -283,6 +285,7 @@
"Knowledge": "", "Knowledge": "",
"Language": "", "Language": "",
"Last Active": "", "Last Active": "",
"Last Modified": "",
"Light": "", "Light": "",
"Listening...": "", "Listening...": "",
"LLMs can make mistakes. Verify important information.": "", "LLMs can make mistakes. Verify important information.": "",
...@@ -307,6 +310,7 @@ ...@@ -307,6 +310,7 @@
"Mirostat Tau": "", "Mirostat Tau": "",
"MMMM DD, YYYY": "", "MMMM DD, YYYY": "",
"MMMM DD, YYYY HH:mm": "", "MMMM DD, YYYY HH:mm": "",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "", "Model '{{modelName}}' has been successfully downloaded.": "",
"Model '{{modelTag}}' is already in queue for downloading.": "", "Model '{{modelTag}}' is already in queue for downloading.": "",
"Model {{modelId}} not found": "", "Model {{modelId}} not found": "",
...@@ -491,6 +495,7 @@ ...@@ -491,6 +495,7 @@
"System": "", "System": "",
"System Prompt": "", "System Prompt": "",
"Tags": "", "Tags": "",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "", "Tell us more:": "",
"Temperature": "", "Temperature": "",
...@@ -534,8 +539,10 @@ ...@@ -534,8 +539,10 @@
"Type Hugging Face Resolve (Download) URL": "", "Type Hugging Face Resolve (Download) URL": "",
"Uh-oh! There was an issue connecting to {{provider}}.": "", "Uh-oh! There was an issue connecting to {{provider}}.": "",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "",
"Update": "",
"Update and Copy Link": "", "Update and Copy Link": "",
"Update password": "", "Update password": "",
"Updated at": "",
"Upload a GGUF model": "", "Upload a GGUF model": "",
"Upload Files": "", "Upload Files": "",
"Upload Pipeline": "", "Upload Pipeline": "",
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
"Allow": "Permitir", "Allow": "Permitir",
"Allow Chat Deletion": "Permitir Borrar Chats", "Allow Chat Deletion": "Permitir Borrar Chats",
"Allow non-local voices": "", "Allow non-local voices": "",
"Allow User Location": "",
"alphanumeric characters and hyphens": "caracteres alfanuméricos y guiones", "alphanumeric characters and hyphens": "caracteres alfanuméricos y guiones",
"Already have an account?": "¿Ya tienes una cuenta?", "Already have an account?": "¿Ya tienes una cuenta?",
"an assistant": "un asistente", "an assistant": "un asistente",
...@@ -178,6 +179,7 @@ ...@@ -178,6 +179,7 @@
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p.ej. '30s','10m'. Unidades válidas de tiempo son 's', 'm', 'h'.", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p.ej. '30s','10m'. Unidades válidas de tiempo son 's', 'm', 'h'.",
"Edit": "Editar", "Edit": "Editar",
"Edit Doc": "Editar Documento", "Edit Doc": "Editar Documento",
"Edit Memory": "",
"Edit User": "Editar Usuario", "Edit User": "Editar Usuario",
"Email": "Email", "Email": "Email",
"Embedding Batch Size": "", "Embedding Batch Size": "",
...@@ -283,6 +285,7 @@ ...@@ -283,6 +285,7 @@
"Knowledge": "", "Knowledge": "",
"Language": "Lenguaje", "Language": "Lenguaje",
"Last Active": "Última Actividad", "Last Active": "Última Actividad",
"Last Modified": "",
"Light": "Claro", "Light": "Claro",
"Listening...": "", "Listening...": "",
"LLMs can make mistakes. Verify important information.": "Los LLM pueden cometer errores. Verifica la información importante.", "LLMs can make mistakes. Verify important information.": "Los LLM pueden cometer errores. Verifica la información importante.",
...@@ -307,6 +310,7 @@ ...@@ -307,6 +310,7 @@
"Mirostat Tau": "Mirostat Tau", "Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM DD, YYYY", "MMMM DD, YYYY": "MMMM DD, YYYY",
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm", "MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "",
"Model '{{modelName}}' has been successfully downloaded.": "El modelo '{{modelName}}' se ha descargado correctamente.", "Model '{{modelName}}' has been successfully downloaded.": "El modelo '{{modelName}}' se ha descargado correctamente.",
"Model '{{modelTag}}' is already in queue for downloading.": "El modelo '{{modelTag}}' ya está en cola para descargar.", "Model '{{modelTag}}' is already in queue for downloading.": "El modelo '{{modelTag}}' ya está en cola para descargar.",
"Model {{modelId}} not found": "El modelo {{modelId}} no fue encontrado", "Model {{modelId}} not found": "El modelo {{modelId}} no fue encontrado",
...@@ -492,6 +496,7 @@ ...@@ -492,6 +496,7 @@
"System": "Sistema", "System": "Sistema",
"System Prompt": "Prompt del sistema", "System Prompt": "Prompt del sistema",
"Tags": "Etiquetas", "Tags": "Etiquetas",
"Tap to interrupt": "",
"Tavily API Key": "", "Tavily API Key": "",
"Tell us more:": "Dinos más:", "Tell us more:": "Dinos más:",
"Temperature": "Temperatura", "Temperature": "Temperatura",
...@@ -535,8 +540,10 @@ ...@@ -535,8 +540,10 @@
"Type Hugging Face Resolve (Download) URL": "Escriba la URL (Descarga) de Hugging Face Resolve", "Type Hugging Face Resolve (Download) URL": "Escriba la URL (Descarga) de Hugging Face Resolve",
"Uh-oh! There was an issue connecting to {{provider}}.": "¡Uh oh! Hubo un problema al conectarse a {{provider}}.", "Uh-oh! There was an issue connecting to {{provider}}.": "¡Uh oh! Hubo un problema al conectarse a {{provider}}.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de archivo desconocido '{{file_type}}', pero se acepta y se trata como texto sin formato", "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de archivo desconocido '{{file_type}}', pero se acepta y se trata como texto sin formato",
"Update": "",
"Update and Copy Link": "Actualizar y copiar enlace", "Update and Copy Link": "Actualizar y copiar enlace",
"Update password": "Actualizar contraseña", "Update password": "Actualizar contraseña",
"Updated at": "",
"Upload a GGUF model": "Subir un modelo GGUF", "Upload a GGUF model": "Subir un modelo GGUF",
"Upload Files": "Subir archivos", "Upload Files": "Subir archivos",
"Upload Pipeline": "", "Upload Pipeline": "",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment