Commit 715a4a6c authored by Jun Siang Cheah's avatar Jun Siang Cheah
Browse files

Merge remote-tracking branch 'upstream/dev' into feat/model-config

parents fa4c2249 120f8d77
...@@ -403,7 +403,7 @@ ...@@ -403,7 +403,7 @@
if (inputFiles && inputFiles.length > 0) { if (inputFiles && inputFiles.length > 0) {
inputFiles.forEach((file) => { inputFiles.forEach((file) => {
console.log(file, file.name.split('.').at(-1)); console.log(file, file.name.split('.').at(-1));
if (['image/gif', 'image/jpeg', 'image/png'].includes(file['type'])) { if (['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(file['type'])) {
if (visionCapableState == 'none') { if (visionCapableState == 'none') {
toast.error($i18n.t('Selected models do not support image inputs')); toast.error($i18n.t('Selected models do not support image inputs'));
return; return;
...@@ -599,7 +599,9 @@ ...@@ -599,7 +599,9 @@
if (inputFiles && inputFiles.length > 0) { if (inputFiles && inputFiles.length > 0) {
const _inputFiles = Array.from(inputFiles); const _inputFiles = Array.from(inputFiles);
_inputFiles.forEach((file) => { _inputFiles.forEach((file) => {
if (['image/gif', 'image/jpeg', 'image/png'].includes(file['type'])) { if (
['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(file['type'])
) {
if (visionCapableState === 'none') { if (visionCapableState === 'none') {
toast.error($i18n.t('Selected models do not support image inputs')); toast.error($i18n.t('Selected models do not support image inputs'));
inputFiles = null; inputFiles = null;
...@@ -1079,7 +1081,7 @@ ...@@ -1079,7 +1081,7 @@
id="send-message-button" id="send-message-button"
class="{prompt !== '' class="{prompt !== ''
? 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black dark:hover:bg-gray-100 ' ? 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black dark:hover:bg-gray-100 '
: 'text-white bg-gray-100 dark:text-gray-900 dark:bg-gray-800 disabled'} transition rounded-full p-1.5 self-center" : 'text-white bg-gray-200 dark:text-gray-900 dark:bg-gray-700 disabled'} transition rounded-full p-1.5 self-center"
type="submit" type="submit"
disabled={prompt === ''} disabled={prompt === ''}
> >
......
<script lang="ts"> <script lang="ts">
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { chats, config, modelfiles, settings, user as _user } from '$lib/stores'; import { chats, config, modelfiles, settings, user as _user, mobile } from '$lib/stores';
import { tick, getContext } from 'svelte'; import { tick, getContext } from 'svelte';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
import Spinner from '../common/Spinner.svelte'; import Spinner from '../common/Spinner.svelte';
import { imageGenerations } from '$lib/apis/images'; import { imageGenerations } from '$lib/apis/images';
import { copyToClipboard, findWordIndices } from '$lib/utils'; import { copyToClipboard, findWordIndices } from '$lib/utils';
import CompareMessages from './Messages/CompareMessages.svelte';
import { stringify } from 'postcss';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
...@@ -28,10 +30,10 @@ ...@@ -28,10 +30,10 @@
export let processing = ''; export let processing = '';
export let bottomPadding = false; export let bottomPadding = false;
export let autoScroll; export let autoScroll;
export let selectedModels;
export let history = {}; export let history = {};
export let messages = []; export let messages = [];
export let selectedModels;
export let selectedModelfiles = []; export let selectedModelfiles = [];
$: if (autoScroll && bottomPadding) { $: if (autoScroll && bottomPadding) {
...@@ -63,7 +65,8 @@ ...@@ -63,7 +65,8 @@
childrenIds: [], childrenIds: [],
role: 'user', role: 'user',
content: userPrompt, content: userPrompt,
...(history.messages[messageId].files && { files: history.messages[messageId].files }) ...(history.messages[messageId].files && { files: history.messages[messageId].files }),
models: selectedModels.filter((m, mIdx) => selectedModels.indexOf(m) === mIdx)
}; };
let messageParentId = history.messages[messageId].parentId; let messageParentId = history.messages[messageId].parentId;
...@@ -79,7 +82,7 @@ ...@@ -79,7 +82,7 @@
history.currentId = userMessageId; history.currentId = userMessageId;
await tick(); await tick();
await sendPrompt(userPrompt, userMessageId, chatId); await sendPrompt(userPrompt, userMessageId);
}; };
const updateChatMessages = async () => { const updateChatMessages = async () => {
...@@ -309,7 +312,7 @@ ...@@ -309,7 +312,7 @@
{showNextMessage} {showNextMessage}
copyToClipboard={copyToClipboardWithToast} copyToClipboard={copyToClipboardWithToast}
/> />
{:else} {:else if $mobile || (history.messages[message.parentId]?.models?.length ?? 1) === 1}
{#key message.id} {#key message.id}
<ResponseMessage <ResponseMessage
{message} {message}
...@@ -337,6 +340,37 @@ ...@@ -337,6 +340,37 @@
}} }}
/> />
{/key} {/key}
{:else}
{#key message.parentId}
<CompareMessages
bind:history
{messages}
{chatId}
parentMessage={history.messages[message.parentId]}
{messageIdx}
{selectedModelfiles}
{updateChatMessages}
{confirmEditResponseMessage}
{rateMessage}
copyToClipboard={copyToClipboardWithToast}
{continueGeneration}
{regenerateResponse}
on:change={async () => {
await updateChatById(localStorage.token, chatId, {
messages: messages,
history: history
});
const element = document.getElementById('messages-container');
autoScroll =
element.scrollHeight - element.scrollTop <= element.clientHeight + 50;
setTimeout(() => {
scrollToBottom();
}, 100);
}}
/>
{/key}
{/if} {/if}
</div> </div>
</div> </div>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
import 'highlight.js/styles/github-dark.min.css'; import 'highlight.js/styles/github-dark.min.css';
import { loadPyodide } from 'pyodide'; import { loadPyodide } from 'pyodide';
import { tick } from 'svelte'; import { tick } from 'svelte';
import PyodideWorker from '../../../workers/pyodide.worker?worker'; import PyodideWorker from '$lib/workers/pyodide.worker?worker';
export let id = ''; export let id = '';
...@@ -286,7 +286,7 @@ __builtins__.input = input`); ...@@ -286,7 +286,7 @@ __builtins__.input = input`);
<div class="p-1">{@html lang}</div> <div class="p-1">{@html lang}</div>
<div class="flex items-center"> <div class="flex items-center">
{#if lang === 'python' || checkPythonCode(code)} {#if ['', 'python'].includes(lang) && (lang === 'python' || checkPythonCode(code))}
{#if executing} {#if executing}
<div class="copy-code-button bg-none border-none p-1 cursor-not-allowed">Running</div> <div class="copy-code-button bg-none border-none p-1 cursor-not-allowed">Running</div>
{:else} {:else}
......
<script lang="ts">
import { createEventDispatcher } from 'svelte';
import { updateChatById } from '$lib/apis/chats';
import { onMount, tick } from 'svelte';
import ResponseMessage from './ResponseMessage.svelte';
export let chatId;
export let history;
export let messages = [];
export let messageIdx;
export let parentMessage;
export let selectedModelfiles;
export let updateChatMessages: Function;
export let confirmEditResponseMessage: Function;
export let rateMessage: Function;
export let copyToClipboard: Function;
export let continueGeneration: Function;
export let regenerateResponse: Function;
const dispatch = createEventDispatcher();
let currentMessageId;
let groupedMessagesIdx = {};
let groupedMessages = {};
$: groupedMessages = parentMessage?.models.reduce((a, model) => {
const modelMessages = parentMessage?.childrenIds
.map((id) => history.messages[id])
.filter((m) => m.model === model);
return {
...a,
[model]: { messages: modelMessages }
};
}, {});
onMount(async () => {
await tick();
currentMessageId = messages[messageIdx].id;
for (const model of parentMessage?.models) {
const idx = groupedMessages[model].messages.findIndex((m) => m.id === currentMessageId);
if (idx !== -1) {
groupedMessagesIdx[model] = idx;
} else {
groupedMessagesIdx[model] = 0;
}
}
});
</script>
<div>
<div
class="flex snap-x snap-mandatory overflow-x-auto scrollbar-hidden"
id="responses-container-{parentMessage.id}"
>
{#each Object.keys(groupedMessages) as model}
{#if groupedMessagesIdx[model] !== undefined && groupedMessages[model].messages.length > 0}
<!-- svelte-ignore a11y-no-static-element-interactions -->
<!-- svelte-ignore a11y-click-events-have-key-events -->
<div
class=" snap-center min-w-80 w-full max-w-full m-1 outline outline-1 {history.messages[
currentMessageId
].model === model
? 'outline-gray-200 dark:outline-gray-700 outline-2'
: 'outline-gray-100 dark:outline-gray-850 '} transition p-6 rounded-3xl"
on:click={() => {
currentMessageId = groupedMessages[model].messages[groupedMessagesIdx[model]].id;
let messageId = groupedMessages[model].messages[groupedMessagesIdx[model]].id;
console.log(messageId);
let messageChildrenIds = history.messages[messageId].childrenIds;
while (messageChildrenIds.length !== 0) {
messageId = messageChildrenIds.at(-1);
messageChildrenIds = history.messages[messageId].childrenIds;
}
history.currentId = messageId;
dispatch('change');
}}
>
<ResponseMessage
message={groupedMessages[model].messages[groupedMessagesIdx[model]]}
modelfiles={selectedModelfiles}
siblings={groupedMessages[model].messages.map((m) => m.id)}
isLastMessage={true}
{updateChatMessages}
{confirmEditResponseMessage}
showPreviousMessage={() => {
groupedMessagesIdx[model] = Math.max(0, groupedMessagesIdx[model] - 1);
let messageId = groupedMessages[model].messages[groupedMessagesIdx[model]].id;
console.log(messageId);
let messageChildrenIds = history.messages[messageId].childrenIds;
while (messageChildrenIds.length !== 0) {
messageId = messageChildrenIds.at(-1);
messageChildrenIds = history.messages[messageId].childrenIds;
}
history.currentId = messageId;
dispatch('change');
}}
showNextMessage={() => {
groupedMessagesIdx[model] = Math.min(
groupedMessages[model].messages.length - 1,
groupedMessagesIdx[model] + 1
);
let messageId = groupedMessages[model].messages[groupedMessagesIdx[model]].id;
console.log(messageId);
let messageChildrenIds = history.messages[messageId].childrenIds;
while (messageChildrenIds.length !== 0) {
messageId = messageChildrenIds.at(-1);
messageChildrenIds = history.messages[messageId].childrenIds;
}
history.currentId = messageId;
dispatch('change');
}}
{rateMessage}
{copyToClipboard}
{continueGeneration}
regenerateResponse={async (message) => {
regenerateResponse(message);
await tick();
groupedMessagesIdx[model] = groupedMessages[model].messages.length - 1;
}}
on:save={async (e) => {
console.log('save', e);
const message = e.detail;
history.messages[message.id] = message;
await updateChatById(localStorage.token, chatId, {
messages: messages,
history: history
});
}}
/>
</div>
{/if}
{/each}
</div>
</div>
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
let selectedCitation = null; let selectedCitation = null;
$: tokens = marked.lexer(sanitizeResponseContent(message.content)); $: tokens = marked.lexer(sanitizeResponseContent(message?.content));
const renderer = new marked.Renderer(); const renderer = new marked.Renderer();
...@@ -499,7 +499,7 @@ ...@@ -499,7 +499,7 @@
class=" flex justify-start overflow-x-auto buttons text-gray-600 dark:text-gray-500" class=" flex justify-start overflow-x-auto buttons text-gray-600 dark:text-gray-500"
> >
{#if siblings.length > 1} {#if siblings.length > 1}
<div class="flex self-center" dir="ltr"> <div class="flex self-center min-w-fit" dir="ltr">
<button <button
class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition" class="self-center p-1 hover:bg-black/5 dark:hover:bg-white/5 dark:hover:text-white hover:text-black rounded-md transition"
on:click={() => { on:click={() => {
...@@ -523,7 +523,7 @@ ...@@ -523,7 +523,7 @@
</button> </button>
<div <div
class="text-sm tracking-widest font-semibold self-center dark:text-gray-100" class="text-sm tracking-widest font-semibold self-center dark:text-gray-100 min-w-fit"
> >
{siblings.indexOf(message.id) + 1}/{siblings.length} {siblings.indexOf(message.id) + 1}/{siblings.length}
</div> </div>
...@@ -894,7 +894,9 @@ ...@@ -894,7 +894,9 @@
class="{isLastMessage class="{isLastMessage
? 'visible' ? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button" : 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
on:click={regenerateResponse} on:click={() => {
regenerateResponse(message);
}}
> >
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
: user?.profile_image_url ?? '/user.png'} : user?.profile_image_url ?? '/user.png'}
/> />
{/if} {/if}
<div class="w-full overflow-hidden"> <div class="w-full overflow-hidden pl-1">
{#if !($settings?.chatBubble ?? true)} {#if !($settings?.chatBubble ?? true)}
<div> <div>
<Name> <Name>
......
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
if ( if (
files.length > 0 && files.length > 0 &&
['image/gif', 'image/jpeg', 'image/png'].includes(files[0]['type']) ['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(files[0]['type'])
) { ) {
reader.readAsDataURL(files[0]); reader.readAsDataURL(files[0]);
} }
......
...@@ -5,12 +5,16 @@ ...@@ -5,12 +5,16 @@
import { config, models, settings, user } from '$lib/stores'; import { config, models, settings, user } from '$lib/stores';
import { createEventDispatcher, onMount, getContext, tick } from 'svelte'; import { createEventDispatcher, onMount, getContext, tick } from 'svelte';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import ManageModal from './Personalization/ManageModal.svelte';
import Tooltip from '$lib/components/common/Tooltip.svelte';
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
const i18n = getContext('i18n'); const i18n = getContext('i18n');
export let saveSettings: Function; export let saveSettings: Function;
let showManageModal = false;
// Addons // Addons
let enableMemory = true; let enableMemory = true;
...@@ -20,6 +24,8 @@ ...@@ -20,6 +24,8 @@
}); });
</script> </script>
<ManageModal bind:show={showManageModal} />
<form <form
class="flex flex-col h-full justify-between space-y-3 text-sm" class="flex flex-col h-full justify-between space-y-3 text-sm"
on:submit|preventDefault={() => { on:submit|preventDefault={() => {
...@@ -29,9 +35,15 @@ ...@@ -29,9 +35,15 @@
<div class=" pr-1.5 overflow-y-scroll max-h-[25rem]"> <div class=" pr-1.5 overflow-y-scroll max-h-[25rem]">
<div> <div>
<div class="flex items-center justify-between mb-1"> <div class="flex items-center justify-between mb-1">
<div class="text-sm font-medium"> <Tooltip
{$i18n.t('Memory')} <span class=" text-xs text-gray-500">({$i18n.t('Beta')})</span> content="This is an experimental feature, it may not function as expected and is subject to change at any time."
</div> >
<div class="text-sm font-medium">
{$i18n.t('Memory')}
<span class=" text-xs text-gray-500">({$i18n.t('Experimental')})</span>
</div>
</Tooltip>
<div class="mt-1"> <div class="mt-1">
<Switch <Switch
...@@ -64,6 +76,9 @@ ...@@ -64,6 +76,9 @@
<button <button
type="button" type="button"
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-300 dark:outline-gray-800 rounded-3xl" class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-300 dark:outline-gray-800 rounded-3xl"
on:click={() => {
showManageModal = true;
}}
> >
Manage Manage
</button> </button>
......
<script>
import { getContext } from 'svelte';
import Modal from '$lib/components/common/Modal.svelte';
export let show;
const i18n = getContext('i18n');
let loading = false;
let memory = '';
const submitHandler = () => {
console.log('submitHandler');
};
</script>
<Modal bind:show size="sm">
<div>
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
<div class=" text-lg font-medium self-center">{$i18n.t('Add Memory')}</div>
<button
class="self-center"
on:click={() => {
show = false;
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="w-5 h-5"
>
<path
d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
/>
</svg>
</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="">
<textarea
bind:value={memory}
class=" bg-transparent w-full text-sm resize-none rounded-xl p-3 outline outline-1 outline-gray-100 dark:outline-gray-800"
rows="3"
placeholder={$i18n.t('Enter a detail about yourself for your LLMs to recall')}
/>
<div class="text-xs text-gray-500">
ⓘ Refer to yourself as "User" (e.g., "User is learning Spanish")
</div>
</div>
<div class="flex justify-end pt-1 text-sm font-medium">
<button
class=" px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-3xl flex flex-row space-x-1 items-center {loading
? ' cursor-not-allowed'
: ''}"
type="submit"
disabled={loading}
>
{$i18n.t('Add')}
{#if loading}
<div class="ml-2 self-center">
<svg
class=" w-4 h-4"
viewBox="0 0 24 24"
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"
><style>
.spinner_ajPY {
transform-origin: center;
animation: spinner_AtaB 0.75s infinite linear;
}
@keyframes spinner_AtaB {
100% {
transform: rotate(360deg);
}
}
</style><path
d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
opacity=".25"
/><path
d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
class="spinner_ajPY"
/></svg
>
</div>
{/if}
</button>
</div>
</form>
</div>
</div>
</div>
</Modal>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
import Modal from '$lib/components/common/Modal.svelte'; import Modal from '$lib/components/common/Modal.svelte';
import Tooltip from '$lib/components/common/Tooltip.svelte'; import AddMemoryModal from './AddMemoryModal.svelte';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
let memories = []; let memories = [];
let showAddMemoryModal = false;
$: if (show) { $: if (show) {
(async () => { (async () => {
// chats = await getArchivedChatList(localStorage.token); // chats = await getArchivedChatList(localStorage.token);
...@@ -21,7 +23,7 @@ ...@@ -21,7 +23,7 @@
} }
</script> </script>
<Modal size="lg" bind:show> <Modal size="xl" bind:show>
<div> <div>
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-1"> <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> <div class=" text-lg font-medium self-center">{$i18n.t('Memory')}</div>
...@@ -44,9 +46,11 @@ ...@@ -44,9 +46,11 @@
</button> </button>
</div> </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 px-5 pb-5 dark:text-gray-200">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6"> <div
{#if chats.length > 0} class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6 h-[28rem] max-h-screen outline outline-1 rounded-xl outline-gray-100 dark:outline-gray-800 mb-4 mt-1"
>
{#if memories.length > 0}
<div class="text-left text-sm w-full mb-4 max-h-[22rem] overflow-y-scroll"> <div class="text-left text-sm w-full mb-4 max-h-[22rem] overflow-y-scroll">
<div class="relative overflow-x-auto"> <div class="relative overflow-x-auto">
<table class="w-full text-sm text-left text-gray-600 dark:text-gray-400 table-auto"> <table class="w-full text-sm text-left text-gray-600 dark:text-gray-400 table-auto">
...@@ -60,93 +64,52 @@ ...@@ -60,93 +64,52 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{#each chats as chat, idx} {#each memories as memory}
<tr <tr class="border-b dark:border-gray-800">
class="bg-transparent {idx !== chats.length - 1 && <td class="px-3 py-2"> {memory.name} </td>
'border-b'} dark:bg-gray-900 dark:border-gray-850 text-xs" <td class="px-3 py-2 hidden md:flex">
> {dayjs(memory.created_at).format($i18n.t('MMMM DD, YYYY'))}
<td class="px-3 py-1 w-2/3">
<a href="/c/{chat.id}" target="_blank">
<div class=" underline line-clamp-1">
{chat.title}
</div>
</a>
</td> </td>
<td class="px-3 py-2 text-right">
<td class=" px-3 py-1 hidden md:flex h-[2.5rem]"> <button
<div class="my-auto"> class="text-xs text-gray-500 dark:text-gray-400"
{dayjs(chat.created_at * 1000).format($i18n.t('MMMM DD, YYYY HH:mm'))} on:click={() => {
</div> // showMemory(memory);
</td> }}
>
<td class="px-3 py-1 text-right"> {$i18n.t('View')}
<div class="flex justify-end w-full"> </button>
<Tooltip content="Unarchive Chat">
<button
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
on:click={async () => {
unarchiveChatHandler(chat.id);
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="size-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15"
/>
</svg>
</button>
</Tooltip>
<Tooltip content="Delete Chat">
<button
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
on:click={async () => {
deleteChatHandler(chat.id);
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-4 h-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
/>
</svg>
</button>
</Tooltip>
</div>
</td> </td>
</tr> </tr>
{/each} {/each}
</tbody> </tbody>
</table> </table>
</div> </div>
<!-- {#each chats as chat}
<div>
{JSON.stringify(chat)}
</div>
{/each} -->
</div> </div>
{:else} {:else}
<div class="text-left text-sm w-full mb-8"> <div class="text-center flex h-full text-sm w-full">
{$i18n.t('You have no archived conversations.')} <div class=" my-auto pb-10 px-4 w-full text-gray-500">
{$i18n.t(
'As you chat with LLMs, the details and preferences it remembers will be shown here.'
)}
</div>
</div> </div>
{/if} {/if}
</div> </div>
<div class="flex text-sm font-medium gap-1.5">
<button
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-300 dark:outline-gray-800 rounded-3xl"
on:click={() => {
showAddMemoryModal = true;
}}>Add memory</button
>
<!-- <button
class=" px-3.5 py-1.5 font-medium text-red-500 hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-red-300 dark:outline-red-800 rounded-3xl"
>Clear memory</button
> -->
</div>
</div> </div>
</div> </div>
</Modal> </Modal>
<AddMemoryModal bind:show={showAddMemoryModal} />
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
} else if (size === 'md') { } else if (size === 'md') {
return 'w-[48rem]'; return 'w-[48rem]';
} else { } else {
return 'w-[52rem]'; return 'w-[56rem]';
} }
}; };
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} ...يفكر", "{{modelName}} is thinking...": "{{modelName}} ...يفكر",
"{{user}}'s Chats": "{{user}}' الدردشات", "{{user}}'s Chats": "{{user}}' الدردشات",
"{{webUIName}} Backend Required": "{{webUIName}} مطلوب", "{{webUIName}} Backend Required": "{{webUIName}} مطلوب",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "المستخدم", "a user": "المستخدم",
"About": "عن", "About": "عن",
"Account": "الحساب", "Account": "الحساب",
"Accurate information": "معلومات دقيقة", "Accurate information": "معلومات دقيقة",
"Add": "",
"Add a model": "أضافة موديل", "Add a model": "أضافة موديل",
"Add a model tag name": "ضع تاق للأسم الموديل", "Add a model tag name": "ضع تاق للأسم الموديل",
"Add a short description about what this modelfile does": "أضف وصفًا قصيرًا حول ما يفعله ملف الموديل هذا", "Add a short description about what this modelfile does": "أضف وصفًا قصيرًا حول ما يفعله ملف الموديل هذا",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "أضافة مطالبة مخصصه", "Add custom prompt": "أضافة مطالبة مخصصه",
"Add Docs": "إضافة المستندات", "Add Docs": "إضافة المستندات",
"Add Files": "إضافة ملفات", "Add Files": "إضافة ملفات",
"Add Memory": "",
"Add message": "اضافة رسالة", "Add message": "اضافة رسالة",
"Add Model": "اضافة موديل", "Add Model": "اضافة موديل",
"Add Tags": "اضافة تاق", "Add Tags": "اضافة تاق",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "الأرشيف المحادثات", "Archived Chats": "الأرشيف المحادثات",
"are allowed - Activate this command by typing": "مسموح - قم بتنشيط هذا الأمر عن طريق الكتابة", "are allowed - Activate this command by typing": "مسموح - قم بتنشيط هذا الأمر عن طريق الكتابة",
"Are you sure?": "هل أنت متأكد ؟", "Are you sure?": "هل أنت متأكد ؟",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "أرفق ملف", "Attach file": "أرفق ملف",
"Attention to detail": "انتبه للتفاصيل", "Attention to detail": "انتبه للتفاصيل",
"Audio": "صوتي", "Audio": "صوتي",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "استجابة خطاء", "Bad Response": "استجابة خطاء",
"before": "قبل", "before": "قبل",
"Being lazy": "كون كسول", "Being lazy": "كون كسول",
"Beta": "",
"Builder Mode": "بناء الموديل", "Builder Mode": "بناء الموديل",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "اللغاء", "Cancel": "اللغاء",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "تفعيل", "Enabled": "تفعيل",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
"Enter {{role}} message here": "أدخل رسالة {{role}} هنا", "Enter {{role}} message here": "أدخل رسالة {{role}} هنا",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "أدخل Chunk المتداخل", "Enter Chunk Overlap": "أدخل Chunk المتداخل",
"Enter Chunk Size": "أدخل Chunk الحجم", "Enter Chunk Size": "أدخل Chunk الحجم",
"Enter Image Size (e.g. 512x512)": "(e.g. 512x512) أدخل حجم الصورة ", "Enter Image Size (e.g. 512x512)": "(e.g. 512x512) أدخل حجم الصورة ",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "المتغير", "variable": "المتغير",
"variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.", "variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.",
"Version": "إصدار", "Version": "إصدار",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.",
"Web": "Web", "Web": "Web",
"Web Loader Settings": "", "Web Loader Settings": "",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} мисли ...", "{{modelName}} is thinking...": "{{modelName}} мисли ...",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "{{webUIName}} Изисква се Бекенд", "{{webUIName}} Backend Required": "{{webUIName}} Изисква се Бекенд",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "потребител", "a user": "потребител",
"About": "Относно", "About": "Относно",
"Account": "Акаунт", "Account": "Акаунт",
"Accurate information": "", "Accurate information": "",
"Add": "",
"Add a model": "Добавяне на модел", "Add a model": "Добавяне на модел",
"Add a model tag name": "Добавяне на име на таг за модел", "Add a model tag name": "Добавяне на име на таг за модел",
"Add a short description about what this modelfile does": "Добавяне на кратко описание за това какво прави този модфайл", "Add a short description about what this modelfile does": "Добавяне на кратко описание за това какво прави този модфайл",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "", "Add custom prompt": "",
"Add Docs": "Добавяне на Документи", "Add Docs": "Добавяне на Документи",
"Add Files": "Добавяне на Файлове", "Add Files": "Добавяне на Файлове",
"Add Memory": "",
"Add message": "Добавяне на съобщение", "Add message": "Добавяне на съобщение",
"Add Model": "", "Add Model": "",
"Add Tags": "добавяне на тагове", "Add Tags": "добавяне на тагове",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "", "Archived Chats": "",
"are allowed - Activate this command by typing": "са разрешени - Активирайте тази команда чрез въвеждане", "are allowed - Activate this command by typing": "са разрешени - Активирайте тази команда чрез въвеждане",
"Are you sure?": "Сигурни ли сте?", "Are you sure?": "Сигурни ли сте?",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "", "Attach file": "",
"Attention to detail": "", "Attention to detail": "",
"Audio": "Аудио", "Audio": "Аудио",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "", "Bad Response": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Beta": "",
"Builder Mode": "Режим на Създаване", "Builder Mode": "Режим на Създаване",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "Отказ", "Cancel": "Отказ",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "Включено", "Enabled": "Включено",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Въведете съобщение за {{role}} тук", "Enter {{role}} message here": "Въведете съобщение за {{role}} тук",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "Въведете Chunk Overlap", "Enter Chunk Overlap": "Въведете Chunk Overlap",
"Enter Chunk Size": "Въведете Chunk Size", "Enter Chunk Size": "Въведете Chunk Size",
"Enter Image Size (e.g. 512x512)": "Въведете размер на изображението (напр. 512x512)", "Enter Image Size (e.g. 512x512)": "Въведете размер на изображението (напр. 512x512)",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "променлива", "variable": "променлива",
"variable to have them replaced with clipboard content.": "променливи да се заменят съдържанието от клипборд.", "variable to have them replaced with clipboard content.": "променливи да се заменят съдържанието от клипборд.",
"Version": "Версия", "Version": "Версия",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
"Web": "Уеб", "Web": "Уеб",
"Web Loader Settings": "", "Web Loader Settings": "",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} চিন্তা করছে...", "{{modelName}} is thinking...": "{{modelName}} চিন্তা করছে...",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "{{webUIName}} ব্যাকএন্ড আবশ্যক", "{{webUIName}} Backend Required": "{{webUIName}} ব্যাকএন্ড আবশ্যক",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "একজন ব্যাবহারকারী", "a user": "একজন ব্যাবহারকারী",
"About": "সম্পর্কে", "About": "সম্পর্কে",
"Account": "একাউন্ট", "Account": "একাউন্ট",
"Accurate information": "", "Accurate information": "",
"Add": "",
"Add a model": "একটি মডেল যোগ করুন", "Add a model": "একটি মডেল যোগ করুন",
"Add a model tag name": "একটি মডেল ট্যাগ যোগ করুন", "Add a model tag name": "একটি মডেল ট্যাগ যোগ করুন",
"Add a short description about what this modelfile does": "এই মডেলফাইলটির সম্পর্কে সংক্ষিপ্ত বিবরণ যোগ করুন", "Add a short description about what this modelfile does": "এই মডেলফাইলটির সম্পর্কে সংক্ষিপ্ত বিবরণ যোগ করুন",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "", "Add custom prompt": "",
"Add Docs": "ডকুমেন্ট যোগ করুন", "Add Docs": "ডকুমেন্ট যোগ করুন",
"Add Files": "ফাইল যোগ করুন", "Add Files": "ফাইল যোগ করুন",
"Add Memory": "",
"Add message": "মেসেজ যোগ করুন", "Add message": "মেসেজ যোগ করুন",
"Add Model": "", "Add Model": "",
"Add Tags": "ট্যাগ যোগ করুন", "Add Tags": "ট্যাগ যোগ করুন",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "চ্যাট ইতিহাস সংরক্ষণাগার", "Archived Chats": "চ্যাট ইতিহাস সংরক্ষণাগার",
"are allowed - Activate this command by typing": "অনুমোদিত - কমান্ডটি চালু করার জন্য লিখুন", "are allowed - Activate this command by typing": "অনুমোদিত - কমান্ডটি চালু করার জন্য লিখুন",
"Are you sure?": "আপনি নিশ্চিত?", "Are you sure?": "আপনি নিশ্চিত?",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "", "Attach file": "",
"Attention to detail": "", "Attention to detail": "",
"Audio": "অডিও", "Audio": "অডিও",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "", "Bad Response": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Beta": "",
"Builder Mode": "বিল্ডার মোড", "Builder Mode": "বিল্ডার মোড",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "বাতিল", "Cancel": "বাতিল",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "চালু করা হয়েছে", "Enabled": "চালু করা হয়েছে",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "{{role}} মেসেজ এখানে লিখুন", "Enter {{role}} message here": "{{role}} মেসেজ এখানে লিখুন",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "চাঙ্ক ওভারল্যাপ লিখুন", "Enter Chunk Overlap": "চাঙ্ক ওভারল্যাপ লিখুন",
"Enter Chunk Size": "চাংক সাইজ লিখুন", "Enter Chunk Size": "চাংক সাইজ লিখুন",
"Enter Image Size (e.g. 512x512)": "ছবির মাপ লিখুন (যেমন 512x512)", "Enter Image Size (e.g. 512x512)": "ছবির মাপ লিখুন (যেমন 512x512)",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "ভেরিয়েবল", "variable": "ভেরিয়েবল",
"variable to have them replaced with clipboard content.": "ক্লিপবোর্ডের কন্টেন্ট দিয়ে যেই ভেরিয়েবল রিপ্লেস করা যাবে।", "variable to have them replaced with clipboard content.": "ক্লিপবোর্ডের কন্টেন্ট দিয়ে যেই ভেরিয়েবল রিপ্লেস করা যাবে।",
"Version": "ভার্সন", "Version": "ভার্সন",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
"Web": "ওয়েব", "Web": "ওয়েব",
"Web Loader Settings": "", "Web Loader Settings": "",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} està pensant...", "{{modelName}} is thinking...": "{{modelName}} està pensant...",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "Es requereix Backend de {{webUIName}}", "{{webUIName}} Backend Required": "Es requereix Backend de {{webUIName}}",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "un usuari", "a user": "un usuari",
"About": "Sobre", "About": "Sobre",
"Account": "Compte", "Account": "Compte",
"Accurate information": "", "Accurate information": "",
"Add": "",
"Add a model": "Afegeix un model", "Add a model": "Afegeix un model",
"Add a model tag name": "Afegeix un nom d'etiqueta de model", "Add a model tag name": "Afegeix un nom d'etiqueta de model",
"Add a short description about what this modelfile does": "Afegeix una descripció curta del que fa aquest arxiu de model", "Add a short description about what this modelfile does": "Afegeix una descripció curta del que fa aquest arxiu de model",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "", "Add custom prompt": "",
"Add Docs": "Afegeix Documents", "Add Docs": "Afegeix Documents",
"Add Files": "Afegeix Arxius", "Add Files": "Afegeix Arxius",
"Add Memory": "",
"Add message": "Afegeix missatge", "Add message": "Afegeix missatge",
"Add Model": "", "Add Model": "",
"Add Tags": "afegeix etiquetes", "Add Tags": "afegeix etiquetes",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "Arxiu d'historial de xat", "Archived Chats": "Arxiu d'historial de xat",
"are allowed - Activate this command by typing": "estan permesos - Activa aquesta comanda escrivint", "are allowed - Activate this command by typing": "estan permesos - Activa aquesta comanda escrivint",
"Are you sure?": "Estàs segur?", "Are you sure?": "Estàs segur?",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "", "Attach file": "",
"Attention to detail": "", "Attention to detail": "",
"Audio": "Àudio", "Audio": "Àudio",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "", "Bad Response": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Beta": "",
"Builder Mode": "Mode Constructor", "Builder Mode": "Mode Constructor",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "Cancel·la", "Cancel": "Cancel·la",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "Activat", "Enabled": "Activat",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}", "Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "Introdueix el Solapament de Blocs", "Enter Chunk Overlap": "Introdueix el Solapament de Blocs",
"Enter Chunk Size": "Introdueix la Mida del Bloc", "Enter Chunk Size": "Introdueix la Mida del Bloc",
"Enter Image Size (e.g. 512x512)": "Introdueix la Mida de la Imatge (p. ex. 512x512)", "Enter Image Size (e.g. 512x512)": "Introdueix la Mida de la Imatge (p. ex. 512x512)",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "variable", "variable": "variable",
"variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.", "variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.",
"Version": "Versió", "Version": "Versió",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
"Web": "Web", "Web": "Web",
"Web Loader Settings": "", "Web Loader Settings": "",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} denkt nach...", "{{modelName}} is thinking...": "{{modelName}} denkt nach...",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "{{webUIName}}-Backend erforderlich", "{{webUIName}} Backend Required": "{{webUIName}}-Backend erforderlich",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "ein Benutzer", "a user": "ein Benutzer",
"About": "Über", "About": "Über",
"Account": "Account", "Account": "Account",
"Accurate information": "Genaue Information", "Accurate information": "Genaue Information",
"Add": "",
"Add a model": "Füge ein Modell hinzu", "Add a model": "Füge ein Modell hinzu",
"Add a model tag name": "Benenne deinen Modell-Tag", "Add a model tag name": "Benenne deinen Modell-Tag",
"Add a short description about what this modelfile does": "Füge eine kurze Beschreibung hinzu, was dieses Modelfile kann", "Add a short description about what this modelfile does": "Füge eine kurze Beschreibung hinzu, was dieses Modelfile kann",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "Eigenen Prompt hinzufügen", "Add custom prompt": "Eigenen Prompt hinzufügen",
"Add Docs": "Dokumente hinzufügen", "Add Docs": "Dokumente hinzufügen",
"Add Files": "Dateien hinzufügen", "Add Files": "Dateien hinzufügen",
"Add Memory": "",
"Add message": "Nachricht eingeben", "Add message": "Nachricht eingeben",
"Add Model": "Modell hinzufügen", "Add Model": "Modell hinzufügen",
"Add Tags": "Tags hinzufügen", "Add Tags": "Tags hinzufügen",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "Archivierte Chats", "Archived Chats": "Archivierte Chats",
"are allowed - Activate this command by typing": "sind erlaubt - Aktiviere diesen Befehl, indem du", "are allowed - Activate this command by typing": "sind erlaubt - Aktiviere diesen Befehl, indem du",
"Are you sure?": "Bist du sicher?", "Are you sure?": "Bist du sicher?",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "Datei anhängen", "Attach file": "Datei anhängen",
"Attention to detail": "Auge fürs Detail", "Attention to detail": "Auge fürs Detail",
"Audio": "Audio", "Audio": "Audio",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "Schlechte Antwort", "Bad Response": "Schlechte Antwort",
"before": "bereits geteilt", "before": "bereits geteilt",
"Being lazy": "Faul sein", "Being lazy": "Faul sein",
"Beta": "",
"Builder Mode": "Builder Modus", "Builder Mode": "Builder Modus",
"Bypass SSL verification for Websites": "Bypass SSL-Verifizierung für Websites", "Bypass SSL verification for Websites": "Bypass SSL-Verifizierung für Websites",
"Cancel": "Abbrechen", "Cancel": "Abbrechen",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "Aktiviert", "Enabled": "Aktiviert",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Gib die {{role}} Nachricht hier ein", "Enter {{role}} message here": "Gib die {{role}} Nachricht hier ein",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "Gib den Chunk Overlap ein", "Enter Chunk Overlap": "Gib den Chunk Overlap ein",
"Enter Chunk Size": "Gib die Chunk Size ein", "Enter Chunk Size": "Gib die Chunk Size ein",
"Enter Image Size (e.g. 512x512)": "Gib die Bildgröße ein (z.B. 512x512)", "Enter Image Size (e.g. 512x512)": "Gib die Bildgröße ein (z.B. 512x512)",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "Variable", "variable": "Variable",
"variable to have them replaced with clipboard content.": "Variable, um den Inhalt der Zwischenablage beim Nutzen des Prompts zu ersetzen.", "variable to have them replaced with clipboard content.": "Variable, um den Inhalt der Zwischenablage beim Nutzen des Prompts zu ersetzen.",
"Version": "Version", "Version": "Version",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warnung: Wenn du dein Einbettungsmodell aktualisierst oder änderst, musst du alle Dokumente erneut importieren.", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warnung: Wenn du dein Einbettungsmodell aktualisierst oder änderst, musst du alle Dokumente erneut importieren.",
"Web": "Web", "Web": "Web",
"Web Loader Settings": "", "Web Loader Settings": "",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} is thinkin'...", "{{modelName}} is thinking...": "{{modelName}} is thinkin'...",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "{{webUIName}} Backend Much Required", "{{webUIName}} Backend Required": "{{webUIName}} Backend Much Required",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "such user", "a user": "such user",
"About": "Much About", "About": "Much About",
"Account": "Account", "Account": "Account",
"Accurate information": "", "Accurate information": "",
"Add": "",
"Add a model": "Add a model", "Add a model": "Add a model",
"Add a model tag name": "Add a model tag name", "Add a model tag name": "Add a model tag name",
"Add a short description about what this modelfile does": "Add short description about what this modelfile does", "Add a short description about what this modelfile does": "Add short description about what this modelfile does",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "", "Add custom prompt": "",
"Add Docs": "Add Docs", "Add Docs": "Add Docs",
"Add Files": "Add Files", "Add Files": "Add Files",
"Add Memory": "",
"Add message": "Add Prompt", "Add message": "Add Prompt",
"Add Model": "", "Add Model": "",
"Add Tags": "", "Add Tags": "",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "", "Archived Chats": "",
"are allowed - Activate this command by typing": "are allowed. Activate typing", "are allowed - Activate this command by typing": "are allowed. Activate typing",
"Are you sure?": "Such certainty?", "Are you sure?": "Such certainty?",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "", "Attach file": "",
"Attention to detail": "", "Attention to detail": "",
"Audio": "Audio", "Audio": "Audio",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "", "Bad Response": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Beta": "",
"Builder Mode": "Builder Mode", "Builder Mode": "Builder Mode",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "Cancel", "Cancel": "Cancel",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "So Activated", "Enabled": "So Activated",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Enter {{role}} bork here", "Enter {{role}} message here": "Enter {{role}} bork here",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "Enter Overlap of Chunks", "Enter Chunk Overlap": "Enter Overlap of Chunks",
"Enter Chunk Size": "Enter Size of Chunk", "Enter Chunk Size": "Enter Size of Chunk",
"Enter Image Size (e.g. 512x512)": "Enter Size of Wow (e.g. 512x512)", "Enter Image Size (e.g. 512x512)": "Enter Size of Wow (e.g. 512x512)",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "variable very variable", "variable": "variable very variable",
"variable to have them replaced with clipboard content.": "variable to have them replaced with clipboard content. Very replace.", "variable to have them replaced with clipboard content.": "variable to have them replaced with clipboard content. Very replace.",
"Version": "Version much version", "Version": "Version much version",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
"Web": "Web very web", "Web": "Web very web",
"Web Loader Settings": "", "Web Loader Settings": "",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "", "{{modelName}} is thinking...": "",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "", "{{webUIName}} Backend Required": "",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "", "a user": "",
"About": "", "About": "",
"Account": "", "Account": "",
"Accurate information": "", "Accurate information": "",
"Add": "",
"Add a model": "", "Add a model": "",
"Add a model tag name": "", "Add a model tag name": "",
"Add a short description about what this modelfile does": "", "Add a short description about what this modelfile does": "",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "", "Add custom prompt": "",
"Add Docs": "", "Add Docs": "",
"Add Files": "", "Add Files": "",
"Add Memory": "",
"Add message": "", "Add message": "",
"Add Model": "", "Add Model": "",
"Add Tags": "", "Add Tags": "",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "", "Archived Chats": "",
"are allowed - Activate this command by typing": "", "are allowed - Activate this command by typing": "",
"Are you sure?": "", "Are you sure?": "",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "", "Attach file": "",
"Attention to detail": "", "Attention to detail": "",
"Audio": "", "Audio": "",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "", "Bad Response": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Beta": "",
"Builder Mode": "", "Builder Mode": "",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "", "Cancel": "",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "", "Enabled": "",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "", "Enter {{role}} message here": "",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "", "Enter Chunk Overlap": "",
"Enter Chunk Size": "", "Enter Chunk Size": "",
"Enter Image Size (e.g. 512x512)": "", "Enter Image Size (e.g. 512x512)": "",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "", "variable": "",
"variable to have them replaced with clipboard content.": "", "variable to have them replaced with clipboard content.": "",
"Version": "", "Version": "",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
"Web": "", "Web": "",
"Web Loader Settings": "", "Web Loader Settings": "",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "", "{{modelName}} is thinking...": "",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "", "{{webUIName}} Backend Required": "",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "", "a user": "",
"About": "", "About": "",
"Account": "", "Account": "",
"Accurate information": "", "Accurate information": "",
"Add": "",
"Add a model": "", "Add a model": "",
"Add a model tag name": "", "Add a model tag name": "",
"Add a short description about what this modelfile does": "", "Add a short description about what this modelfile does": "",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "", "Add custom prompt": "",
"Add Docs": "", "Add Docs": "",
"Add Files": "", "Add Files": "",
"Add Memory": "",
"Add message": "", "Add message": "",
"Add Model": "", "Add Model": "",
"Add Tags": "", "Add Tags": "",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "", "Archived Chats": "",
"are allowed - Activate this command by typing": "", "are allowed - Activate this command by typing": "",
"Are you sure?": "", "Are you sure?": "",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "", "Attach file": "",
"Attention to detail": "", "Attention to detail": "",
"Audio": "", "Audio": "",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "", "Bad Response": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Beta": "",
"Builder Mode": "", "Builder Mode": "",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "", "Cancel": "",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "", "Enabled": "",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "", "Enter {{role}} message here": "",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "", "Enter Chunk Overlap": "",
"Enter Chunk Size": "", "Enter Chunk Size": "",
"Enter Image Size (e.g. 512x512)": "", "Enter Image Size (e.g. 512x512)": "",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "", "variable": "",
"variable to have them replaced with clipboard content.": "", "variable to have them replaced with clipboard content.": "",
"Version": "", "Version": "",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
"Web": "", "Web": "",
"Web Loader Settings": "", "Web Loader Settings": "",
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
"{{modelName}} is thinking...": "{{modelName}} está pensando...", "{{modelName}} is thinking...": "{{modelName}} está pensando...",
"{{user}}'s Chats": "", "{{user}}'s Chats": "",
"{{webUIName}} Backend Required": "{{webUIName}} Servidor Requerido", "{{webUIName}} Backend Required": "{{webUIName}} Servidor Requerido",
"A selected model does not support image input": "", "A selected model does not support image input": "",
"a user": "un usuario", "a user": "un usuario",
"About": "Sobre nosotros", "About": "Sobre nosotros",
"Account": "Cuenta", "Account": "Cuenta",
"Accurate information": "", "Accurate information": "",
"Add": "",
"Add a model": "Agregar un modelo", "Add a model": "Agregar un modelo",
"Add a model tag name": "Agregar un nombre de etiqueta de modelo", "Add a model tag name": "Agregar un nombre de etiqueta de modelo",
"Add a short description about what this modelfile does": "Agregue una descripción corta de lo que este modelfile hace", "Add a short description about what this modelfile does": "Agregue una descripción corta de lo que este modelfile hace",
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
"Add custom prompt": "", "Add custom prompt": "",
"Add Docs": "Agregar Documentos", "Add Docs": "Agregar Documentos",
"Add Files": "Agregar Archivos", "Add Files": "Agregar Archivos",
"Add Memory": "",
"Add message": "Agregar Prompt", "Add message": "Agregar Prompt",
"Add Model": "", "Add Model": "",
"Add Tags": "agregar etiquetas", "Add Tags": "agregar etiquetas",
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
"Archived Chats": "Chats archivados", "Archived Chats": "Chats archivados",
"are allowed - Activate this command by typing": "están permitidos - Active este comando escribiendo", "are allowed - Activate this command by typing": "están permitidos - Active este comando escribiendo",
"Are you sure?": "¿Está seguro?", "Are you sure?": "¿Está seguro?",
"As you chat with LLMs, the details and preferences it remembers will be shown here.": "",
"Attach file": "", "Attach file": "",
"Attention to detail": "", "Attention to detail": "",
"Audio": "Audio", "Audio": "Audio",
...@@ -62,7 +65,6 @@ ...@@ -62,7 +65,6 @@
"Bad Response": "", "Bad Response": "",
"before": "", "before": "",
"Being lazy": "", "Being lazy": "",
"Beta": "",
"Builder Mode": "Modo de Constructor", "Builder Mode": "Modo de Constructor",
"Bypass SSL verification for Websites": "", "Bypass SSL verification for Websites": "",
"Cancel": "Cancelar", "Cancel": "Cancelar",
...@@ -173,6 +175,7 @@ ...@@ -173,6 +175,7 @@
"Enabled": "Activado", "Enabled": "Activado",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Ingrese el mensaje {{role}} aquí", "Enter {{role}} message here": "Ingrese el mensaje {{role}} aquí",
"Enter a detail about yourself for your LLMs to recall": "",
"Enter Chunk Overlap": "Ingresar superposición de fragmentos", "Enter Chunk Overlap": "Ingresar superposición de fragmentos",
"Enter Chunk Size": "Ingrese el tamaño del fragmento", "Enter Chunk Size": "Ingrese el tamaño del fragmento",
"Enter Image Size (e.g. 512x512)": "Ingrese el tamaño de la imagen (p.ej. 512x512)", "Enter Image Size (e.g. 512x512)": "Ingrese el tamaño de la imagen (p.ej. 512x512)",
...@@ -488,6 +491,7 @@ ...@@ -488,6 +491,7 @@
"variable": "variable", "variable": "variable",
"variable to have them replaced with clipboard content.": "variable para reemplazarlos con el contenido del portapapeles.", "variable to have them replaced with clipboard content.": "variable para reemplazarlos con el contenido del portapapeles.",
"Version": "Versión", "Version": "Versión",
"View": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "",
"Web": "Web", "Web": "Web",
"Web Loader Settings": "", "Web Loader Settings": "",
......
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