mirror of
https://github.com/open-webui/open-webui.git
synced 2026-08-13 01:02:25 -06:00
refac
This commit is contained in:
+6
-16
@@ -6,12 +6,6 @@
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Archivo';
|
||||
src: url('/assets/fonts/Archivo-Variable.ttf');
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Mona Sans';
|
||||
src: url('/assets/fonts/Mona-Sans.woff2');
|
||||
@@ -95,33 +89,29 @@ textarea::placeholder {
|
||||
}
|
||||
|
||||
.input-prose {
|
||||
@apply prose dark:prose-invert prose-headings:font-semibold prose-hr:my-4 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-1 prose-img:my-1 prose-headings:my-2 prose-pre:my-0 prose-table:my-1 prose-blockquote:my-0 prose-ul:my-1 prose-ol:my-1 prose-li:my-0.5 whitespace-pre-line;
|
||||
@apply prose dark:prose-invert prose-headings:font-normal prose-hr:my-4 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-1 prose-img:my-1 prose-headings:my-2 prose-pre:my-0 prose-table:my-1 prose-blockquote:my-0 prose-ul:my-1 prose-ol:my-1 prose-li:my-0.5 whitespace-pre-line;
|
||||
}
|
||||
|
||||
.input-prose-sm {
|
||||
@apply prose dark:prose-invert prose-headings:font-medium prose-h1:text-2xl prose-h2:text-xl prose-h3:text-lg prose-hr:my-4 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-1 prose-img:my-1 prose-headings:my-2 prose-pre:my-0 prose-table:my-1 prose-blockquote:my-0 prose-ul:my-1 prose-ol:my-1 prose-li:my-1 whitespace-pre-line text-sm;
|
||||
@apply prose dark:prose-invert prose-headings:font-normal prose-h1:text-2xl prose-h2:text-xl prose-h3:text-lg prose-hr:my-4 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-1 prose-img:my-1 prose-headings:my-2 prose-pre:my-0 prose-table:my-1 prose-blockquote:my-0 prose-ul:my-1 prose-ol:my-1 prose-li:my-1 whitespace-pre-line text-sm;
|
||||
}
|
||||
|
||||
.markdown-prose {
|
||||
@apply prose dark:prose-invert prose-blockquote:border-s-gray-100 prose-blockquote:dark:border-gray-800 prose-blockquote:border-s-2 prose-blockquote:not-italic prose-blockquote:font-normal prose-headings:font-semibold prose-hr:my-4 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-0 prose-img:my-1 prose-headings:my-1 prose-pre:my-0 prose-table:my-0 prose-blockquote:my-0 prose-ul:-my-0 prose-ol:-my-0 prose-li:-my-0 whitespace-pre-line;
|
||||
@apply prose dark:prose-invert prose-blockquote:border-s-gray-100 prose-blockquote:dark:border-gray-800 prose-blockquote:border-s-2 prose-blockquote:not-italic prose-blockquote:font-normal prose-headings:font-normal prose-hr:my-4 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-0 prose-img:my-1 prose-headings:my-1 prose-pre:my-0 prose-table:my-0 prose-blockquote:my-0 prose-ul:-my-0 prose-ol:-my-0 prose-li:-my-0 whitespace-pre-line;
|
||||
}
|
||||
|
||||
.markdown-prose-sm {
|
||||
@apply text-sm prose dark:prose-invert prose-blockquote:border-s-gray-100 prose-blockquote:dark:border-gray-800 prose-blockquote:border-s-2 prose-blockquote:not-italic prose-blockquote:font-normal prose-headings:font-semibold prose-hr:my-2 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-0 prose-img:my-1 prose-headings:my-1 prose-pre:my-0 prose-table:my-0 prose-blockquote:my-0 prose-ul:-my-0 prose-ol:-my-0 prose-li:-my-0 whitespace-pre-line;
|
||||
@apply text-sm prose dark:prose-invert prose-blockquote:border-s-gray-100 prose-blockquote:dark:border-gray-800 prose-blockquote:border-s-2 prose-blockquote:not-italic prose-blockquote:font-normal prose-headings:font-normal prose-hr:my-2 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-0 prose-img:my-1 prose-headings:my-1 prose-pre:my-0 prose-table:my-0 prose-blockquote:my-0 prose-ul:-my-0 prose-ol:-my-0 prose-li:-my-0 whitespace-pre-line;
|
||||
}
|
||||
|
||||
.markdown-prose-xs {
|
||||
@apply text-xs prose dark:prose-invert prose-blockquote:border-s-gray-100 prose-blockquote:dark:border-gray-800 prose-blockquote:border-s-2 prose-blockquote:not-italic prose-blockquote:font-normal prose-headings:font-semibold prose-hr:my-0.5 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-0 prose-img:my-1 prose-headings:my-1 prose-pre:my-0 prose-table:my-0 prose-blockquote:my-0 prose-ul:-my-0 prose-ol:-my-0 prose-li:-my-0 whitespace-pre-line;
|
||||
@apply text-xs prose dark:prose-invert prose-blockquote:border-s-gray-100 prose-blockquote:dark:border-gray-800 prose-blockquote:border-s-2 prose-blockquote:not-italic prose-blockquote:font-normal prose-headings:font-normal prose-hr:my-0.5 prose-hr:border-gray-50 prose-hr:dark:border-gray-850 prose-p:my-0 prose-img:my-1 prose-headings:my-1 prose-pre:my-0 prose-table:my-0 prose-blockquote:my-0 prose-ul:-my-0 prose-ol:-my-0 prose-li:-my-0 whitespace-pre-line;
|
||||
}
|
||||
|
||||
.markdown a {
|
||||
@apply underline;
|
||||
}
|
||||
|
||||
.font-primary {
|
||||
font-family: 'Archivo', 'Vazirmatn', sans-serif;
|
||||
}
|
||||
|
||||
.drag-region {
|
||||
-webkit-app-region: drag;
|
||||
}
|
||||
@@ -673,7 +663,7 @@ input[type='number'] {
|
||||
}
|
||||
|
||||
.tiptap th {
|
||||
@apply cursor-pointer text-start text-xs text-gray-700 dark:text-gray-400 font-semibold uppercase bg-gray-50 dark:bg-gray-850;
|
||||
@apply cursor-pointer text-start text-xs text-gray-700 dark:text-gray-400 font-normal uppercase bg-gray-50 dark:bg-gray-850;
|
||||
}
|
||||
|
||||
.tiptap td {
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
<Modal size="sm" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 pb-1.5">
|
||||
<h1 class="text-lg font-medium self-center font-primary">
|
||||
<h1 class="text-lg font-normal self-center ">
|
||||
{#if edit}
|
||||
{$i18n.t('Edit Connection')}
|
||||
{:else}
|
||||
@@ -691,11 +691,11 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-medium">
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-normal">
|
||||
<div>
|
||||
{#if edit}
|
||||
<button
|
||||
class="px-1 py-1.5 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:underline transition"
|
||||
class="px-1 py-1.5 text-sm font-normal text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:underline transition"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
showDeleteConfirmDialog = true;
|
||||
@@ -707,7 +707,7 @@
|
||||
</div>
|
||||
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</script>
|
||||
|
||||
<div class="px-3">
|
||||
<div class="text-center dark:text-white text-2xl font-medium z-50" role="heading" aria-level="2">
|
||||
<div class="text-center dark:text-white text-2xl font-normal z-50" role="heading" aria-level="2">
|
||||
{#if title}
|
||||
{title}
|
||||
{:else}
|
||||
|
||||
@@ -359,7 +359,7 @@
|
||||
<Modal size="sm" bind:show>
|
||||
<div>
|
||||
<div class="flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<h1 class="text-lg font-medium self-center font-primary">
|
||||
<h1 class="text-lg font-normal self-center ">
|
||||
{#if edit}
|
||||
{$i18n.t('Edit Terminal Connection')}
|
||||
{:else}
|
||||
@@ -731,7 +731,7 @@
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="px-2 py-1 text-xs font-medium rounded-full bg-gray-100 hover:bg-gray-200 dark:bg-gray-850 dark:hover:bg-gray-800 transition"
|
||||
class="px-2 py-1 text-xs font-normal rounded-full bg-gray-100 hover:bg-gray-200 dark:bg-gray-850 dark:hover:bg-gray-800 transition"
|
||||
disabled={refreshing}
|
||||
on:click={refreshHandler}
|
||||
>
|
||||
@@ -771,7 +771,7 @@
|
||||
>
|
||||
<LockClosed strokeWidth="2.5" className="size-3.5 shrink-0" />
|
||||
|
||||
<div class="text-xs font-medium shrink-0">
|
||||
<div class="text-xs font-normal shrink-0">
|
||||
{$i18n.t('Access')}
|
||||
</div>
|
||||
</button>
|
||||
@@ -881,11 +881,11 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-medium">
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-normal">
|
||||
<div>
|
||||
{#if edit}
|
||||
<button
|
||||
class="px-1 py-1.5 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:underline transition"
|
||||
class="px-1 py-1.5 text-sm font-normal text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:underline transition"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
showDeleteConfirmDialog = true;
|
||||
@@ -897,7 +897,7 @@
|
||||
</div>
|
||||
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 disabled:opacity-50 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 disabled:opacity-50 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
|
||||
type="submit"
|
||||
disabled={loadingPolicy || !!policyLoadError}
|
||||
>
|
||||
|
||||
@@ -445,7 +445,7 @@
|
||||
<Modal size="sm" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<h1 class=" text-lg font-medium self-center font-primary">
|
||||
<h1 class=" text-lg font-normal self-center ">
|
||||
{#if edit}
|
||||
{$i18n.t('Edit Connection')}
|
||||
{:else}
|
||||
@@ -686,13 +686,13 @@
|
||||
|
||||
{#if !oauthClientInfo}
|
||||
<div
|
||||
class="text-xs font-medium px-1.5 rounded-md bg-yellow-500/20 text-yellow-700 dark:text-yellow-200"
|
||||
class="text-xs font-normal px-1.5 rounded-md bg-yellow-500/20 text-yellow-700 dark:text-yellow-200"
|
||||
>
|
||||
{$i18n.t('Not Registered')}
|
||||
</div>
|
||||
{:else}
|
||||
<div
|
||||
class="text-xs font-medium px-1.5 rounded-md bg-green-500/20 text-green-700 dark:text-green-200"
|
||||
class="text-xs font-normal px-1.5 rounded-md bg-green-500/20 text-green-700 dark:text-green-200"
|
||||
>
|
||||
{$i18n.t('Registered')}
|
||||
</div>
|
||||
@@ -813,7 +813,7 @@
|
||||
>
|
||||
<LockClosed strokeWidth="2.5" className="size-3.5 shrink-0" />
|
||||
|
||||
<div class="text-xs font-medium shrink-0">
|
||||
<div class="text-xs font-normal shrink-0">
|
||||
{$i18n.t('Access')}
|
||||
</div>
|
||||
</button>
|
||||
@@ -999,24 +999,24 @@
|
||||
<div
|
||||
class=" bg-yellow-500/20 text-yellow-700 dark:text-yellow-200 rounded-2xl text-xs px-4 py-3 mb-2 mt-1"
|
||||
>
|
||||
<span class="font-medium">
|
||||
<span class="font-normal">
|
||||
{$i18n.t('Warning')}:
|
||||
</span>
|
||||
{$i18n.t(
|
||||
'MCP support is experimental and its specification changes often, which can lead to incompatibilities. OpenAPI specification support is directly maintained by the Open WebUI team, making it the more reliable option for compatibility.'
|
||||
)}
|
||||
|
||||
<a class="font-medium underline" href="https://docs.openwebui.com/" target="_blank"
|
||||
<a class="font-normal underline" href="https://docs.openwebui.com/" target="_blank"
|
||||
>{$i18n.t('Read more →')}</a
|
||||
>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-medium">
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-normal">
|
||||
<div>
|
||||
{#if edit}
|
||||
<button
|
||||
class="px-1 py-1.5 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:underline transition"
|
||||
class="px-1 py-1.5 text-sm font-normal text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:underline transition"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
showDeleteConfirmDialog = true;
|
||||
@@ -1028,7 +1028,7 @@
|
||||
</div>
|
||||
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
<!-- Header -->
|
||||
<div class="flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<input
|
||||
class="w-full text-lg font-medium bg-transparent outline-hidden font-primary placeholder:text-gray-300 dark:placeholder:text-gray-700"
|
||||
class="w-full text-lg font-normal bg-transparent outline-hidden placeholder:text-gray-300 dark:placeholder:text-gray-700"
|
||||
type="text"
|
||||
bind:value={name}
|
||||
placeholder={$i18n.t('Automation title')}
|
||||
@@ -154,7 +154,7 @@
|
||||
{$i18n.t('Cancel')}
|
||||
</button>
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 {loading
|
||||
? 'cursor-not-allowed'
|
||||
: ''}"
|
||||
on:click={submitHandler}
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<Modal bind:show size="xl">
|
||||
<div class="px-6 pt-5 dark:text-white text-black">
|
||||
<div class="flex justify-between items-start">
|
||||
<h2 class="text-xl font-medium m-0">
|
||||
<h2 class="text-xl font-normal m-0">
|
||||
{$i18n.t("What's New in")}
|
||||
{$WEBUI_NAME}
|
||||
<Confetti x={[-1, -0.25]} y={[0, 0.5]} />
|
||||
@@ -62,7 +62,7 @@
|
||||
{#if changelog}
|
||||
{#each Object.keys(changelog) as version}
|
||||
<div class=" mb-3 pr-2">
|
||||
<h3 class="font-semibold text-xl mb-1 dark:text-white m-0">
|
||||
<h3 class="font-normal text-xl mb-1 dark:text-white m-0">
|
||||
v{version} - {changelog[version].date}
|
||||
</h3>
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
{#each Object.keys(changelog[version]).filter((section) => section !== 'date') as section}
|
||||
<div class="w-full">
|
||||
<div
|
||||
class="font-semibold uppercase text-xs {section === 'added'
|
||||
class="font-normal uppercase text-xs {section === 'added'
|
||||
? 'bg-blue-500/20 text-blue-700 dark:text-blue-200'
|
||||
: section === 'fixed'
|
||||
? 'bg-green-500/20 text-green-700 dark:text-green-200'
|
||||
@@ -98,10 +98,10 @@
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
on:click={closeModal}
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
>
|
||||
<span class="relative">{$i18n.t("Okay, Let's Go!")}</span>
|
||||
</button>
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
<Modal size="sm" bind:show>
|
||||
<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('Import')}</div>
|
||||
<div class=" text-lg font-normal self-center">{$i18n.t('Import')}</div>
|
||||
<button
|
||||
class="self-center"
|
||||
aria-label={$i18n.t('Close')}
|
||||
@@ -102,9 +102,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
|
||||
<div>
|
||||
{#if title}
|
||||
<div class=" text-[13px] font-medium mb-0.5 line-clamp-1">{title}</div>
|
||||
<div class=" text-[13px] font-normal mb-0.5 line-clamp-1">{title}</div>
|
||||
{/if}
|
||||
|
||||
<div class=" line-clamp-2 text-xs self-center dark:text-gray-300 font-normal">
|
||||
|
||||
@@ -88,14 +88,14 @@
|
||||
<div class="flex flex-col justify-center items-center">
|
||||
<button
|
||||
aria-label={$i18n.t('Get started')}
|
||||
class="relative z-20 flex p-1 rounded-full bg-white/5 hover:bg-white/10 transition font-medium text-sm"
|
||||
class="relative z-20 flex p-1 rounded-full bg-white/5 hover:bg-white/10 transition font-normal text-sm"
|
||||
on:click={() => {
|
||||
getStartedHandler();
|
||||
}}
|
||||
>
|
||||
<ArrowRightCircle className="size-6" aria-hidden="true" />
|
||||
</button>
|
||||
<div class="mt-1.5 font-primary text-base font-medium" aria-hidden="true">
|
||||
<div class="mt-1.5 text-base font-normal" aria-hidden="true">
|
||||
{$i18n.t(`Get started`)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
{#if model}
|
||||
<div class="flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
|
||||
<Tooltip content={`${model.name} (${model.id})`} placement="top-start">
|
||||
<div class="text-lg font-medium self-center line-clamp-1">
|
||||
<div class="text-lg font-normal self-center line-clamp-1">
|
||||
{model.name}
|
||||
</div>
|
||||
</Tooltip>
|
||||
@@ -193,7 +193,7 @@
|
||||
<div class="px-5 border-b border-gray-100 dark:border-gray-850">
|
||||
<div class="flex gap-4">
|
||||
<button
|
||||
class="py-2 text-sm font-medium border-b-2 transition-colors {selectedTab === 'overview'
|
||||
class="py-2 text-sm font-normal border-b-2 transition-colors {selectedTab === 'overview'
|
||||
? 'border-black dark:border-white text-gray-900 dark:text-white'
|
||||
: 'border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-300'}"
|
||||
on:click={() => selectTab('overview')}
|
||||
@@ -202,7 +202,7 @@
|
||||
</button>
|
||||
{#if $config?.features?.enable_admin_chat_access}
|
||||
<button
|
||||
class="py-2 text-sm font-medium border-b-2 transition-colors {selectedTab === 'chats'
|
||||
class="py-2 text-sm font-normal border-b-2 transition-colors {selectedTab === 'chats'
|
||||
? 'border-black dark:border-white text-gray-900 dark:text-white'
|
||||
: 'border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-300'}"
|
||||
on:click={() => selectTab('chats')}
|
||||
@@ -219,7 +219,7 @@
|
||||
<div class="mb-4 mt-3">
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<Tooltip content={$i18n.t('Thumbs up/down ratings from users on model responses')}>
|
||||
<div class="text-xs text-gray-500 font-medium uppercase tracking-wide cursor-help">
|
||||
<div class="text-xs text-gray-500 font-normal uppercase tracking-wide cursor-help">
|
||||
{$i18n.t('Feedback Activity')}
|
||||
</div>
|
||||
</Tooltip>
|
||||
@@ -229,7 +229,7 @@
|
||||
{#each TIME_RANGES as range}
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-full transition-all duration-200 px-2.5 py-0.5 text-xs font-medium {selectedRange ===
|
||||
class="rounded-full transition-all duration-200 px-2.5 py-0.5 text-xs font-normal {selectedRange ===
|
||||
range.key
|
||||
? 'bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white'
|
||||
: 'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200'}"
|
||||
@@ -249,14 +249,14 @@
|
||||
|
||||
<!-- Tags -->
|
||||
<div class="mb-4">
|
||||
<div class="text-xs text-gray-500 mb-2 font-medium uppercase tracking-wide">
|
||||
<div class="text-xs text-gray-500 mb-2 font-normal uppercase tracking-wide">
|
||||
{$i18n.t('Tags')}
|
||||
</div>
|
||||
{#if tags.length}
|
||||
<div class="flex flex-wrap gap-1 -mx-1">
|
||||
{#each tags as tagInfo}
|
||||
<span class="px-2 py-0.5 rounded-full bg-gray-100 dark:bg-gray-850 text-xs">
|
||||
{tagInfo.tag} <span class="text-gray-500 font-medium">{tagInfo.count}</span>
|
||||
{tagInfo.tag} <span class="text-gray-500 font-normal">{tagInfo.count}</span>
|
||||
</span>
|
||||
{/each}
|
||||
</div>
|
||||
@@ -283,7 +283,7 @@
|
||||
|
||||
<div class="flex justify-end pt-4">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="button"
|
||||
on:click={close}
|
||||
>
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
<div
|
||||
class="pt-0.5 pb-1 gap-1 flex flex-row justify-between items-center sticky top-0 z-10 bg-white dark:bg-gray-900"
|
||||
>
|
||||
<div class="text-lg font-medium px-0.5 shrink-0">
|
||||
<div class="text-lg font-normal px-0.5 shrink-0">
|
||||
{$i18n.t('Analytics')}
|
||||
</div>
|
||||
<div class="flex items-center gap-2 flex-wrap justify-end min-w-0">
|
||||
@@ -287,27 +287,27 @@
|
||||
{#if !loading}
|
||||
<div class="flex gap-3 text-xs text-gray-500 dark:text-gray-400 px-0.5 pb-2">
|
||||
<span
|
||||
><span class="font-medium text-gray-900 dark:text-gray-300"
|
||||
><span class="font-normal text-gray-900 dark:text-gray-300"
|
||||
>{summary.total_messages.toLocaleString()}</span
|
||||
>
|
||||
{$i18n.t('messages')}</span
|
||||
>
|
||||
<Tooltip content={$i18n.t('Token counts are estimates and may not reflect actual API usage')}>
|
||||
<span class="cursor-help"
|
||||
><span class="font-medium text-gray-900 dark:text-gray-300"
|
||||
><span class="font-normal text-gray-900 dark:text-gray-300"
|
||||
>{formatNumber(totalTokens.total)}</span
|
||||
>
|
||||
{$i18n.t('tokens')}</span
|
||||
>
|
||||
</Tooltip>
|
||||
<span
|
||||
><span class="font-medium text-gray-900 dark:text-gray-300"
|
||||
><span class="font-normal text-gray-900 dark:text-gray-300"
|
||||
>{summary.total_chats.toLocaleString()}</span
|
||||
>
|
||||
{$i18n.t('chats')}</span
|
||||
>
|
||||
<span
|
||||
><span class="font-medium text-gray-900 dark:text-gray-300">{summary.total_users}</span>
|
||||
><span class="font-normal text-gray-900 dark:text-gray-300">{summary.total_users}</span>
|
||||
{$i18n.t('users')}</span
|
||||
>
|
||||
</div>
|
||||
@@ -328,7 +328,7 @@
|
||||
]}
|
||||
{@const periodMap = { '24h': 'hour', '7d': 'week', '30d': 'month', '90d': 'year', all: 'all' }}
|
||||
<div class="mb-4">
|
||||
<div class="text-xs font-medium text-gray-600 dark:text-gray-400 mb-2 px-0.5">
|
||||
<div class="text-xs font-normal text-gray-600 dark:text-gray-400 mb-2 px-0.5">
|
||||
{selectedPeriod === '24h' ? $i18n.t('Hourly Messages') : $i18n.t('Daily Messages')}
|
||||
</div>
|
||||
<ChartLine
|
||||
@@ -350,7 +350,7 @@
|
||||
<div class="grid md:grid-cols-2 gap-4">
|
||||
<!-- Model Usage Table -->
|
||||
<div>
|
||||
<div class="text-xs font-medium text-gray-700 dark:text-gray-300 mb-1 px-0.5">
|
||||
<div class="text-xs font-normal text-gray-700 dark:text-gray-300 mb-1 px-0.5">
|
||||
{$i18n.t('Model Usage')}
|
||||
</div>
|
||||
<div class="scrollbar-hidden relative whitespace-nowrap overflow-x-auto max-w-full">
|
||||
@@ -478,7 +478,7 @@
|
||||
}}
|
||||
>
|
||||
<td class="px-3 py-1 text-gray-400">{idx + 1}</td>
|
||||
<td class="px-3 py-1 font-medium text-gray-900 dark:text-white">
|
||||
<td class="px-3 py-1 font-normal text-gray-900 dark:text-white">
|
||||
<div class="flex items-center gap-2">
|
||||
<img
|
||||
src="{WEBUI_API_BASE_URL}/models/model/profile/image?id={model.model_id}"
|
||||
@@ -518,7 +518,7 @@
|
||||
|
||||
<!-- User Activity Table -->
|
||||
<div>
|
||||
<div class="text-xs font-medium text-gray-700 dark:text-gray-300 mb-1 px-0.5">
|
||||
<div class="text-xs font-normal text-gray-700 dark:text-gray-300 mb-1 px-0.5">
|
||||
{$i18n.t('User Activity')}
|
||||
</div>
|
||||
<div class="scrollbar-hidden relative whitespace-nowrap overflow-x-auto max-w-full">
|
||||
@@ -586,7 +586,7 @@
|
||||
{#each sortedUsers as user, idx (user.user_id)}
|
||||
<tr class="bg-white dark:bg-gray-900 dark:border-gray-850 text-xs">
|
||||
<td class="px-3 py-1 text-gray-400">{idx + 1}</td>
|
||||
<td class="px-3 py-1 font-medium text-gray-900 dark:text-white">
|
||||
<td class="px-3 py-1 font-normal text-gray-900 dark:text-white">
|
||||
<div class="flex items-center gap-2">
|
||||
<img
|
||||
src="{WEBUI_API_BASE_URL}/users/{user.user_id}/profile/image"
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<div
|
||||
class="pt-0.5 pb-1 gap-1 flex flex-col md:flex-row justify-between sticky top-0 z-10 bg-white dark:bg-gray-900"
|
||||
>
|
||||
<div class="flex items-center text-xl font-medium px-0.5 gap-2 shrink-0">
|
||||
<div class="flex items-center text-xl font-normal px-0.5 gap-2 shrink-0">
|
||||
{$i18n.t('Model Usage')}
|
||||
<span class="text-lg text-gray-500">{totalMessages} {$i18n.t('messages')}</span>
|
||||
</div>
|
||||
@@ -137,7 +137,7 @@
|
||||
<tr
|
||||
class="bg-white dark:bg-gray-900 text-xs hover:bg-gray-50 dark:hover:bg-gray-850/50 transition"
|
||||
>
|
||||
<td class="px-3 py-1.5 font-medium text-gray-900 dark:text-white">
|
||||
<td class="px-3 py-1.5 font-normal text-gray-900 dark:text-white">
|
||||
{idx + 1}
|
||||
</td>
|
||||
<td class="px-3 py-1.5">
|
||||
@@ -150,13 +150,13 @@
|
||||
e.target.src = '/favicon.png';
|
||||
}}
|
||||
/>
|
||||
<span class="font-medium text-gray-800 dark:text-gray-200">{model.name}</span>
|
||||
<span class="font-normal text-gray-800 dark:text-gray-200">{model.name}</span>
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-3 py-1.5 text-right font-medium text-gray-900 dark:text-white">
|
||||
<td class="px-3 py-1.5 text-right font-normal text-gray-900 dark:text-white">
|
||||
{model.count.toLocaleString()}
|
||||
</td>
|
||||
<td class="px-3 py-1.5 text-right font-medium text-blue-500">
|
||||
<td class="px-3 py-1.5 text-right font-normal text-blue-500">
|
||||
{((model.count / totalMessages) * 100).toFixed(1)}%
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
<div
|
||||
class="pt-0.5 pb-1 gap-1 flex flex-col md:flex-row justify-between sticky top-0 z-10 bg-white dark:bg-gray-900"
|
||||
>
|
||||
<div class="flex items-center text-xl font-medium px-0.5 gap-2 shrink-0">
|
||||
<div class="flex items-center text-xl font-normal px-0.5 gap-2 shrink-0">
|
||||
{$i18n.t('User Activity')}
|
||||
<span class="text-lg text-gray-500">{userStats.length} {$i18n.t('users')}</span>
|
||||
</div>
|
||||
@@ -132,18 +132,18 @@
|
||||
<tr
|
||||
class="bg-white dark:bg-gray-900 text-xs hover:bg-gray-50 dark:hover:bg-gray-850/50 transition"
|
||||
>
|
||||
<td class="px-3 py-1.5 font-medium text-gray-900 dark:text-white">
|
||||
<td class="px-3 py-1.5 font-normal text-gray-900 dark:text-white">
|
||||
{idx + 1}
|
||||
</td>
|
||||
<td class="px-3 py-1.5">
|
||||
<span class="font-medium text-gray-800 dark:text-gray-200 font-mono text-xs">
|
||||
<span class="font-normal text-gray-800 dark:text-gray-200 font-mono text-xs">
|
||||
{user.user_id.substring(0, 8)}...
|
||||
</span>
|
||||
</td>
|
||||
<td class="px-3 py-1.5 text-right font-medium text-gray-900 dark:text-white">
|
||||
<td class="px-3 py-1.5 text-right font-normal text-gray-900 dark:text-white">
|
||||
{user.count.toLocaleString()}
|
||||
</td>
|
||||
<td class="px-3 py-1.5 text-right font-medium text-blue-500">
|
||||
<td class="px-3 py-1.5 text-right font-normal text-blue-500">
|
||||
{((user.count / totalMessages) * 100).toFixed(1)}%
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
<div class="flex flex-col lg:flex-row w-full h-full pb-2 lg:space-x-4">
|
||||
<div
|
||||
id="users-tabs-container"
|
||||
class="tabs mx-[16px] lg:mx-0 lg:px-[16px] flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-50 dark:text-gray-200 text-sm font-medium text-left scrollbar-none"
|
||||
class="tabs mx-[16px] lg:mx-0 lg:px-[16px] flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-50 dark:text-gray-200 text-sm font-normal text-left scrollbar-none"
|
||||
>
|
||||
<a
|
||||
id="leaderboard"
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
{#if selectedFeedback}
|
||||
<div>
|
||||
<div class="flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
|
||||
<div class="text-lg font-medium self-center">
|
||||
<div class="text-lg font-normal self-center">
|
||||
{$i18n.t('Feedback Details')}
|
||||
</div>
|
||||
<button class="self-center" on:click={close} aria-label="Close">
|
||||
@@ -131,7 +131,7 @@
|
||||
|
||||
<div class="flex justify-end pt-2">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="button"
|
||||
on:click={close}
|
||||
>
|
||||
|
||||
@@ -218,12 +218,12 @@
|
||||
{:else}
|
||||
<div class="flex flex-col gap-1 mt-0.5 mb-3">
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="flex items-center md:self-center text-xl font-medium px-0.5 gap-2 shrink-0">
|
||||
<div class="flex items-center md:self-center text-xl font-normal px-0.5 gap-2 shrink-0">
|
||||
<div>
|
||||
{$i18n.t('Feedback History')}
|
||||
</div>
|
||||
|
||||
<div class="text-lg font-medium text-gray-500 dark:text-gray-500">
|
||||
<div class="text-lg font-normal text-gray-500 dark:text-gray-500">
|
||||
{total}
|
||||
</div>
|
||||
</div>
|
||||
@@ -234,7 +234,7 @@
|
||||
<button
|
||||
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-200 transition"
|
||||
>
|
||||
<div class="self-center font-medium line-clamp-1">
|
||||
<div class="self-center font-normal line-clamp-1">
|
||||
{$i18n.t('Export')}
|
||||
</div>
|
||||
<ChevronDown className="size-3" strokeWidth="2.5" />
|
||||
@@ -319,7 +319,7 @@
|
||||
<div class="w-full h-full flex flex-col justify-center items-center my-16 mb-24">
|
||||
<div class="max-w-md text-center">
|
||||
<div class="text-3xl mb-3">😕</div>
|
||||
<div class="text-lg font-medium mb-1">{$i18n.t('No feedback found')}</div>
|
||||
<div class="text-lg font-normal mb-1">{$i18n.t('No feedback found')}</div>
|
||||
<div class="text-gray-500 text-center text-xs">
|
||||
{$i18n.t('Try adjusting your search or filter to find what you are looking for.')}
|
||||
</div>
|
||||
@@ -432,7 +432,7 @@
|
||||
class="bg-white dark:bg-gray-900 dark:border-gray-850 text-xs cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-850/50 transition rounded-xl"
|
||||
on:click={() => openFeedbackModal(feedback)}
|
||||
>
|
||||
<td class=" py-0.5 text-right font-medium">
|
||||
<td class=" py-0.5 text-right font-normal">
|
||||
<div class="flex justify-center">
|
||||
<Tooltip content={feedback?.user?.name}>
|
||||
<div class="shrink-0">
|
||||
@@ -452,7 +452,7 @@
|
||||
{#if feedback.data?.sibling_model_ids}
|
||||
<Tooltip content={feedback.data?.model_id} placement="top-start">
|
||||
<div
|
||||
class="font-medium text-gray-600 dark:text-gray-400 flex-1 line-clamp-1"
|
||||
class="font-normal text-gray-600 dark:text-gray-400 flex-1 line-clamp-1"
|
||||
>
|
||||
{feedback.data?.model_id}
|
||||
</div>
|
||||
@@ -476,7 +476,7 @@
|
||||
{:else}
|
||||
<Tooltip content={feedback.data?.model_id} placement="top-start">
|
||||
<div
|
||||
class="text-sm font-medium text-gray-600 dark:text-gray-400 flex-1 py-1.5 line-clamp-1"
|
||||
class="text-sm font-normal text-gray-600 dark:text-gray-400 flex-1 py-1.5 line-clamp-1"
|
||||
>
|
||||
{feedback.data?.model_id}
|
||||
</div>
|
||||
@@ -487,7 +487,7 @@
|
||||
</td>
|
||||
|
||||
{#if feedback?.data?.rating}
|
||||
<td class="px-3 py-1 text-right font-medium text-gray-900 dark:text-white w-max">
|
||||
<td class="px-3 py-1 text-right font-normal text-gray-900 dark:text-white w-max">
|
||||
<div class=" flex justify-end">
|
||||
{#if feedback?.data?.rating.toString() === '1'}
|
||||
<Badge type="info" content={$i18n.t('Won')} />
|
||||
@@ -500,11 +500,11 @@
|
||||
</td>
|
||||
{/if}
|
||||
|
||||
<td class=" px-3 py-1 text-right font-medium">
|
||||
<td class=" px-3 py-1 text-right font-normal">
|
||||
{dayjs(feedback.updated_at * 1000).fromNow()}
|
||||
</td>
|
||||
|
||||
<td class=" px-3 py-1 text-right font-medium" on:click={(e) => e.stopPropagation()}>
|
||||
<td class=" px-3 py-1 text-right font-normal" on:click={(e) => e.stopPropagation()}>
|
||||
<FeedbackMenu
|
||||
on:delete={(e) => {
|
||||
deleteFeedbackHandler(feedback.id);
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
<div
|
||||
class="pt-0.5 pb-1 gap-1 flex flex-col md:flex-row justify-between sticky top-0 z-10 bg-white dark:bg-gray-900"
|
||||
>
|
||||
<div class="flex items-center text-xl font-medium px-0.5 gap-2 shrink-0">
|
||||
<div class="flex items-center text-xl font-normal px-0.5 gap-2 shrink-0">
|
||||
{$i18n.t('Leaderboard')}
|
||||
<span class="text-lg text-gray-500">{rankedModels.length}</span>
|
||||
</div>
|
||||
@@ -188,7 +188,7 @@
|
||||
class="bg-white dark:bg-gray-900 text-xs group cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-850/50 transition"
|
||||
on:click={() => openModal(model)}
|
||||
>
|
||||
<td class="px-3 py-1.5 font-medium text-gray-900 dark:text-white">
|
||||
<td class="px-3 py-1.5 font-normal text-gray-900 dark:text-white">
|
||||
{model.rating !== '-' ? idx + 1 : '-'}
|
||||
</td>
|
||||
<td class="px-3 py-1.5">
|
||||
@@ -202,16 +202,16 @@
|
||||
}}
|
||||
/>
|
||||
<Tooltip content={`${model.name} (${model.id})`} placement="top-start">
|
||||
<span class="font-medium text-gray-800 dark:text-gray-200 line-clamp-1"
|
||||
<span class="font-normal text-gray-800 dark:text-gray-200 line-clamp-1"
|
||||
>{model.name}</span
|
||||
>
|
||||
</Tooltip>
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-3 py-1.5 text-right font-medium text-gray-900 dark:text-white">
|
||||
<td class="px-3 py-1.5 text-right font-normal text-gray-900 dark:text-white">
|
||||
{model.rating}
|
||||
</td>
|
||||
<td class="px-3 py-1.5 text-right font-medium text-green-500 w-10">
|
||||
<td class="px-3 py-1.5 text-right font-normal text-green-500 w-10">
|
||||
{#if model.stats.won === '-'}-{:else}
|
||||
<span class="hidden group-hover:inline"
|
||||
>{((Number(model.stats.won) / model.stats.count) * 100).toFixed(1)}%</span
|
||||
@@ -219,7 +219,7 @@
|
||||
<span class="group-hover:hidden">{model.stats.won}</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class="px-3 py-1.5 text-right font-medium text-red-500 w-10">
|
||||
<td class="px-3 py-1.5 text-right font-normal text-red-500 w-10">
|
||||
{#if model.stats.lost === '-'}-{:else}
|
||||
<span class="hidden group-hover:inline"
|
||||
>{((Number(model.stats.lost) / model.stats.count) * 100).toFixed(1)}%</span
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
{#if model}
|
||||
<div class="flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
|
||||
<Tooltip content={`${model.name} (${model.id})`} placement="top-start">
|
||||
<div class="text-lg font-medium self-center line-clamp-1">
|
||||
<div class="text-lg font-normal self-center line-clamp-1">
|
||||
{model.name}
|
||||
</div>
|
||||
</Tooltip>
|
||||
@@ -75,7 +75,7 @@
|
||||
<!-- Activity Chart -->
|
||||
<div class="mb-4">
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<div class="text-xs text-gray-500 font-medium uppercase tracking-wide">
|
||||
<div class="text-xs text-gray-500 font-normal uppercase tracking-wide">
|
||||
{$i18n.t('Activity')}
|
||||
</div>
|
||||
<div
|
||||
@@ -84,7 +84,7 @@
|
||||
{#each TIME_RANGES as range}
|
||||
<button
|
||||
type="button"
|
||||
class="rounded-full transition-all duration-200 px-2.5 py-0.5 text-xs font-medium {selectedRange ===
|
||||
class="rounded-full transition-all duration-200 px-2.5 py-0.5 text-xs font-normal {selectedRange ===
|
||||
range.key
|
||||
? 'bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white'
|
||||
: 'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200'}"
|
||||
@@ -103,14 +103,14 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="text-xs text-gray-500 mb-2 font-medium uppercase tracking-wide">
|
||||
<div class="text-xs text-gray-500 mb-2 font-normal uppercase tracking-wide">
|
||||
{$i18n.t('Tags')}
|
||||
</div>
|
||||
{#if topTags.length}
|
||||
<div class="flex flex-wrap gap-1 -mx-1">
|
||||
{#each topTags as tagInfo}
|
||||
<span class="px-2 py-0.5 rounded-full bg-gray-100 dark:bg-gray-850 text-xs">
|
||||
{tagInfo.tag} <span class="text-gray-500 font-medium">{tagInfo.count}</span>
|
||||
{tagInfo.tag} <span class="text-gray-500 font-normal">{tagInfo.count}</span>
|
||||
</span>
|
||||
{/each}
|
||||
</div>
|
||||
@@ -121,7 +121,7 @@
|
||||
|
||||
<div class="flex justify-end pt-2">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="button"
|
||||
on:click={close}
|
||||
>
|
||||
|
||||
@@ -285,12 +285,12 @@
|
||||
/>
|
||||
|
||||
<div class="flex justify-between items-center w-full">
|
||||
<div class="flex items-center md:self-center text-xl font-medium px-0.5 gap-2 shrink-0">
|
||||
<div class="flex items-center md:self-center text-xl font-normal px-0.5 gap-2 shrink-0">
|
||||
<div>
|
||||
{$i18n.t('Functions')}
|
||||
</div>
|
||||
|
||||
<div class="text-lg font-medium text-gray-500 dark:text-gray-500">
|
||||
<div class="text-lg font-normal text-gray-500 dark:text-gray-500">
|
||||
{filteredItems.length}
|
||||
</div>
|
||||
</div>
|
||||
@@ -303,7 +303,7 @@
|
||||
functionsImportInputElement.click();
|
||||
}}
|
||||
>
|
||||
<div class=" self-center font-medium line-clamp-1">
|
||||
<div class=" self-center font-normal line-clamp-1">
|
||||
{$i18n.t('Import')}
|
||||
</div>
|
||||
</button>
|
||||
@@ -325,7 +325,7 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<div class=" self-center font-medium line-clamp-1">
|
||||
<div class=" self-center font-normal line-clamp-1">
|
||||
{$i18n.t('Export')}
|
||||
</div>
|
||||
</button>
|
||||
@@ -340,7 +340,7 @@
|
||||
}}
|
||||
>
|
||||
<div
|
||||
class="cursor-pointer px-2 py-1.5 rounded-xl bg-black text-white dark:bg-white dark:text-black transition font-medium text-sm flex items-center"
|
||||
class="cursor-pointer px-2 py-1.5 rounded-xl bg-black text-white dark:bg-white dark:text-black transition font-normal text-sm flex items-center"
|
||||
>
|
||||
<Plus className="size-3" strokeWidth="2.5" />
|
||||
|
||||
@@ -432,7 +432,7 @@
|
||||
<Tooltip content={func.id} placement="top-start">
|
||||
<div class=" flex items-center gap-1.5">
|
||||
<div
|
||||
class=" text-xs font-semibold px-1 rounded-sm uppercase line-clamp-1 bg-gray-500/20 text-gray-700 dark:text-gray-200"
|
||||
class=" text-xs font-normal px-1 rounded-sm uppercase line-clamp-1 bg-gray-500/20 text-gray-700 dark:text-gray-200"
|
||||
>
|
||||
{func.type}
|
||||
</div>
|
||||
@@ -441,7 +441,7 @@
|
||||
{func.name}
|
||||
</div>
|
||||
{#if func?.meta?.manifest?.version}
|
||||
<div class=" text-gray-500 text-xs font-medium shrink-0">
|
||||
<div class=" text-gray-500 text-xs font-normal shrink-0">
|
||||
v{func?.meta?.manifest?.version ?? ''}
|
||||
</div>
|
||||
{/if}
|
||||
@@ -590,7 +590,7 @@
|
||||
<div class=" w-full h-full flex flex-col justify-center items-center my-16 mb-24">
|
||||
<div class="max-w-md text-center">
|
||||
<div class=" text-3xl mb-3">😕</div>
|
||||
<div class=" text-lg font-medium mb-1">{$i18n.t('No functions found')}</div>
|
||||
<div class=" text-lg font-normal mb-1">{$i18n.t('No functions found')}</div>
|
||||
<div class=" text-gray-500 text-center text-xs">
|
||||
{$i18n.t('Try adjusting your search or filter to find what you are looking for.')}
|
||||
</div>
|
||||
@@ -622,7 +622,7 @@
|
||||
}}
|
||||
>
|
||||
<div class=" text-sm text-gray-500 truncate">
|
||||
{$i18n.t('This will delete')} <span class=" font-semibold">{selectedFunction.name}</span>.
|
||||
{$i18n.t('This will delete')} <span class=" font-normal">{selectedFunction.name}</span>.
|
||||
</div>
|
||||
</DeleteConfirmDialog>
|
||||
|
||||
|
||||
@@ -366,7 +366,7 @@ class Pipe:
|
||||
<div class="flex-1">
|
||||
<Tooltip content={$i18n.t('e.g. My Filter')} placement="top-start">
|
||||
<input
|
||||
class="w-full text-2xl font-medium bg-transparent outline-hidden font-primary"
|
||||
class="w-full text-2xl font-normal bg-transparent outline-hidden "
|
||||
type="text"
|
||||
placeholder={$i18n.t('Function Name')}
|
||||
bind:value={name}
|
||||
@@ -455,16 +455,16 @@ class Pipe:
|
||||
<div class="pb-3 flex justify-between">
|
||||
<div class="flex-1 pr-3">
|
||||
<div class="text-xs text-gray-500 line-clamp-2">
|
||||
<span class=" font-semibold dark:text-gray-200">{$i18n.t('Warning:')}</span>
|
||||
<span class=" font-normal dark:text-gray-200">{$i18n.t('Warning:')}</span>
|
||||
{$i18n.t('Functions allow arbitrary code execution.')} <br />—
|
||||
<span class=" font-medium dark:text-gray-400"
|
||||
<span class=" font-normal dark:text-gray-400"
|
||||
>{$i18n.t(`don't install random functions from sources you don't trust.`)}</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -331,7 +331,7 @@
|
||||
<div class="flex flex-col lg:flex-row w-full h-full pb-2 lg:space-x-4">
|
||||
<div
|
||||
id="admin-settings-tabs-container"
|
||||
class="tabs mx-[16px] lg:mx-0 lg:px-[16px] flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-50 dark:text-gray-200 text-sm font-medium text-left scrollbar-none"
|
||||
class="tabs mx-[16px] lg:mx-0 lg:px-[16px] flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-50 dark:text-gray-200 text-sm font-normal text-left scrollbar-none"
|
||||
>
|
||||
<div
|
||||
class="hidden lg:flex w-full rounded-full px-2.5 gap-2 bg-gray-100/80 dark:bg-gray-850/80 backdrop-blur-2xl my-1 -mx-1 mt-1.5"
|
||||
|
||||
@@ -236,13 +236,13 @@
|
||||
<div class=" space-y-3 overflow-y-scroll scrollbar-hidden h-full">
|
||||
<div class="flex flex-col gap-3">
|
||||
<div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Speech-to-Text')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Speech-to-Text')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
{#if STT_ENGINE !== 'web'}
|
||||
<div class="mb-2">
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('Supported MIME Types')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('Supported MIME Types')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -258,7 +258,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2 py-0.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Speech-to-Text Engine')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Speech-to-Text Engine')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<select
|
||||
class="cursor-pointer w-fit pr-8 rounded-sm px-2 p-1 text-xs bg-transparent outline-hidden text-right"
|
||||
@@ -292,7 +292,7 @@
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2 py-0.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Request Format')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Request Format')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<select
|
||||
class="cursor-pointer w-fit pr-8 rounded-sm px-2 p-1 text-xs bg-transparent outline-hidden text-right"
|
||||
@@ -307,7 +307,7 @@
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('STT Model')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('STT Model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -333,7 +333,7 @@
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('STT Model')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('STT Model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -367,7 +367,7 @@
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('Azure Region')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('Azure Region')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -380,7 +380,7 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('Language Locales')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('Language Locales')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -393,7 +393,7 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('Endpoint URL')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('Endpoint URL')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -406,7 +406,7 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('Max Speakers')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('Max Speakers')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -435,7 +435,7 @@
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('STT Model')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('STT Model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -461,7 +461,7 @@
|
||||
|
||||
<div>
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<div class="text-xs font-medium">{$i18n.t('Use Chat Completions API')}</div>
|
||||
<div class="text-xs font-normal">{$i18n.t('Use Chat Completions API')}</div>
|
||||
<label class="relative inline-flex items-center cursor-pointer">
|
||||
<input
|
||||
type="checkbox"
|
||||
@@ -481,7 +481,7 @@
|
||||
</div>
|
||||
{:else if STT_ENGINE === ''}
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('STT Model')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('STT Model')}</div>
|
||||
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1 mr-2">
|
||||
@@ -539,12 +539,12 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Text-to-Speech')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Text-to-Speech')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2 py-0.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Text-to-Speech Engine')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Text-to-Speech Engine')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<select
|
||||
class="w-fit pr-8 cursor-pointer rounded-sm px-2 p-1 text-xs bg-transparent outline-hidden text-right"
|
||||
@@ -605,7 +605,7 @@
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('Azure Region')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('Azure Region')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -618,7 +618,7 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('Endpoint URL')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('Endpoint URL')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -648,7 +648,7 @@
|
||||
<div class="mb-2">
|
||||
{#if TTS_ENGINE === ''}
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('TTS Voice')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('TTS Voice')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<select
|
||||
@@ -669,7 +669,7 @@
|
||||
</div>
|
||||
{:else if TTS_ENGINE === 'transformers'}
|
||||
<div>
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('TTS Model')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('TTS Model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -711,7 +711,7 @@
|
||||
{:else if TTS_ENGINE === 'openai'}
|
||||
<div class=" flex gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('TTS Voice')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('TTS Voice')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<TTSVoiceInput
|
||||
@@ -724,7 +724,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('TTS Model')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('TTS Model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -746,7 +746,7 @@
|
||||
|
||||
<div class="mt-2 mb-1 text-xs text-gray-400 dark:text-gray-500">
|
||||
<div class="w-full">
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('Additional Parameters')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('Additional Parameters')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<Textarea
|
||||
@@ -762,7 +762,7 @@
|
||||
{:else if TTS_ENGINE === 'elevenlabs'}
|
||||
<div class=" flex gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('TTS Voice')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('TTS Voice')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<TTSVoiceInput
|
||||
@@ -775,7 +775,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('TTS Model')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('TTS Model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -797,7 +797,7 @@
|
||||
{:else if TTS_ENGINE === 'azure'}
|
||||
<div class=" flex gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('TTS Voice')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('TTS Voice')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<TTSVoiceInput
|
||||
@@ -810,7 +810,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class=" mb-1.5 text-xs font-medium">
|
||||
<div class=" mb-1.5 text-xs font-normal">
|
||||
{$i18n.t('Output format')}
|
||||
<a
|
||||
href="https://learn.microsoft.com/en-us/azure/ai-services/speech-service/rest-text-to-speech?tabs=streaming#audio-outputs"
|
||||
@@ -834,7 +834,7 @@
|
||||
{:else if TTS_ENGINE === 'mistral'}
|
||||
<div class=" flex gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('TTS Voice')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('TTS Voice')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<TTSVoiceInput
|
||||
@@ -847,7 +847,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class=" mb-1.5 text-xs font-medium">{$i18n.t('TTS Model')}</div>
|
||||
<div class=" mb-1.5 text-xs font-normal">{$i18n.t('TTS Model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
@@ -870,7 +870,7 @@
|
||||
</div>
|
||||
|
||||
<div class="pt-0.5 flex w-full justify-between">
|
||||
<div class="self-center text-xs font-medium">{$i18n.t('Response splitting')}</div>
|
||||
<div class="self-center text-xs font-normal">{$i18n.t('Response splitting')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<select
|
||||
class="w-fit pr-8 cursor-pointer rounded-sm px-2 p-1 text-xs bg-transparent outline-hidden text-right"
|
||||
@@ -893,9 +893,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-end text-sm font-medium">
|
||||
<div class="flex justify-end text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -114,12 +114,12 @@
|
||||
<div class="space-y-3 overflow-y-scroll scrollbar-hidden h-full">
|
||||
{#if adminConfig !== null}
|
||||
<div class="mb-3">
|
||||
<div class="mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('User Access')}</div>
|
||||
<div class="mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('User Access')}</div>
|
||||
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Default User Role')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Default User Role')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<select
|
||||
class="w-fit pr-8 rounded-sm px-2 text-xs bg-transparent outline-hidden text-right"
|
||||
@@ -134,7 +134,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Default Group')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Default Group')}</div>
|
||||
<div class="flex items-center relative max-w-48">
|
||||
<select
|
||||
class="w-full pr-8 rounded-sm px-2 text-xs bg-transparent outline-hidden text-right truncate"
|
||||
@@ -150,20 +150,20 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Enable New Sign Ups')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Enable New Sign Ups')}</div>
|
||||
|
||||
<Switch bind:state={adminConfig.ENABLE_SIGNUP} />
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Enable API Keys')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Enable API Keys')}</div>
|
||||
|
||||
<Switch bind:state={adminConfig.ENABLE_API_KEYS} />
|
||||
</div>
|
||||
|
||||
{#if adminConfig?.ENABLE_API_KEYS}
|
||||
<div class="mb-2.5 flex w-full justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('API Key Endpoint Restrictions')}
|
||||
</div>
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
{#if adminConfig?.ENABLE_API_KEYS_ENDPOINT_RESTRICTIONS}
|
||||
<div class=" flex w-full flex-col pr-2 mb-2.5">
|
||||
<div class=" text-xs font-medium">
|
||||
<div class=" text-xs font-normal">
|
||||
{$i18n.t('Allowed Endpoints')}
|
||||
</div>
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
<a
|
||||
href="https://docs.openwebui.com/reference/api-endpoints"
|
||||
target="_blank"
|
||||
class=" text-gray-300 font-medium underline"
|
||||
class=" text-gray-300 font-normal underline"
|
||||
>
|
||||
{$i18n.t('To learn more about available endpoints, visit our documentation.')}
|
||||
</a>
|
||||
@@ -198,7 +198,7 @@
|
||||
|
||||
<div class=" mb-2.5 w-full justify-between">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('JWT Expiration')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('JWT Expiration')}</div>
|
||||
</div>
|
||||
|
||||
<div class="flex mt-2 space-x-2">
|
||||
@@ -212,7 +212,7 @@
|
||||
|
||||
<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">
|
||||
{$i18n.t('Valid time units:')}
|
||||
<span class=" text-gray-300 font-medium"
|
||||
<span class=" text-gray-300 font-normal"
|
||||
>{$i18n.t("'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.")}</span
|
||||
>
|
||||
</div>
|
||||
@@ -223,7 +223,7 @@
|
||||
class=" bg-yellow-500/20 text-yellow-700 dark:text-yellow-200 rounded-lg px-3 py-2"
|
||||
>
|
||||
<div>
|
||||
<span class=" font-medium">{$i18n.t('Warning')}:</span>
|
||||
<span class=" font-normal">{$i18n.t('Warning')}:</span>
|
||||
<span
|
||||
><a
|
||||
href="https://docs.openwebui.com/reference/env-configuration#jwt_expires_in"
|
||||
@@ -237,12 +237,12 @@
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Pending Accounts')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Pending Accounts')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Show Admin Details in Account Pending Overlay')}
|
||||
</div>
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
{#if adminConfig.SHOW_ADMIN_DETAILS}
|
||||
<div class="mb-2.5 w-full justify-between">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Admin Contact Email')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Admin Contact Email')}</div>
|
||||
</div>
|
||||
|
||||
<div class="flex mt-2 space-x-2">
|
||||
@@ -267,7 +267,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" self-center text-xs font-medium mb-2">
|
||||
<div class=" self-center text-xs font-normal mb-2">
|
||||
{$i18n.t('Pending User Overlay Title')}
|
||||
</div>
|
||||
<Textarea
|
||||
@@ -279,7 +279,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" self-center text-xs font-medium mb-2">
|
||||
<div class=" self-center text-xs font-normal mb-2">
|
||||
{$i18n.t('Pending User Overlay Content')}
|
||||
</div>
|
||||
<Textarea
|
||||
@@ -295,7 +295,7 @@
|
||||
<div class=" space-y-3">
|
||||
<div class="mt-2 space-y-2 pr-1.5">
|
||||
<div class="flex justify-between items-center text-sm">
|
||||
<div class=" font-medium">{$i18n.t('LDAP')}</div>
|
||||
<div class=" font-normal">{$i18n.t('LDAP')}</div>
|
||||
|
||||
<div class="mt-1">
|
||||
<Switch bind:state={ENABLE_LDAP} />
|
||||
@@ -306,7 +306,7 @@
|
||||
<div class="flex flex-col gap-1">
|
||||
<div class="flex w-full gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Label')}
|
||||
</div>
|
||||
<input
|
||||
@@ -320,7 +320,7 @@
|
||||
</div>
|
||||
<div class="flex w-full gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Host')}
|
||||
</div>
|
||||
<input
|
||||
@@ -331,7 +331,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Port')}
|
||||
</div>
|
||||
<Tooltip
|
||||
@@ -350,7 +350,7 @@
|
||||
</div>
|
||||
<div class="flex w-full gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Application DN')}
|
||||
</div>
|
||||
<Tooltip
|
||||
@@ -365,7 +365,7 @@
|
||||
</Tooltip>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Application DN Password')}
|
||||
</div>
|
||||
<SensitiveInput
|
||||
@@ -377,7 +377,7 @@
|
||||
</div>
|
||||
<div class="flex w-full gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Attribute for Mail')}
|
||||
</div>
|
||||
<Tooltip
|
||||
@@ -397,7 +397,7 @@
|
||||
</div>
|
||||
<div class="flex w-full gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Attribute for Username')}
|
||||
</div>
|
||||
<Tooltip
|
||||
@@ -417,7 +417,7 @@
|
||||
</div>
|
||||
<div class="flex w-full gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Search Base')}
|
||||
</div>
|
||||
<Tooltip content={$i18n.t('The base to search for users')} placement="top-start">
|
||||
@@ -432,7 +432,7 @@
|
||||
</div>
|
||||
<div class="flex w-full gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Search Filters')}
|
||||
</div>
|
||||
<input
|
||||
@@ -444,7 +444,7 @@
|
||||
</div>
|
||||
<div class="text-xs text-gray-400 dark:text-gray-500">
|
||||
<a
|
||||
class=" text-gray-300 font-medium underline"
|
||||
class=" text-gray-300 font-normal underline"
|
||||
href="https://ldap.com/ldap-filters/"
|
||||
target="_blank"
|
||||
>
|
||||
@@ -453,7 +453,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<div class="flex justify-between items-center text-sm">
|
||||
<div class=" font-medium">{$i18n.t('TLS')}</div>
|
||||
<div class=" font-normal">{$i18n.t('TLS')}</div>
|
||||
|
||||
<div class="mt-1">
|
||||
<Switch bind:state={LDAP_SERVER.use_tls} />
|
||||
@@ -462,7 +462,7 @@
|
||||
{#if LDAP_SERVER.use_tls}
|
||||
<div class="flex w-full gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1 mt-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1 mt-1">
|
||||
{$i18n.t('Certificate Path')}
|
||||
</div>
|
||||
<input
|
||||
@@ -473,7 +473,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between items-center text-xs">
|
||||
<div class=" font-medium">{$i18n.t('Validate certificate')}</div>
|
||||
<div class=" font-normal">{$i18n.t('Validate certificate')}</div>
|
||||
|
||||
<div class="mt-1">
|
||||
<Switch bind:state={LDAP_SERVER.validate_cert} />
|
||||
@@ -481,7 +481,7 @@
|
||||
</div>
|
||||
<div class="flex w-full gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Ciphers')}
|
||||
</div>
|
||||
<Tooltip content={$i18n.t('Default to ALL')} placement="top-start">
|
||||
@@ -502,7 +502,7 @@
|
||||
</div>
|
||||
{#if oauthConfig}
|
||||
<div class="mb-3">
|
||||
<div class="mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('OAuth / OIDC')}</div>
|
||||
<div class="mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('OAuth / OIDC')}</div>
|
||||
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
@@ -510,7 +510,7 @@
|
||||
<div class="space-y-3">
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2">
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Provider Name')}
|
||||
</div>
|
||||
<input
|
||||
@@ -520,7 +520,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Provider URL')}
|
||||
</div>
|
||||
<input
|
||||
@@ -533,7 +533,7 @@
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2">
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Client ID')}
|
||||
</div>
|
||||
<input
|
||||
@@ -543,7 +543,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Client Secret')}
|
||||
</div>
|
||||
<SensitiveInput
|
||||
@@ -558,7 +558,7 @@
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2">
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Redirect URI')}
|
||||
</div>
|
||||
<input
|
||||
@@ -568,7 +568,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Scopes')}
|
||||
</div>
|
||||
<input
|
||||
@@ -581,7 +581,7 @@
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2">
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Email Claim')}
|
||||
</div>
|
||||
<input
|
||||
@@ -591,7 +591,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Username Claim')}
|
||||
</div>
|
||||
<input
|
||||
@@ -604,7 +604,7 @@
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2">
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Picture Claim')}
|
||||
</div>
|
||||
<input
|
||||
@@ -614,7 +614,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Sub Claim')}
|
||||
</div>
|
||||
<input
|
||||
@@ -626,28 +626,28 @@
|
||||
</div>
|
||||
|
||||
<div class="flex w-full justify-between pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Enable OAuth Signup')}
|
||||
</div>
|
||||
<Switch bind:state={oauthConfig.ENABLE_OAUTH_SIGNUP} />
|
||||
</div>
|
||||
|
||||
<div class="flex w-full justify-between pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Merge Accounts by Email')}
|
||||
</div>
|
||||
<Switch bind:state={oauthConfig.OAUTH_MERGE_ACCOUNTS_BY_EMAIL} />
|
||||
</div>
|
||||
|
||||
<div class="flex w-full justify-between pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Auto Redirect')}
|
||||
</div>
|
||||
<Switch bind:state={oauthConfig.OAUTH_AUTO_REDIRECT} />
|
||||
</div>
|
||||
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Allowed Domains')}
|
||||
</div>
|
||||
<input
|
||||
@@ -658,7 +658,7 @@
|
||||
</div>
|
||||
|
||||
<div class="flex w-full justify-between pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Enable Role Mapping')}
|
||||
</div>
|
||||
<Switch bind:state={oauthConfig.ENABLE_OAUTH_ROLE_MANAGEMENT} />
|
||||
@@ -667,7 +667,7 @@
|
||||
{#if oauthConfig.ENABLE_OAUTH_ROLE_MANAGEMENT}
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2">
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Roles Claim')}
|
||||
</div>
|
||||
<input
|
||||
@@ -677,7 +677,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Admin Roles')}
|
||||
</div>
|
||||
<input
|
||||
@@ -689,7 +689,7 @@
|
||||
</div>
|
||||
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Allowed Roles')}
|
||||
</div>
|
||||
<input
|
||||
@@ -701,7 +701,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="flex w-full justify-between pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Enable Group Mapping')}
|
||||
</div>
|
||||
<Switch bind:state={oauthConfig.ENABLE_OAUTH_GROUP_MANAGEMENT} />
|
||||
@@ -709,7 +709,7 @@
|
||||
|
||||
{#if oauthConfig.ENABLE_OAUTH_GROUP_MANAGEMENT}
|
||||
<div class="flex w-full justify-between pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Auto-Create Groups')}
|
||||
</div>
|
||||
<Switch bind:state={oauthConfig.ENABLE_OAUTH_GROUP_CREATION} />
|
||||
@@ -717,7 +717,7 @@
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2">
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Group Claim')}
|
||||
</div>
|
||||
<input
|
||||
@@ -727,7 +727,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Blocked Groups')}
|
||||
</div>
|
||||
<input
|
||||
@@ -740,21 +740,21 @@
|
||||
{/if}
|
||||
|
||||
<div class="flex w-full justify-between pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Update Email')}
|
||||
</div>
|
||||
<Switch bind:state={oauthConfig.OAUTH_UPDATE_EMAIL_ON_LOGIN} />
|
||||
</div>
|
||||
|
||||
<div class="flex w-full justify-between pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Update Name')}
|
||||
</div>
|
||||
<Switch bind:state={oauthConfig.OAUTH_UPDATE_NAME_ON_LOGIN} />
|
||||
</div>
|
||||
|
||||
<div class="flex w-full justify-between pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Update Picture')}
|
||||
</div>
|
||||
<Switch bind:state={oauthConfig.OAUTH_UPDATE_PICTURE_ON_LOGIN} />
|
||||
@@ -765,9 +765,9 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -41,13 +41,13 @@
|
||||
{#if config}
|
||||
<div>
|
||||
<div class="mb-3.5">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Code Execution')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Code Execution')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Enable Code Execution')}
|
||||
</div>
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
{#if config.ENABLE_CODE_EXECUTION}
|
||||
<div class="mb-2.5">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Code Execution Engine')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
{#if config.CODE_EXECUTION_ENGINE === 'jupyter'}
|
||||
<div class="mb-2.5 flex flex-col gap-1.5 w-full">
|
||||
<div class="text-xs font-medium">
|
||||
<div class="text-xs font-normal">
|
||||
{$i18n.t('Jupyter URL')}
|
||||
</div>
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
<div class="mb-2.5 flex flex-col gap-1.5 w-full">
|
||||
<div class=" flex gap-2 w-full items-center justify-between">
|
||||
<div class="text-xs font-medium">
|
||||
<div class="text-xs font-normal">
|
||||
{$i18n.t('Jupyter Auth')}
|
||||
</div>
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2 w-full items-center justify-between">
|
||||
<div class="text-xs font-medium">
|
||||
<div class="text-xs font-normal">
|
||||
{$i18n.t('Code Execution Timeout')}
|
||||
</div>
|
||||
|
||||
@@ -170,13 +170,13 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-3.5">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Code Interpreter')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Code Interpreter')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Enable Code Interpreter')}
|
||||
</div>
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
{#if config.ENABLE_CODE_INTERPRETER}
|
||||
<div class="mb-2.5">
|
||||
<div class=" flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Code Interpreter Engine')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -218,7 +218,7 @@
|
||||
|
||||
{#if config.CODE_INTERPRETER_ENGINE === 'jupyter'}
|
||||
<div class="mb-2.5 flex flex-col gap-1.5 w-full">
|
||||
<div class="text-xs font-medium">
|
||||
<div class="text-xs font-normal">
|
||||
{$i18n.t('Jupyter URL')}
|
||||
</div>
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
|
||||
<div class="mb-2.5 flex flex-col gap-1.5 w-full">
|
||||
<div class="flex gap-2 w-full items-center justify-between">
|
||||
<div class="text-xs font-medium">
|
||||
<div class="text-xs font-normal">
|
||||
{$i18n.t('Jupyter Auth')}
|
||||
</div>
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2 w-full items-center justify-between">
|
||||
<div class="text-xs font-medium">
|
||||
<div class="text-xs font-normal">
|
||||
{$i18n.t('Code Execution Timeout')}
|
||||
</div>
|
||||
|
||||
@@ -300,7 +300,7 @@
|
||||
|
||||
<div>
|
||||
<div class="py-0.5 w-full">
|
||||
<div class=" mb-2.5 text-xs font-medium">
|
||||
<div class=" mb-2.5 text-xs font-normal">
|
||||
{$i18n.t('Code Interpreter Prompt Template')}
|
||||
</div>
|
||||
|
||||
@@ -324,9 +324,9 @@
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -219,14 +219,14 @@
|
||||
<div class=" overflow-y-scroll scrollbar-hidden h-full">
|
||||
{#if ENABLE_OPENAI_API !== null && ENABLE_OLLAMA_API !== null && connectionsConfig !== null}
|
||||
<div class="mb-3.5">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('General')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('General')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="my-2">
|
||||
<div class="mt-2 space-y-2">
|
||||
<div class="flex justify-between items-center text-sm">
|
||||
<div class=" font-medium">{$i18n.t('OpenAI API')}</div>
|
||||
<div class=" font-normal">{$i18n.t('OpenAI API')}</div>
|
||||
|
||||
<div class="flex items-center">
|
||||
<div class="">
|
||||
@@ -243,7 +243,7 @@
|
||||
{#if ENABLE_OPENAI_API}
|
||||
<div class="">
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="font-medium text-xs">{$i18n.t('Manage OpenAI API Connections')}</div>
|
||||
<div class="font-normal text-xs">{$i18n.t('Manage OpenAI API Connections')}</div>
|
||||
|
||||
<Tooltip content={$i18n.t(`Add Connection`)}>
|
||||
<button
|
||||
@@ -292,7 +292,7 @@
|
||||
|
||||
<div class=" my-2">
|
||||
<div class="flex justify-between items-center text-sm mb-2">
|
||||
<div class=" font-medium">{$i18n.t('Ollama API')}</div>
|
||||
<div class=" font-normal">{$i18n.t('Ollama API')}</div>
|
||||
|
||||
<div class="mt-1">
|
||||
<Switch
|
||||
@@ -307,7 +307,7 @@
|
||||
{#if ENABLE_OLLAMA_API}
|
||||
<div class="">
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="font-medium text-xs">{$i18n.t('Manage Ollama API Connections')}</div>
|
||||
<div class="font-normal text-xs">{$i18n.t('Manage Ollama API Connections')}</div>
|
||||
|
||||
<Tooltip content={$i18n.t(`Add Connection`)}>
|
||||
<button
|
||||
@@ -350,7 +350,7 @@
|
||||
<div class="mt-1 text-xs text-gray-400 dark:text-gray-500">
|
||||
{$i18n.t('Trouble accessing Ollama?')}
|
||||
<a
|
||||
class=" text-gray-300 font-medium underline"
|
||||
class=" text-gray-300 font-normal underline"
|
||||
href="https://github.com/open-webui/open-webui#troubleshooting"
|
||||
target="_blank"
|
||||
>
|
||||
@@ -363,7 +363,7 @@
|
||||
|
||||
<div class="my-2">
|
||||
<div class="flex justify-between items-center text-sm">
|
||||
<div class=" font-medium">{$i18n.t('Direct Connections')}</div>
|
||||
<div class=" font-normal">{$i18n.t('Direct Connections')}</div>
|
||||
|
||||
<div class="flex items-center">
|
||||
<div class="">
|
||||
@@ -388,7 +388,7 @@
|
||||
|
||||
<div class="my-2">
|
||||
<div class="flex justify-between items-center text-sm">
|
||||
<div class=" text-xs font-medium">{$i18n.t('Cache Base Model List')}</div>
|
||||
<div class=" text-xs font-normal">{$i18n.t('Cache Base Model List')}</div>
|
||||
|
||||
<div class="flex items-center">
|
||||
<div class="">
|
||||
@@ -418,9 +418,9 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<div
|
||||
class="flex w-full justify-between items-center text-lg font-medium self-center font-primary"
|
||||
class="flex w-full justify-between items-center text-lg font-normal self-center "
|
||||
>
|
||||
<div class=" shrink-0">
|
||||
{$i18n.t('Manage Ollama')}
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
/>
|
||||
|
||||
<div>
|
||||
<div class="mb-1 text-sm font-medium">{$i18n.t('Config')}</div>
|
||||
<div class="mb-1 text-sm font-normal">{$i18n.t('Config')}</div>
|
||||
|
||||
<div>
|
||||
<div class="py-0.5 flex w-full justify-between">
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
{#if $config?.features.enable_admin_export ?? true}
|
||||
<div>
|
||||
<div class="mb-1 text-sm font-medium">{$i18n.t('Database')}</div>
|
||||
<div class="mb-1 text-sm font-normal">{$i18n.t('Database')}</div>
|
||||
|
||||
<div>
|
||||
<div class="py-0.5 flex w-full justify-between">
|
||||
|
||||
@@ -376,13 +376,13 @@
|
||||
<div class=" space-y-2.5 overflow-y-scroll scrollbar-hidden h-full pr-1.5">
|
||||
<div class="">
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('General')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('General')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2.5 flex flex-col w-full justify-between">
|
||||
<div class="flex w-full justify-between mb-1">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Content Extraction Engine')}
|
||||
</div>
|
||||
<div class="">
|
||||
@@ -406,7 +406,7 @@
|
||||
{#if RAGConfig.CONTENT_EXTRACTION_ENGINE === ''}
|
||||
<div class="flex w-full mt-1">
|
||||
<div class="flex-1 flex justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('PDF Extract Images (OCR)')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -417,7 +417,7 @@
|
||||
|
||||
<div class="flex w-full mt-2">
|
||||
<div class="flex-1 flex justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Page mode creates one document per page. Single mode combines all pages into one document for better chunking across page boundaries.'
|
||||
@@ -464,7 +464,7 @@
|
||||
|
||||
<div class="flex flex-col gap-2 mt-2">
|
||||
<div class=" flex flex-col w-full justify-between">
|
||||
<div class=" mb-1 text-xs font-medium">
|
||||
<div class=" mb-1 text-xs font-normal">
|
||||
{$i18n.t('Additional Config')}
|
||||
</div>
|
||||
<div class="flex w-full items-center relative">
|
||||
@@ -485,7 +485,7 @@
|
||||
</div>
|
||||
|
||||
<div class="flex justify-between w-full mt-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Significantly improves accuracy by using an LLM to enhance tables, forms, inline math, and layout detection. Will increase latency. Defaults to False.'
|
||||
@@ -500,7 +500,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between w-full mt-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t('Skip the cache and re-run the inference. Defaults to False.')}
|
||||
placement="top-start"
|
||||
@@ -513,7 +513,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between w-full mt-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Force OCR on all pages of the PDF. This can lead to worse results if you have good text in your PDFs. Defaults to False.'
|
||||
@@ -528,7 +528,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between w-full mt-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Whether to paginate the output. Each page will be separated by a horizontal rule and page number. Defaults to False.'
|
||||
@@ -543,7 +543,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between w-full mt-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Strip existing OCR text from the PDF and re-run OCR. Ignored if Force OCR is enabled. Defaults to False.'
|
||||
@@ -558,7 +558,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between w-full mt-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.'
|
||||
@@ -573,7 +573,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between w-full mt-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Format the lines in the output. Defaults to False. If set to True, the lines will be formatted to detect inline math and styles.'
|
||||
@@ -588,7 +588,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between w-full mt-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
"The output format for the text. Can be 'json', 'markdown', or 'html'. Defaults to 'markdown'."
|
||||
@@ -709,7 +709,7 @@
|
||||
|
||||
<div class="flex flex-col gap-2 mt-2">
|
||||
<div class=" flex flex-col w-full justify-between">
|
||||
<div class=" mb-1 text-xs font-medium">
|
||||
<div class=" mb-1 text-xs font-normal">
|
||||
{$i18n.t('Parameters')}
|
||||
</div>
|
||||
<div class="flex w-full items-center relative">
|
||||
@@ -735,7 +735,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="my-0.5 flex flex-col w-full">
|
||||
<div class=" mb-1 text-xs font-medium">
|
||||
<div class=" mb-1 text-xs font-normal">
|
||||
{$i18n.t('Document Intelligence Model')}
|
||||
</div>
|
||||
<div class="flex w-full">
|
||||
@@ -761,7 +761,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="flex justify-between w-full mt-2 pr-2">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Send the PDF as a base64 data URL instead of uploading it first.'
|
||||
@@ -792,7 +792,7 @@
|
||||
<!-- API Mode Selection -->
|
||||
<div class="flex w-full mt-2">
|
||||
<div class="flex-1 flex justify-between">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('API Mode')}
|
||||
</div>
|
||||
<select
|
||||
@@ -840,7 +840,7 @@
|
||||
|
||||
<div class="flex w-full mt-2">
|
||||
<div class="flex-1 flex justify-between">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('API Timeout')}
|
||||
</div>
|
||||
<input
|
||||
@@ -855,7 +855,7 @@
|
||||
|
||||
<!-- Parameters -->
|
||||
<div class="flex flex-col justify-between w-full mt-2">
|
||||
<div class="text-xs font-medium">
|
||||
<div class="text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Advanced parameters for MinerU parsing (enable_ocr, enable_formula, enable_table, language, model_version, page_ranges)'
|
||||
@@ -876,7 +876,7 @@
|
||||
|
||||
<!-- File Extensions -->
|
||||
<div class="flex flex-col justify-between w-full mt-2">
|
||||
<div class="text-xs font-medium mb-1">
|
||||
<div class="text-xs font-normal mb-1">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)'
|
||||
@@ -896,7 +896,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
<Tooltip content={$i18n.t('Full Context Mode')} placement="top-start">
|
||||
{$i18n.t('Bypass Embedding and Retrieval')}
|
||||
</Tooltip>
|
||||
@@ -918,7 +918,7 @@
|
||||
|
||||
{#if !RAGConfig.BYPASS_EMBEDDING_AND_RETRIEVAL}
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Text Splitter')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Text Splitter')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<select
|
||||
class="w-fit pr-8 rounded-sm px-2 text-xs bg-transparent outline-hidden text-right"
|
||||
@@ -935,7 +935,7 @@
|
||||
|
||||
{#if RAGConfig.TEXT_SPLITTER === 'token_transformers'}
|
||||
<div class="mb-2.5 flex flex-col w-full justify-between">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1 w-full">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1 w-full">
|
||||
{$i18n.t('Tokenizer Model')}
|
||||
</div>
|
||||
<div class="self-center w-full">
|
||||
@@ -951,7 +951,7 @@
|
||||
{/if}
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
placement="top-start"
|
||||
content={$i18n.t(
|
||||
@@ -969,7 +969,7 @@
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" flex gap-1.5 w-full">
|
||||
<div class=" w-full justify-between">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Chunk Size')}
|
||||
</div>
|
||||
<div class="self-center">
|
||||
@@ -985,7 +985,7 @@
|
||||
</div>
|
||||
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class=" self-center text-xs font-normal min-w-fit mb-1">
|
||||
{$i18n.t('Chunk Overlap')}
|
||||
</div>
|
||||
|
||||
@@ -1007,7 +1007,7 @@
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" flex gap-1.5 w-full">
|
||||
<div class="w-full">
|
||||
<div class="self-center text-xs font-medium min-w-fit mb-1">
|
||||
<div class="self-center text-xs font-normal min-w-fit mb-1">
|
||||
<Tooltip
|
||||
placement="top-start"
|
||||
content={$i18n.t(
|
||||
@@ -1036,13 +1036,13 @@
|
||||
|
||||
{#if !RAGConfig.BYPASS_EMBEDDING_AND_RETRIEVAL}
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Embedding')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Embedding')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class=" mb-2.5 flex flex-col w-full justify-between">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Embedding Model Engine')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1124,7 +1124,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex flex-col w-full">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Embedding Model')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Embedding Model')}</div>
|
||||
|
||||
<div class="">
|
||||
{#if RAG_EMBEDDING_ENGINE === 'ollama'}
|
||||
@@ -1191,7 +1191,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Embedding Batch Size')}
|
||||
</div>
|
||||
|
||||
@@ -1209,7 +1209,7 @@
|
||||
|
||||
{#if RAG_EMBEDDING_ENGINE === 'ollama' || RAG_EMBEDDING_ENGINE === 'openai' || RAG_EMBEDDING_ENGINE === 'azure_openai'}
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Runs embedding tasks concurrently to speed up processing. Turn off if rate limits become an issue.'
|
||||
@@ -1225,7 +1225,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Limits the number of concurrent embedding requests. Set to 0 for unlimited.'
|
||||
@@ -1250,13 +1250,13 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Retrieval')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Retrieval')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
{#if !RAGConfig.BYPASS_EMBEDDING_AND_RETRIEVAL}
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Full Context Mode')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Full Context Mode')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<Tooltip
|
||||
content={RAGConfig.RAG_FULL_CONTEXT
|
||||
@@ -1274,7 +1274,7 @@
|
||||
|
||||
{#if !RAGConfig.RAG_FULL_CONTEXT}
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Hybrid Search')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Hybrid Search')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<Switch bind:state={RAGConfig.ENABLE_RAG_HYBRID_SEARCH} />
|
||||
</div>
|
||||
@@ -1282,7 +1282,7 @@
|
||||
|
||||
{#if RAGConfig.ENABLE_RAG_HYBRID_SEARCH === true}
|
||||
<div class="mb-2.5 flex w-full justify-between">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Enrich Hybrid Search Text')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1298,7 +1298,7 @@
|
||||
|
||||
<div class=" mb-2.5 flex flex-col w-full justify-between">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Reranking Engine')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1339,7 +1339,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex flex-col w-full">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Reranking Model')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Reranking Model')}</div>
|
||||
|
||||
<div class="">
|
||||
<div class="flex w-full">
|
||||
@@ -1358,7 +1358,7 @@
|
||||
{/if}
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Reranking Batch Size')}
|
||||
</div>
|
||||
|
||||
@@ -1375,7 +1375,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Top K')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Top K')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<input
|
||||
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
||||
@@ -1390,7 +1390,7 @@
|
||||
|
||||
{#if RAGConfig.ENABLE_RAG_HYBRID_SEARCH === true}
|
||||
<div class="mb-2.5 flex w-full justify-between">
|
||||
<div class="self-center text-xs font-medium">{$i18n.t('Top K Reranker')}</div>
|
||||
<div class="self-center text-xs font-normal">{$i18n.t('Top K Reranker')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<input
|
||||
class="flex-1 w-full text-sm bg-transparent outline-hidden"
|
||||
@@ -1407,7 +1407,7 @@
|
||||
{#if RAGConfig.ENABLE_RAG_HYBRID_SEARCH === true}
|
||||
<div class=" mb-2.5 flex flex-col w-full justify-between">
|
||||
<div class=" flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Relevance Threshold')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1443,7 +1443,7 @@
|
||||
className="inline-tooltip"
|
||||
>
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('BM25 Weight')}
|
||||
</div>
|
||||
<button
|
||||
@@ -1505,7 +1505,7 @@
|
||||
{/if}
|
||||
|
||||
<div class=" mb-2.5 flex flex-col w-full justify-between">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('RAG Template')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('RAG Template')}</div>
|
||||
<div class="flex w-full items-center relative">
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -1532,12 +1532,12 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Files')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Files')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Allowed File Extensions')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Allowed File Extensions')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
@@ -1557,7 +1557,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Max Upload Size')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Max Upload Size')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
@@ -1578,7 +1578,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Max Upload Count')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Max Upload Count')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
@@ -1599,7 +1599,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Image Compression Width')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Image Compression Width')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
@@ -1620,7 +1620,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Image Compression Height')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1644,19 +1644,19 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Integration')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Integration')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Google Drive')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Google Drive')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<Switch bind:state={RAGConfig.ENABLE_GOOGLE_DRIVE_INTEGRATION} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('OneDrive')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('OneDrive')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<Switch bind:state={RAGConfig.ENABLE_ONEDRIVE_INTEGRATION} />
|
||||
</div>
|
||||
@@ -1664,12 +1664,12 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Danger Zone')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Danger Zone')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Reset Upload Directory')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Reset Upload Directory')}</div>
|
||||
<div class="flex items-center relative">
|
||||
<button
|
||||
class="text-xs"
|
||||
@@ -1684,7 +1684,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Reset Vector Storage/Knowledge')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1700,7 +1700,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Reindex Knowledge Base Vectors')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1718,9 +1718,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -104,12 +104,12 @@
|
||||
{#if evaluationConfig !== null}
|
||||
<div class="">
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('General')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('General')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2.5 flex w-full justify-between">
|
||||
<div class=" text-xs font-medium">{$i18n.t('Arena Models')}</div>
|
||||
<div class=" text-xs font-normal">{$i18n.t('Arena Models')}</div>
|
||||
|
||||
<Tooltip content={$i18n.t(`Message rating should be enabled to use this feature`)}>
|
||||
<Switch bind:state={evaluationConfig.ENABLE_EVALUATION_ARENA_MODELS} />
|
||||
@@ -119,7 +119,7 @@
|
||||
|
||||
{#if evaluationConfig.ENABLE_EVALUATION_ARENA_MODELS}
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium flex justify-between items-center">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal flex justify-between items-center">
|
||||
<div>
|
||||
{$i18n.t('Manage')}
|
||||
</div>
|
||||
@@ -174,9 +174,9 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
<Modal size="sm" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<div class=" text-lg font-medium self-center font-primary">
|
||||
<div class=" text-lg font-normal self-center ">
|
||||
{#if edit}
|
||||
{$i18n.t('Edit Arena Model')}
|
||||
{:else}
|
||||
@@ -374,10 +374,10 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium gap-1.5">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal gap-1.5">
|
||||
{#if edit}
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium dark:bg-black dark:hover:bg-gray-950 dark:text-white bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
|
||||
class="px-3.5 py-1.5 text-sm font-normal dark:bg-black dark:hover:bg-gray-950 dark:text-white bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
showDeleteConfirmDialog = true;
|
||||
@@ -388,7 +388,7 @@
|
||||
{/if}
|
||||
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-950 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-950 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
|
||||
@@ -392,7 +392,7 @@
|
||||
<Modal bind:show={showWebhookModal} size="sm">
|
||||
<div>
|
||||
<div class="flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<h1 class="text-lg font-medium self-center font-primary">
|
||||
<h1 class="text-lg font-normal self-center ">
|
||||
{editing ? $i18n.t('Edit webhook') : $i18n.t('Add webhook')}
|
||||
</h1>
|
||||
|
||||
@@ -651,11 +651,11 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-between items-center pt-4 text-sm font-medium">
|
||||
<div class="flex justify-between items-center pt-4 text-sm font-normal">
|
||||
<div>
|
||||
{#if editing}
|
||||
<button
|
||||
class="px-1 py-1.5 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:underline transition"
|
||||
class="px-1 py-1.5 text-sm font-normal text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:underline transition"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
showDeleteConfirmDialog = true;
|
||||
@@ -668,7 +668,7 @@
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
</button>
|
||||
@@ -688,12 +688,12 @@
|
||||
/>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class="mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Events')}</div>
|
||||
<div class="mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Events')}</div>
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2.5 flex flex-col w-full justify-between">
|
||||
<div class="flex justify-between items-center mb-1">
|
||||
<div class="font-medium text-xs">{$i18n.t('Webhooks')}</div>
|
||||
<div class="font-normal text-xs">{$i18n.t('Webhooks')}</div>
|
||||
|
||||
<Tooltip content={$i18n.t('Add webhook')}>
|
||||
<button class="px-1" on:click={newWebhook} type="button">
|
||||
@@ -709,7 +709,7 @@
|
||||
class="flex-1 min-w-0 flex gap-1.5 items-center {webhook.enabled ? '' : 'opacity-50'}"
|
||||
>
|
||||
<div class="outline-hidden w-full bg-transparent text-sm truncate">
|
||||
<span class="font-medium">
|
||||
<span class="font-normal">
|
||||
{webhook.id === 'default' ? $i18n.t('Default webhook') : webhook.name}
|
||||
</span>
|
||||
<span class="text-xs text-gray-500">
|
||||
|
||||
@@ -411,7 +411,7 @@
|
||||
<Modal bind:show={showSourceModal} size="sm">
|
||||
<div>
|
||||
<div class="flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<h1 class="text-lg font-medium self-center font-primary">
|
||||
<h1 class="text-lg font-normal self-center ">
|
||||
{editingItem ? $i18n.t('Edit Knowledge Connection') : $i18n.t('Add Knowledge Connection')}
|
||||
</h1>
|
||||
|
||||
@@ -769,11 +769,11 @@
|
||||
shareUsers={true}
|
||||
/>
|
||||
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-medium">
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-normal">
|
||||
<div></div>
|
||||
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
type="submit"
|
||||
disabled={creating || !sourceFormIsValid() || !testResult?.documents?.length}
|
||||
>
|
||||
@@ -791,9 +791,9 @@
|
||||
<div class="mb-2.5 flex flex-col w-full justify-between text-sm">
|
||||
<div class="flex justify-between items-center mb-1">
|
||||
<div class="flex items-center gap-2">
|
||||
<div class="font-medium">{$i18n.t('External Knowledge Sources')}</div>
|
||||
<div class="font-normal">{$i18n.t('External Knowledge Sources')}</div>
|
||||
<span
|
||||
class="text-[0.65rem] font-medium uppercase px-1.5 py-0.5 rounded-full bg-gray-100 dark:bg-gray-800 text-gray-500 dark:text-gray-400"
|
||||
class="text-[0.65rem] font-normal uppercase px-1.5 py-0.5 rounded-full bg-gray-100 dark:bg-gray-800 text-gray-500 dark:text-gray-400"
|
||||
>{$i18n.t('Experimental')}</span
|
||||
>
|
||||
</div>
|
||||
|
||||
@@ -81,12 +81,12 @@
|
||||
{#if adminConfig !== null}
|
||||
<div class="">
|
||||
<div class="mb-3.5">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('General')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('General')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium flex space-x-2 items-center">
|
||||
<div class=" mb-1 text-xs font-normal flex space-x-2 items-center">
|
||||
<div>
|
||||
{$i18n.t('Version')}
|
||||
</div>
|
||||
@@ -125,7 +125,7 @@
|
||||
|
||||
{#if $config?.features?.enable_version_update_check}
|
||||
<button
|
||||
class=" text-xs px-3 py-1.5 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-lg font-medium"
|
||||
class=" text-xs px-3 py-1.5 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-lg font-normal"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
checkForVersionUpdates();
|
||||
@@ -149,7 +149,7 @@
|
||||
</div>
|
||||
|
||||
<a
|
||||
class="flex-shrink-0 text-xs font-medium underline"
|
||||
class="flex-shrink-0 text-xs font-normal underline"
|
||||
href="https://docs.openwebui.com/"
|
||||
target="_blank"
|
||||
>
|
||||
@@ -205,7 +205,7 @@
|
||||
>{$config?.license_metadata?.organization_name}</span
|
||||
>
|
||||
for
|
||||
<span class=" font-medium text-black dark:text-white"
|
||||
<span class=" font-normal text-black dark:text-white"
|
||||
>{$config?.license_metadata?.seats ?? 'Unlimited'} users.</span
|
||||
>
|
||||
</a>
|
||||
@@ -230,7 +230,7 @@
|
||||
</div>
|
||||
|
||||
<!-- <button
|
||||
class="flex-shrink-0 text-xs px-3 py-1.5 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-lg font-medium"
|
||||
class="flex-shrink-0 text-xs px-3 py-1.5 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-lg font-normal"
|
||||
>
|
||||
{$i18n.t('Activate')}
|
||||
</button> -->
|
||||
@@ -239,12 +239,12 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Features')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Features')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Enable Community Sharing')}
|
||||
</div>
|
||||
|
||||
@@ -252,13 +252,13 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Enable Message Rating')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('Enable Message Rating')}</div>
|
||||
|
||||
<Switch bind:state={adminConfig.ENABLE_MESSAGE_RATING} />
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Folders')}
|
||||
</div>
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
{#if adminConfig.ENABLE_FOLDERS}
|
||||
<div class="mb-2.5 w-full justify-between">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Folder Max File Count')}
|
||||
</div>
|
||||
</div>
|
||||
@@ -290,7 +290,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Memories')}
|
||||
</div>
|
||||
|
||||
@@ -299,7 +299,7 @@
|
||||
|
||||
{#if adminConfig.ENABLE_MEMORIES}
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2 pl-4">
|
||||
<div class=" self-center text-xs font-medium text-gray-500 dark:text-gray-400">
|
||||
<div class=" self-center text-xs font-normal text-gray-500 dark:text-gray-400">
|
||||
{$i18n.t('Memory System Context')}
|
||||
</div>
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Notes')}
|
||||
</div>
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Channels')}
|
||||
</div>
|
||||
|
||||
@@ -324,7 +324,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Calendar')}
|
||||
</div>
|
||||
|
||||
@@ -332,7 +332,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Automations')}
|
||||
</div>
|
||||
|
||||
@@ -340,7 +340,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('User Webhooks')}
|
||||
</div>
|
||||
|
||||
@@ -348,7 +348,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('User Status')}
|
||||
</div>
|
||||
|
||||
@@ -356,7 +356,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" self-center text-xs font-medium mb-2">
|
||||
<div class=" self-center text-xs font-normal mb-2">
|
||||
{$i18n.t('Response Watermark')}
|
||||
</div>
|
||||
<Textarea
|
||||
@@ -367,7 +367,7 @@
|
||||
|
||||
<div class="mb-2.5 w-full justify-between">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('WebUI URL')}</div>
|
||||
<div class=" self-center text-xs font-normal">{$i18n.t('WebUI URL')}</div>
|
||||
</div>
|
||||
|
||||
<div class="flex mt-2 space-x-2">
|
||||
@@ -390,7 +390,7 @@
|
||||
<Events />
|
||||
|
||||
<div class="mb-3.5">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('UI')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('UI')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
@@ -439,9 +439,9 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
{#if config}
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('General')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('General')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
@@ -311,7 +311,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Create Image')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Create Image')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
@@ -551,7 +551,7 @@
|
||||
<div class="mt-1 text-xs text-gray-400 dark:text-gray-500">
|
||||
{$i18n.t('Include `--api` flag when running stable-diffusion-webui')}
|
||||
<a
|
||||
class=" text-gray-300 font-medium"
|
||||
class=" text-gray-300 font-normal"
|
||||
href="https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/3734"
|
||||
target="_blank"
|
||||
>
|
||||
@@ -583,7 +583,7 @@
|
||||
<div class="mt-1 text-xs text-gray-400 dark:text-gray-500">
|
||||
{$i18n.t('Include `--api-auth` flag when running stable-diffusion-webui')}
|
||||
<a
|
||||
class=" text-gray-300 font-medium"
|
||||
class=" text-gray-300 font-normal"
|
||||
href="https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/13993"
|
||||
target="_blank"
|
||||
>
|
||||
@@ -884,7 +884,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Edit Image')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Edit Image')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
@@ -1272,9 +1272,9 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
|
||||
@@ -164,13 +164,13 @@
|
||||
{#if servers !== null}
|
||||
<div class="">
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Tools')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Tools')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class="mb-2.5 flex flex-col w-full justify-between">
|
||||
<div class="flex justify-between items-center mb-0.5">
|
||||
<div class="font-medium">{$i18n.t('External Tool Servers')}</div>
|
||||
<div class="font-normal">{$i18n.t('External Tool Servers')}</div>
|
||||
|
||||
<Tooltip content={$i18n.t(`Add Connection`)}>
|
||||
<button
|
||||
@@ -215,7 +215,7 @@
|
||||
|
||||
<div class="mt-4 mb-2.5 flex flex-col w-full">
|
||||
<div class="flex justify-between items-center mb-1">
|
||||
<div class="font-medium">{$i18n.t('Open Terminal')}</div>
|
||||
<div class="font-normal">{$i18n.t('Open Terminal')}</div>
|
||||
|
||||
<Tooltip content={$i18n.t('Add Connection')}>
|
||||
<button
|
||||
@@ -309,7 +309,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-8 mb-2.5 text-base font-medium">{$i18n.t('Knowledge')}</div>
|
||||
<div class="mt-8 mb-2.5 text-base font-normal">{$i18n.t('Knowledge')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
@@ -325,9 +325,9 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -108,11 +108,11 @@
|
||||
>
|
||||
<div class=" overflow-y-scroll scrollbar-hidden h-full pr-1.5">
|
||||
<div class="mb-3.5">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Tasks')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Tasks')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class=" mb-2 font-medium flex items-center">
|
||||
<div class=" mb-2 font-normal flex items-center">
|
||||
<div class=" text-xs mr-1">{$i18n.t('Task Model')}</div>
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
@@ -227,7 +227,7 @@
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-3" />
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Context Compaction')}
|
||||
</div>
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
|
||||
{#if chatConfig.ENABLE_CONTEXT_COMPACTION}
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Token Threshold')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Token Threshold')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
@@ -255,7 +255,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Token Cap')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Token Cap')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
@@ -274,7 +274,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Context Compaction Prompt')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Context Compaction Prompt')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -301,7 +301,7 @@
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-3" />
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Title Generation')}
|
||||
</div>
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
|
||||
{#if taskConfig.ENABLE_TITLE_GENERATION}
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Title Generation Prompt')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Title Generation Prompt')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -327,7 +327,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Voice Mode Prompt')}
|
||||
</div>
|
||||
|
||||
@@ -336,7 +336,7 @@
|
||||
|
||||
{#if taskConfig.ENABLE_VOICE_MODE_PROMPT}
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Prompt Template')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Prompt Template')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -353,7 +353,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Follow Up Generation')}
|
||||
</div>
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
|
||||
{#if taskConfig.ENABLE_FOLLOW_UP_GENERATION}
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Follow Up Generation Prompt')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Follow Up Generation Prompt')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -379,7 +379,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Tags Generation')}
|
||||
</div>
|
||||
|
||||
@@ -388,7 +388,7 @@
|
||||
|
||||
{#if taskConfig.ENABLE_TAGS_GENERATION}
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Tags Generation Prompt')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Tags Generation Prompt')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -405,7 +405,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Retrieval Query Generation')}
|
||||
</div>
|
||||
|
||||
@@ -413,7 +413,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Web Search Query Generation')}
|
||||
</div>
|
||||
|
||||
@@ -421,7 +421,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Query Generation Prompt')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Query Generation Prompt')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -437,7 +437,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full items-center justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Autocomplete Generation')}
|
||||
</div>
|
||||
|
||||
@@ -448,7 +448,7 @@
|
||||
|
||||
{#if taskConfig.ENABLE_AUTOCOMPLETE_GENERATION}
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">
|
||||
<div class=" mb-1 text-xs font-normal">
|
||||
{$i18n.t('Autocomplete Generation Input Max Length')}
|
||||
</div>
|
||||
|
||||
@@ -464,7 +464,7 @@
|
||||
</Tooltip>
|
||||
</div>
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Autocomplete Generation Prompt')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Autocomplete Generation Prompt')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -481,7 +481,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Image Prompt Generation Prompt')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Image Prompt Generation Prompt')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -497,7 +497,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Tools Function Calling Prompt')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Tools Function Calling Prompt')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t('Leave empty to use the default prompt, or enter a custom prompt')}
|
||||
@@ -514,9 +514,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end text-sm font-medium">
|
||||
<div class="flex justify-end text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -382,12 +382,12 @@
|
||||
{#if selectedModelId === null}
|
||||
<div class="flex flex-col gap-1 mt-1.5 mb-2">
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="flex items-center md:self-center text-xl font-medium px-0.5 gap-2 shrink-0">
|
||||
<div class="flex items-center md:self-center text-xl font-normal px-0.5 gap-2 shrink-0">
|
||||
<div>
|
||||
{$i18n.t('Models')}
|
||||
</div>
|
||||
|
||||
<div class="text-lg font-medium text-gray-500 dark:text-gray-500">
|
||||
<div class="text-lg font-normal text-gray-500 dark:text-gray-500">
|
||||
{filteredModels.length}
|
||||
</div>
|
||||
</div>
|
||||
@@ -439,7 +439,7 @@
|
||||
{#if modelsImportInProgress}
|
||||
<Spinner className="size-3" />
|
||||
{/if}
|
||||
<div class=" self-center font-medium line-clamp-1">
|
||||
<div class=" self-center font-normal line-clamp-1">
|
||||
{$i18n.t('Import')}
|
||||
</div>
|
||||
</button>
|
||||
@@ -450,7 +450,7 @@
|
||||
downloadModels(models);
|
||||
}}
|
||||
>
|
||||
<div class=" self-center font-medium line-clamp-1">
|
||||
<div class=" self-center font-normal line-clamp-1">
|
||||
{$i18n.t('Export')}
|
||||
</div>
|
||||
</button>
|
||||
@@ -463,19 +463,19 @@
|
||||
showManageModal = true;
|
||||
}}
|
||||
>
|
||||
<div class=" self-center font-medium line-clamp-1">
|
||||
<div class=" self-center font-normal line-clamp-1">
|
||||
{$i18n.t('Manage')}
|
||||
</div>
|
||||
</button>
|
||||
|
||||
<button
|
||||
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-black hover:bg-gray-900 text-white dark:bg-white dark:hover:bg-gray-100 dark:text-black transition font-medium"
|
||||
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-black hover:bg-gray-900 text-white dark:bg-white dark:hover:bg-gray-100 dark:text-black transition font-normal"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
showConfigModal = true;
|
||||
}}
|
||||
>
|
||||
<div class=" self-center font-medium line-clamp-1">
|
||||
<div class=" self-center font-normal line-clamp-1">
|
||||
{$i18n.t('Settings')}
|
||||
</div>
|
||||
</button>
|
||||
@@ -640,7 +640,7 @@
|
||||
className=" w-fit"
|
||||
placement="top-start"
|
||||
>
|
||||
<div class="font-medium line-clamp-1 flex items-center gap-2">
|
||||
<div class="font-normal line-clamp-1 flex items-center gap-2">
|
||||
{model.name}
|
||||
|
||||
<Badge
|
||||
@@ -767,7 +767,7 @@
|
||||
<div class=" w-full h-full flex flex-col justify-center items-center my-16 mb-24">
|
||||
<div class="max-w-md text-center">
|
||||
<div class=" text-3xl mb-3">😕</div>
|
||||
<div class=" text-lg font-medium mb-1">{$i18n.t('No models found')}</div>
|
||||
<div class=" text-lg font-normal mb-1">{$i18n.t('No models found')}</div>
|
||||
<div class=" text-gray-500 text-center text-xs">
|
||||
{$i18n.t('Try adjusting your search or filter to find what you are looking for.')}
|
||||
</div>
|
||||
|
||||
@@ -608,7 +608,7 @@
|
||||
<div>
|
||||
<div class="space-y-2">
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium flex items-center gap-1.5">
|
||||
<div class=" mb-2 text-sm font-normal flex items-center gap-1.5">
|
||||
<div>
|
||||
{$i18n.t('Pull a model from Ollama.com')}
|
||||
</div>
|
||||
@@ -708,7 +708,7 @@
|
||||
<div class="mt-2 mb-1 text-xs text-gray-400 dark:text-gray-500">
|
||||
{$i18n.t('To access the available model names for downloading,')}
|
||||
<a
|
||||
class=" text-gray-500 dark:text-gray-300 font-medium underline"
|
||||
class=" text-gray-500 dark:text-gray-300 font-normal underline"
|
||||
href="https://ollama.com/library"
|
||||
target="_blank">{$i18n.t('click here.')}</a
|
||||
>
|
||||
@@ -751,12 +751,12 @@
|
||||
{#each Object.keys($MODEL_DOWNLOAD_POOL) as model}
|
||||
{#if 'pullProgress' in $MODEL_DOWNLOAD_POOL[model]}
|
||||
<div class="flex flex-col">
|
||||
<div class="font-medium mb-1">{model}</div>
|
||||
<div class="font-normal mb-1">{model}</div>
|
||||
<div class="">
|
||||
<div class="flex flex-row justify-between space-x-4 pr-2">
|
||||
<div class=" flex-1">
|
||||
<div
|
||||
class="dark:bg-gray-600 bg-gray-500 text-xs font-medium text-gray-100 text-center p-0.5 leading-none rounded-full"
|
||||
class="dark:bg-gray-600 bg-gray-500 text-xs font-normal text-gray-100 text-center p-0.5 leading-none rounded-full"
|
||||
style="width: {Math.max(
|
||||
15,
|
||||
$MODEL_DOWNLOAD_POOL[model].pullProgress ?? 0
|
||||
@@ -806,7 +806,7 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Delete a model')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Delete a model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div
|
||||
class="flex-1 mr-2 pr-1.5 rounded-lg bg-gray-50 dark:text-gray-300 dark:bg-gray-850"
|
||||
@@ -851,7 +851,7 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Create a model')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Create a model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1 mr-2 flex flex-col gap-2">
|
||||
<input
|
||||
@@ -903,12 +903,12 @@
|
||||
|
||||
{#if createModelDigest !== ''}
|
||||
<div class="flex flex-col mt-1">
|
||||
<div class="font-medium mb-1">{createModelTag}</div>
|
||||
<div class="font-normal mb-1">{createModelTag}</div>
|
||||
<div class="">
|
||||
<div class="flex flex-row justify-between space-x-4 pr-2">
|
||||
<div class=" flex-1">
|
||||
<div
|
||||
class="dark:bg-gray-600 bg-gray-500 text-xs font-medium text-gray-100 text-center p-0.5 leading-none rounded-full"
|
||||
class="dark:bg-gray-600 bg-gray-500 text-xs font-normal text-gray-100 text-center p-0.5 leading-none rounded-full"
|
||||
style="width: {Math.max(15, createModelPullProgress ?? 0)}%"
|
||||
>
|
||||
{createModelPullProgress ?? 0}%
|
||||
@@ -927,9 +927,9 @@
|
||||
|
||||
<div class="pt-1">
|
||||
<div class="flex justify-between items-center text-xs">
|
||||
<div class=" text-sm font-medium">{$i18n.t('Experimental')}</div>
|
||||
<div class=" text-sm font-normal">{$i18n.t('Experimental')}</div>
|
||||
<button
|
||||
class=" text-xs font-medium text-gray-500"
|
||||
class=" text-xs font-normal text-gray-500"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
showExperimentalOllama = !showExperimentalOllama;
|
||||
@@ -945,7 +945,7 @@
|
||||
}}
|
||||
>
|
||||
<div class=" mb-2 flex w-full justify-between">
|
||||
<div class=" text-sm font-medium">{$i18n.t('Upload a GGUF model')}</div>
|
||||
<div class=" text-sm font-normal">{$i18n.t('Upload a GGUF model')}</div>
|
||||
|
||||
<button
|
||||
class="p-1 px-3 text-xs flex rounded-sm transition"
|
||||
@@ -1073,7 +1073,7 @@
|
||||
{#if (modelUploadMode === 'file' && modelInputFile && modelInputFile.length > 0) || (modelUploadMode === 'url' && modelFileUrl !== '')}
|
||||
<div>
|
||||
<div>
|
||||
<div class=" my-2.5 text-sm font-medium">
|
||||
<div class=" my-2.5 text-sm font-normal">
|
||||
{$i18n.t('Modelfile Content')}
|
||||
</div>
|
||||
<textarea
|
||||
@@ -1087,7 +1087,7 @@
|
||||
<div class=" mt-1 text-xs text-gray-400 dark:text-gray-500">
|
||||
{$i18n.t('To access the GGUF models available for downloading,')}
|
||||
<a
|
||||
class=" text-gray-500 dark:text-gray-300 font-medium underline"
|
||||
class=" text-gray-500 dark:text-gray-300 font-normal underline"
|
||||
href="https://huggingface.co/models?search=gguf"
|
||||
target="_blank">{$i18n.t('click here.')}</a
|
||||
>
|
||||
@@ -1099,7 +1099,7 @@
|
||||
|
||||
<div class="w-full rounded-full dark:bg-gray-800">
|
||||
<div
|
||||
class="dark:bg-gray-600 bg-gray-500 text-xs font-medium text-gray-100 text-center p-0.5 leading-none rounded-full"
|
||||
class="dark:bg-gray-600 bg-gray-500 text-xs font-normal text-gray-100 text-center p-0.5 leading-none rounded-full"
|
||||
style="width: 100%"
|
||||
>
|
||||
{uploadMessage}
|
||||
@@ -1115,7 +1115,7 @@
|
||||
|
||||
<div class="w-full rounded-full dark:bg-gray-800">
|
||||
<div
|
||||
class="dark:bg-gray-600 bg-gray-500 text-xs font-medium text-gray-100 text-center p-0.5 leading-none rounded-full"
|
||||
class="dark:bg-gray-600 bg-gray-500 text-xs font-normal text-gray-100 text-center p-0.5 leading-none rounded-full"
|
||||
style="width: {Math.max(15, uploadProgress ?? 0)}%"
|
||||
>
|
||||
{uploadProgress ?? 0}%
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<Modal size="sm" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4">
|
||||
<div class=" text-lg font-medium self-center font-primary">
|
||||
<div class=" text-lg font-normal self-center ">
|
||||
{$i18n.t('Manage Models')}
|
||||
</div>
|
||||
<button
|
||||
@@ -64,7 +64,7 @@
|
||||
{:else if selected !== null}
|
||||
<div class=" flex w-full flex-col">
|
||||
<div
|
||||
class="flex gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full bg-transparent dark:text-gray-200"
|
||||
class="flex gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-normal rounded-full bg-transparent dark:text-gray-200"
|
||||
>
|
||||
<button
|
||||
class="min-w-fit p-1.5 {selected === 'ollama'
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
<Modal size="lg" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<div class=" text-lg font-medium self-center font-primary">
|
||||
<div class=" text-lg font-normal self-center ">
|
||||
{$i18n.t('Settings')}
|
||||
</div>
|
||||
<button
|
||||
@@ -191,7 +191,7 @@
|
||||
<div class="flex flex-col lg:flex-row w-full h-full pb-2 lg:space-x-4">
|
||||
<div
|
||||
id="admin-settings-tabs-container"
|
||||
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 dark:text-gray-200 text-sm font-medium text-left scrollbar-none"
|
||||
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 dark:text-gray-200 text-sm font-normal text-left scrollbar-none"
|
||||
>
|
||||
<button
|
||||
class="px-0.5 py-1 max-w-fit w-fit rounded-lg flex-1 lg:flex-none flex text-right transition {selectedTab ===
|
||||
@@ -259,7 +259,7 @@
|
||||
showDefaultPromptSuggestions = !showDefaultPromptSuggestions;
|
||||
}}
|
||||
>
|
||||
<div class="text-xs text-gray-500 font-medium">
|
||||
<div class="text-xs text-gray-500 font-normal">
|
||||
{$i18n.t('Prompt Suggestions')}
|
||||
</div>
|
||||
<div>
|
||||
@@ -296,7 +296,7 @@
|
||||
showDefaultCapabilities = !showDefaultCapabilities;
|
||||
}}
|
||||
>
|
||||
<div class="text-xs text-gray-500 font-medium">
|
||||
<div class="text-xs text-gray-500 font-normal">
|
||||
{$i18n.t('Model Capabilities')}
|
||||
</div>
|
||||
<div>
|
||||
@@ -352,7 +352,7 @@
|
||||
showDefaultParams = !showDefaultParams;
|
||||
}}
|
||||
>
|
||||
<div class="text-xs text-gray-500 font-medium">
|
||||
<div class="text-xs text-gray-500 font-normal">
|
||||
{$i18n.t('Model Parameters')}
|
||||
</div>
|
||||
<div>
|
||||
@@ -419,7 +419,7 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-medium gap-1.5">
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-normal gap-1.5">
|
||||
<div>
|
||||
<Tooltip
|
||||
content={$i18n.t('This will delete all models including custom models')}
|
||||
@@ -436,7 +436,7 @@
|
||||
</Tooltip>
|
||||
</div>
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
<div class="overflow-y-scroll scrollbar-hidden h-full">
|
||||
{#if PIPELINES_LIST !== null}
|
||||
<div class="flex w-full justify-between mb-2">
|
||||
<div class=" self-center text-sm font-medium">
|
||||
<div class=" self-center text-sm font-normal">
|
||||
{$i18n.t('Manage Pipelines')}
|
||||
</div>
|
||||
</div>
|
||||
@@ -257,7 +257,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" my-2">
|
||||
<div class=" mb-2 text-sm font-medium">
|
||||
<div class=" mb-2 text-sm font-normal">
|
||||
{$i18n.t('Upload Pipeline')}
|
||||
</div>
|
||||
<div class="flex w-full">
|
||||
@@ -271,7 +271,7 @@
|
||||
/>
|
||||
|
||||
<button
|
||||
class="w-full text-sm font-medium py-2 bg-transparent hover:bg-gray-100 border border-dashed dark:border-gray-850 dark:hover:bg-gray-850 text-center rounded-xl"
|
||||
class="w-full text-sm font-normal py-2 bg-transparent hover:bg-gray-100 border border-dashed dark:border-gray-850 dark:hover:bg-gray-850 text-center rounded-xl"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
document.getElementById('pipelines-upload-input')?.click();
|
||||
@@ -342,7 +342,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" my-2">
|
||||
<div class=" mb-2 text-sm font-medium">
|
||||
<div class=" mb-2 text-sm font-normal">
|
||||
{$i18n.t('Install from Github URL')}
|
||||
</div>
|
||||
<div class="flex w-full">
|
||||
@@ -410,9 +410,9 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2 text-xs text-gray-500">
|
||||
<span class=" font-medium dark:text-gray-200">{$i18n.t('Warning:')}</span>
|
||||
<span class=" font-normal dark:text-gray-200">{$i18n.t('Warning:')}</span>
|
||||
{$i18n.t('Pipelines are a plugin system with arbitrary code execution —')}
|
||||
<span class=" font-medium dark:text-gray-400"
|
||||
<span class=" font-normal dark:text-gray-400"
|
||||
>{$i18n.t("don't fetch random pipelines from sources you don't trust.")}</span
|
||||
>
|
||||
</div>
|
||||
@@ -423,7 +423,7 @@
|
||||
{#if pipelines !== null}
|
||||
{#if pipelines.length > 0}
|
||||
<div class="flex w-full justify-between mb-2">
|
||||
<div class=" self-center text-sm font-medium">
|
||||
<div class=" self-center text-sm font-normal">
|
||||
{$i18n.t('Pipelines Valves')}
|
||||
</div>
|
||||
</div>
|
||||
@@ -477,7 +477,7 @@
|
||||
{#each Object.keys(valves_spec.properties) as property, idx}
|
||||
<div class=" py-0.5 w-full justify-between">
|
||||
<div class="flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{valves_spec.properties[property].title}
|
||||
</div>
|
||||
|
||||
@@ -567,9 +567,9 @@
|
||||
</div>
|
||||
|
||||
{#if PIPELINES_LIST !== null && PIPELINES_LIST.length > 0}
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
<form class="flex h-full flex-col justify-between text-sm" on:submit|preventDefault={save}>
|
||||
<div class="h-full overflow-y-auto scrollbar-hidden">
|
||||
<div class="mt-0.5 mb-4 text-base font-medium">{$i18n.t('Sub-agents')}</div>
|
||||
<div class="mt-0.5 mb-4 text-base font-normal">{$i18n.t('Sub-agents')}</div>
|
||||
|
||||
{#if loading}
|
||||
<div class="flex justify-center py-8"><Spinner className="size-6" /></div>
|
||||
@@ -187,9 +187,9 @@
|
||||
</div>
|
||||
|
||||
{#if !loading}
|
||||
<div class="flex justify-end pt-6 text-sm font-medium">
|
||||
<div class="flex justify-end pt-6 text-sm font-normal">
|
||||
<button
|
||||
class="rounded-full bg-black px-3.5 py-1.5 text-sm font-medium text-white transition hover:bg-gray-900 disabled:opacity-50 dark:bg-white dark:text-black dark:hover:bg-gray-100"
|
||||
class="rounded-full bg-black px-3.5 py-1.5 text-sm font-normal text-white transition hover:bg-gray-900 disabled:opacity-50 dark:bg-white dark:text-black dark:hover:bg-gray-100"
|
||||
type="submit"
|
||||
disabled={saving}
|
||||
>
|
||||
|
||||
@@ -154,12 +154,12 @@
|
||||
{#if webConfig}
|
||||
<div class="">
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('General')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('General')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Web Search')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -168,7 +168,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full justify-between">
|
||||
<div class="self-center text-xs font-medium">
|
||||
<div class="self-center text-xs font-normal">
|
||||
{$i18n.t('Web Search Confirmation')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -180,7 +180,7 @@
|
||||
|
||||
{#if webConfig.ENABLE_WEB_SEARCH_CONFIRMATION}
|
||||
<div class="mb-2.5">
|
||||
<div class="self-center text-xs font-medium mb-2">
|
||||
<div class="self-center text-xs font-normal mb-2">
|
||||
{$i18n.t('Web Search Confirmation Content')}
|
||||
</div>
|
||||
<Textarea
|
||||
@@ -193,7 +193,7 @@
|
||||
{/if}
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Web Search Engine')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -221,7 +221,7 @@
|
||||
{#if webConfig.WEB_SEARCH_ENGINE === 'ollama_cloud'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Ollama Cloud API Key')}
|
||||
</div>
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'perplexity_search'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Perplexity Search API URL')}
|
||||
</div>
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Perplexity API Key')}
|
||||
</div>
|
||||
|
||||
@@ -275,7 +275,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'searxng'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-left text-xs font-medium mb-1">
|
||||
<div class=" self-left text-xs font-normal mb-1">
|
||||
{$i18n.t('Searxng Query URL')}
|
||||
</div>
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div class=" self-left text-xs font-medium mb-1">
|
||||
<div class=" self-left text-xs font-normal mb-1">
|
||||
{$i18n.t('Searxng search language (all, en, es, de, fr, etc.)')}
|
||||
</div>
|
||||
|
||||
@@ -314,7 +314,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'yacy'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Yacy Instance URL')}
|
||||
</div>
|
||||
|
||||
@@ -334,7 +334,7 @@
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div class="flex gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Yacy Username')}
|
||||
</div>
|
||||
|
||||
@@ -347,7 +347,7 @@
|
||||
</div>
|
||||
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Yacy Password')}
|
||||
</div>
|
||||
|
||||
@@ -361,7 +361,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'google_pse'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Google PSE API Key')}
|
||||
</div>
|
||||
|
||||
@@ -371,7 +371,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="mt-1.5">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Google PSE Engine Id')}
|
||||
</div>
|
||||
|
||||
@@ -391,7 +391,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'brave'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Brave Search API Key')}
|
||||
</div>
|
||||
|
||||
@@ -404,7 +404,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'brave_llm_context'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Brave Search API Key')}
|
||||
</div>
|
||||
|
||||
@@ -414,7 +414,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="mt-1.5">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Context Tokens')}
|
||||
</div>
|
||||
|
||||
@@ -437,7 +437,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'kagi'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Kagi Search API Key')}
|
||||
</div>
|
||||
|
||||
@@ -450,7 +450,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'mojeek'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Mojeek Search API Key')}
|
||||
</div>
|
||||
|
||||
@@ -463,7 +463,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'bocha'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Bocha Search API Key')}
|
||||
</div>
|
||||
|
||||
@@ -476,7 +476,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'serpstack'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Serpstack API Key')}
|
||||
</div>
|
||||
|
||||
@@ -489,7 +489,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'serper'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Serper API Key')}
|
||||
</div>
|
||||
|
||||
@@ -502,7 +502,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'serphouse'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('SERPHouse API Key')}
|
||||
</div>
|
||||
|
||||
@@ -512,7 +512,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="mt-1.5">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('SERPHouse Domain')}
|
||||
</div>
|
||||
|
||||
@@ -532,7 +532,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'serply'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Serply API Key')}
|
||||
</div>
|
||||
|
||||
@@ -545,7 +545,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'tavily'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Tavily API Key')}
|
||||
</div>
|
||||
|
||||
@@ -558,7 +558,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'searchapi'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('SearchApi API Key')}
|
||||
</div>
|
||||
|
||||
@@ -568,7 +568,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="mt-1.5">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('SearchApi Engine')}
|
||||
</div>
|
||||
|
||||
@@ -588,7 +588,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'serpapi'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('SerpApi API Key')}
|
||||
</div>
|
||||
|
||||
@@ -598,7 +598,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="mt-1.5">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('SerpApi Engine')}
|
||||
</div>
|
||||
|
||||
@@ -618,7 +618,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'jina'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Jina API Base URL')}
|
||||
</div>
|
||||
|
||||
@@ -636,7 +636,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Jina API Key')}
|
||||
</div>
|
||||
|
||||
@@ -649,7 +649,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'bing'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Bing Search V7 Endpoint')}
|
||||
</div>
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Bing Search V7 Subscription Key')}
|
||||
</div>
|
||||
|
||||
@@ -680,7 +680,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'exa'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Exa API Key')}
|
||||
</div>
|
||||
|
||||
@@ -693,7 +693,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'perplexity'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Perplexity API Key')}
|
||||
</div>
|
||||
|
||||
@@ -706,7 +706,7 @@
|
||||
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class="self-center text-xs font-medium mb-1">
|
||||
<div class="self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Perplexity Model')}
|
||||
</div>
|
||||
<input
|
||||
@@ -727,7 +727,7 @@
|
||||
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Perplexity Search Context Usage')}
|
||||
</div>
|
||||
<select
|
||||
@@ -743,7 +743,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'microsoft_web_iq'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Microsoft Web IQ API Base URL')}
|
||||
</div>
|
||||
|
||||
@@ -761,7 +761,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Microsoft Web IQ API Key')}
|
||||
</div>
|
||||
|
||||
@@ -772,7 +772,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Language')}
|
||||
</div>
|
||||
|
||||
@@ -788,7 +788,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'sougou'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Sougou Search API sID')}
|
||||
</div>
|
||||
|
||||
@@ -800,7 +800,7 @@
|
||||
</div>
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Sougou Search API SK')}
|
||||
</div>
|
||||
|
||||
@@ -813,7 +813,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'firecrawl'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Firecrawl API Base URL')}
|
||||
</div>
|
||||
|
||||
@@ -831,7 +831,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Firecrawl API Key')}
|
||||
</div>
|
||||
|
||||
@@ -842,7 +842,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Firecrawl Timeout (s)')}
|
||||
</div>
|
||||
|
||||
@@ -862,7 +862,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'external'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('External Web Search URL')}
|
||||
</div>
|
||||
|
||||
@@ -880,7 +880,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('External Web Search API Key')}
|
||||
</div>
|
||||
|
||||
@@ -893,7 +893,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'yandex'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Yandex Web Search URL')}
|
||||
</div>
|
||||
|
||||
@@ -911,7 +911,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Yandex Web Search API Key')}
|
||||
</div>
|
||||
|
||||
@@ -922,7 +922,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5">
|
||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Yandex Web Search config')}</div>
|
||||
<div class=" mb-1 text-xs font-normal">{$i18n.t('Yandex Web Search config')}</div>
|
||||
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
@@ -942,7 +942,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'youcom'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('You.com API Key')}
|
||||
</div>
|
||||
|
||||
@@ -955,7 +955,7 @@
|
||||
{:else if webConfig.WEB_SEARCH_ENGINE === 'linkup'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Linkup API Key')}
|
||||
</div>
|
||||
|
||||
@@ -966,7 +966,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Parameters')}
|
||||
</div>
|
||||
|
||||
@@ -981,7 +981,7 @@
|
||||
{#if webConfig.WEB_SEARCH_ENGINE === 'duckduckgo'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('DDGS Backend')}
|
||||
</div>
|
||||
|
||||
@@ -1013,7 +1013,7 @@
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div class="flex gap-2">
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Search Result Count')}
|
||||
</div>
|
||||
|
||||
@@ -1026,7 +1026,7 @@
|
||||
</div>
|
||||
|
||||
<div class="w-full">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).'
|
||||
@@ -1049,7 +1049,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 w-full">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
<Tooltip
|
||||
content={$i18n.t(
|
||||
'Maximum characters to return from fetched URLs. Leave empty for no limit.'
|
||||
@@ -1070,7 +1070,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div class=" text-xs font-medium mb-1">
|
||||
<div class=" text-xs font-normal mb-1">
|
||||
{$i18n.t('Domain Filter List')}
|
||||
</div>
|
||||
|
||||
@@ -1085,7 +1085,7 @@
|
||||
{/if}
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
<Tooltip content={$i18n.t('Full Context Mode')} placement="top-start">
|
||||
{$i18n.t('Bypass Embedding and Retrieval')}
|
||||
</Tooltip>
|
||||
@@ -1106,7 +1106,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
<Tooltip content={$i18n.t('Bypass Web Loader')} placement="top-start">
|
||||
{$i18n.t('Bypass Web Loader')}
|
||||
</Tooltip>
|
||||
@@ -1119,7 +1119,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Trust Proxy Environment')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1137,12 +1137,12 @@
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-medium">{$i18n.t('Loader')}</div>
|
||||
<div class=" mt-0.5 mb-2.5 text-base font-normal">{$i18n.t('Loader')}</div>
|
||||
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Web Loader Engine')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1161,7 +1161,7 @@
|
||||
|
||||
{#if webConfig.WEB_LOADER_ENGINE === '' || webConfig.WEB_LOADER_ENGINE === 'safe_web'}
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Timeout')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1174,7 +1174,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Verify SSL Certificate')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1184,7 +1184,7 @@
|
||||
{:else if webConfig.WEB_LOADER_ENGINE === 'playwright'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Playwright WebSocket URL')}
|
||||
</div>
|
||||
|
||||
@@ -1202,7 +1202,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Playwright Timeout (ms)')}
|
||||
</div>
|
||||
|
||||
@@ -1221,7 +1221,7 @@
|
||||
{:else if webConfig.WEB_LOADER_ENGINE === 'firecrawl' && webConfig.WEB_SEARCH_ENGINE !== 'firecrawl'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Firecrawl API Base URL')}
|
||||
</div>
|
||||
|
||||
@@ -1239,7 +1239,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Firecrawl API Key')}
|
||||
</div>
|
||||
|
||||
@@ -1252,7 +1252,7 @@
|
||||
{:else if webConfig.WEB_LOADER_ENGINE === 'tavily'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Tavily Extract Depth')}
|
||||
</div>
|
||||
|
||||
@@ -1271,7 +1271,7 @@
|
||||
|
||||
{#if webConfig.WEB_SEARCH_ENGINE !== 'tavily'}
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Tavily API Key')}
|
||||
</div>
|
||||
|
||||
@@ -1286,7 +1286,7 @@
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
{#if webConfig.WEB_SEARCH_ENGINE !== 'microsoft_web_iq'}
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Microsoft Web IQ API Base URL')}
|
||||
</div>
|
||||
|
||||
@@ -1304,7 +1304,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Microsoft Web IQ API Key')}
|
||||
</div>
|
||||
|
||||
@@ -1315,7 +1315,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Language')}
|
||||
</div>
|
||||
|
||||
@@ -1332,7 +1332,7 @@
|
||||
{:else if webConfig.WEB_LOADER_ENGINE === 'external'}
|
||||
<div class="mb-2.5 flex w-full flex-col">
|
||||
<div>
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('External Web Loader URL')}
|
||||
</div>
|
||||
|
||||
@@ -1350,7 +1350,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('External Web Loader API Key')}
|
||||
</div>
|
||||
|
||||
@@ -1363,7 +1363,7 @@
|
||||
{/if}
|
||||
|
||||
<div class="mb-2.5 w-full">
|
||||
<div class=" self-center text-xs font-medium mb-1">
|
||||
<div class=" self-center text-xs font-normal mb-1">
|
||||
{$i18n.t('Concurrent Requests')}
|
||||
</div>
|
||||
|
||||
@@ -1376,7 +1376,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Youtube Language')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1391,7 +1391,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" mb-2.5 flex flex-col w-full justify-between">
|
||||
<div class=" mb-1 text-xs font-medium">
|
||||
<div class=" mb-1 text-xs font-normal">
|
||||
{$i18n.t('Youtube Proxy URL')}
|
||||
</div>
|
||||
<div class="flex items-center relative">
|
||||
@@ -1408,9 +1408,9 @@
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<Modal size="md" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 mb-1.5">
|
||||
<div class=" text-lg font-medium self-center font-primary min-w-0 truncate">
|
||||
<div class=" text-lg font-normal self-center min-w-0 truncate">
|
||||
{$i18n.t('User Preview')}
|
||||
{#if userName}
|
||||
<span class="text-sm font-normal text-gray-500 ml-1">{userName}</span>
|
||||
@@ -62,11 +62,11 @@
|
||||
<div class="space-y-2">
|
||||
{#if preview.groups.length > 0}
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Groups')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Groups')}</div>
|
||||
<div class="flex flex-col w-full">
|
||||
{#each preview.groups as group}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">{group.name}</div>
|
||||
<div class=" self-center text-xs font-normal">{group.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
@@ -76,7 +76,7 @@
|
||||
{/if}
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Models')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Models')}</div>
|
||||
<div class="flex flex-col w-full">
|
||||
{#if preview.models.items.length === 0}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
@@ -87,7 +87,7 @@
|
||||
{:else}
|
||||
{#each preview.models.items as model}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">{model.name}</div>
|
||||
<div class=" self-center text-xs font-normal">{model.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
<hr class="border-gray-50 dark:border-gray-850/30 my-1" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Knowledge')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Knowledge')}</div>
|
||||
<div class="flex flex-col w-full">
|
||||
{#if preview.knowledge.items.length === 0}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
@@ -119,7 +119,7 @@
|
||||
{:else}
|
||||
{#each preview.knowledge.items as kb}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">{kb.name}</div>
|
||||
<div class=" self-center text-xs font-normal">{kb.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
<hr class="border-gray-50 dark:border-gray-850/30 my-1" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Tools')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Tools')}</div>
|
||||
<div class="flex flex-col w-full">
|
||||
{#if preview.tools.items.length === 0}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
@@ -151,7 +151,7 @@
|
||||
{:else}
|
||||
{#each preview.tools.items as tool}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">{tool.name}</div>
|
||||
<div class=" self-center text-xs font-normal">{tool.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<div class="flex flex-col lg:flex-row w-full h-full pb-2 lg:space-x-4">
|
||||
<div
|
||||
id="users-tabs-container"
|
||||
class="mx-[16px] lg:mx-0 lg:px-[16px] flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-50 dark:text-gray-200 text-sm font-medium text-left scrollbar-none"
|
||||
class="mx-[16px] lg:mx-0 lg:px-[16px] flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-50 dark:text-gray-200 text-sm font-normal text-left scrollbar-none"
|
||||
>
|
||||
<a
|
||||
id="overview"
|
||||
|
||||
@@ -121,19 +121,19 @@
|
||||
|
||||
<div class="flex flex-col gap-1 px-1 mt-1.5 mb-3">
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="flex items-center md:self-center text-xl font-medium px-0.5 gap-2 shrink-0">
|
||||
<div class="flex items-center md:self-center text-xl font-normal px-0.5 gap-2 shrink-0">
|
||||
<div>
|
||||
{$i18n.t('Groups')}
|
||||
</div>
|
||||
|
||||
<div class="text-lg font-medium text-gray-500 dark:text-gray-500">
|
||||
<div class="text-lg font-normal text-gray-500 dark:text-gray-500">
|
||||
{filteredGroups.length}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex w-full justify-end gap-1.5">
|
||||
<button
|
||||
class="px-2 py-1.5 rounded-xl bg-black text-white dark:bg-white dark:text-black transition font-medium text-sm flex items-center"
|
||||
class="px-2 py-1.5 rounded-xl bg-black text-white dark:bg-white dark:text-black transition font-normal text-sm flex items-center"
|
||||
on:click={() => {
|
||||
showAddGroupModal = !showAddGroupModal;
|
||||
}}
|
||||
@@ -212,7 +212,7 @@
|
||||
<div class="w-full h-full flex flex-col justify-center items-center my-16 mb-24">
|
||||
<div class="max-w-md text-center">
|
||||
<div class="text-3xl mb-3">👥</div>
|
||||
<div class="text-lg font-medium mb-1">{$i18n.t('No groups found')}</div>
|
||||
<div class="text-lg font-normal mb-1">{$i18n.t('No groups found')}</div>
|
||||
<div class="text-gray-500 text-center text-xs">
|
||||
{$i18n.t('Use groups to organize your users and assign permissions.')}
|
||||
</div>
|
||||
@@ -244,7 +244,7 @@
|
||||
</div>
|
||||
|
||||
<div class="text-left">
|
||||
<div class=" text-sm font-medium">{$i18n.t('Default permissions')}</div>
|
||||
<div class=" text-sm font-normal">{$i18n.t('Default permissions')}</div>
|
||||
|
||||
<div class="flex text-xs mt-0.5">
|
||||
{$i18n.t('applies to all users with the "user" role')}
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
<Modal size="lg" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 mb-1.5">
|
||||
<div class=" text-lg font-medium self-center font-primary">
|
||||
<div class=" text-lg font-normal self-center ">
|
||||
{#if custom}
|
||||
{#if edit}
|
||||
{$i18n.t('Edit User Group')}
|
||||
@@ -167,7 +167,7 @@
|
||||
<div class="flex flex-col lg:flex-row w-full h-full pb-2 lg:space-x-4">
|
||||
<div
|
||||
id="admin-settings-tabs-container"
|
||||
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 dark:text-gray-200 text-sm font-medium text-left scrollbar-none"
|
||||
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 dark:text-gray-200 text-sm font-normal text-left scrollbar-none"
|
||||
>
|
||||
{#if tabs.includes('general')}
|
||||
<button
|
||||
@@ -287,7 +287,7 @@
|
||||
</div>
|
||||
|
||||
{#if ['general', 'permissions'].includes(selectedTab)}
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-medium gap-1.5">
|
||||
<div class="flex justify-between items-center pt-3 text-sm font-normal gap-1.5">
|
||||
<div>
|
||||
{#if selectedTab === 'permissions'}
|
||||
<Tooltip
|
||||
@@ -311,7 +311,7 @@
|
||||
</div>
|
||||
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
@@ -331,7 +331,7 @@
|
||||
</div>
|
||||
|
||||
<!-- <div
|
||||
class=" tabs flex flex-row overflow-x-auto gap-2.5 text-sm font-medium border-b border-b-gray-800 scrollbar-hidden"
|
||||
class=" tabs flex flex-row overflow-x-auto gap-2.5 text-sm font-normal border-b border-b-gray-800 scrollbar-hidden"
|
||||
>
|
||||
{#if tabs.includes('display')}
|
||||
<button
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="flex-1">
|
||||
<div class="flex items-center gap-2">
|
||||
<div class="text-sm font-medium line-clamp-1">{group.name}</div>
|
||||
<div class="text-sm font-normal line-clamp-1">{group.name}</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-2 mt-0.5 line-clamp-1">
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<div class="text-red-500 text-xs text-center py-4">{error}</div>
|
||||
{:else if preview}
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Models')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Models')}</div>
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
{#if preview.models.items.length === 0}
|
||||
@@ -49,7 +49,7 @@
|
||||
{:else}
|
||||
{#each preview.models.items as model}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">{model.name}</div>
|
||||
<div class=" self-center text-xs font-normal">{model.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<hr class="border-gray-50 dark:border-gray-850/30 my-1" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Knowledge')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Knowledge')}</div>
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
{#if preview.knowledge.items.length === 0}
|
||||
@@ -82,7 +82,7 @@
|
||||
{:else}
|
||||
{#each preview.knowledge.items as kb}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">{kb.name}</div>
|
||||
<div class=" self-center text-xs font-normal">{kb.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
<hr class="border-gray-50 dark:border-gray-850/30 my-1" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Tools')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Tools')}</div>
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
{#if preview.tools.items.length === 0}
|
||||
@@ -115,7 +115,7 @@
|
||||
{:else}
|
||||
{#each preview.tools.items as tool}
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">{tool.name}</div>
|
||||
<div class=" self-center text-xs font-normal">{tool.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
|
||||
@@ -41,11 +41,11 @@
|
||||
{$i18n.t('No model IDs')} -->
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Workspace Permissions')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Workspace Permissions')}</div>
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Models Access')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.workspace.models} />
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Knowledge Access')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.workspace.knowledge} />
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Prompts Access')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.workspace.prompts} />
|
||||
@@ -132,7 +132,7 @@
|
||||
)}
|
||||
placement="top-start"
|
||||
>
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Tools Access')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.workspace.tools} />
|
||||
@@ -171,7 +171,7 @@
|
||||
)}
|
||||
placement="top-start"
|
||||
>
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Skills Access')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.workspace.skills} />
|
||||
@@ -205,11 +205,11 @@
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Sharing Permissions')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Sharing Permissions')}</div>
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Models Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.models} />
|
||||
@@ -226,7 +226,7 @@
|
||||
{#if permissions.sharing.models}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Models Public Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.public_models} />
|
||||
@@ -243,7 +243,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Knowledge Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.knowledge} />
|
||||
@@ -260,7 +260,7 @@
|
||||
{#if permissions.sharing.knowledge}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Knowledge Public Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.public_knowledge} />
|
||||
@@ -277,7 +277,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Prompts Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.prompts} />
|
||||
@@ -294,7 +294,7 @@
|
||||
{#if permissions.sharing.prompts}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Prompts Public Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.public_prompts} />
|
||||
@@ -311,7 +311,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Tools Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.tools} />
|
||||
@@ -328,7 +328,7 @@
|
||||
{#if permissions.sharing.tools}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Tools Public Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.public_tools} />
|
||||
@@ -345,7 +345,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Skills Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.skills} />
|
||||
@@ -362,7 +362,7 @@
|
||||
{#if permissions.sharing.skills}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Skills Public Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.public_skills} />
|
||||
@@ -379,7 +379,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Notes Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.notes} />
|
||||
@@ -396,7 +396,7 @@
|
||||
{#if permissions.sharing.notes}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Notes Public Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.public_notes} />
|
||||
@@ -413,7 +413,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Folders Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.folders} />
|
||||
@@ -430,7 +430,7 @@
|
||||
{#if permissions.chat.share}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Chats Public Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.public_chats} />
|
||||
@@ -448,7 +448,7 @@
|
||||
{#if permissions.features.calendar}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Calendars Public Sharing')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.sharing.public_calendars} />
|
||||
@@ -467,11 +467,11 @@
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Access Grants')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Access Grants')}</div>
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Sharing With Users')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.access_grants.allow_users} />
|
||||
@@ -487,7 +487,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Sharing With Groups')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.access_grants.allow_groups} />
|
||||
@@ -505,11 +505,11 @@
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Chat Permissions')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Chat Permissions')}</div>
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow File Upload')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.file_upload} />
|
||||
@@ -525,7 +525,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Web Upload')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.web_upload} />
|
||||
@@ -541,7 +541,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Chat Controls')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.controls} />
|
||||
@@ -558,7 +558,7 @@
|
||||
{#if permissions.chat.controls}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Chat Valves')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.valves} />
|
||||
@@ -574,7 +574,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Chat System Prompt')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.system_prompt} />
|
||||
@@ -590,7 +590,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Chat Params')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.params} />
|
||||
@@ -607,7 +607,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Chat Edit')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.edit} />
|
||||
@@ -623,7 +623,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Chat Delete')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.delete} />
|
||||
@@ -639,7 +639,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Delete Messages')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.delete_message} />
|
||||
@@ -655,7 +655,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Continue Response')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.continue_response} />
|
||||
@@ -671,7 +671,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Regenerate Response')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.regenerate_response} />
|
||||
@@ -687,7 +687,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Rate Response')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.rate_response} />
|
||||
@@ -703,7 +703,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Chat Share')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.share} />
|
||||
@@ -719,7 +719,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Chat Export')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.export} />
|
||||
@@ -735,7 +735,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Chat Import')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat['import']} />
|
||||
@@ -751,7 +751,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Speech to Text')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.stt} />
|
||||
@@ -767,7 +767,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Text to Speech')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.tts} />
|
||||
@@ -783,7 +783,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Call')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.call} />
|
||||
@@ -799,7 +799,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Multiple Models in Chat')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.multiple_models} />
|
||||
@@ -815,7 +815,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Allow Temporary Chat')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.temporary} />
|
||||
@@ -832,7 +832,7 @@
|
||||
{#if permissions.chat.temporary}
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Enforce Temporary Chat')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.chat.temporary_enforced} />
|
||||
@@ -851,11 +851,11 @@
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Features Permissions')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Features Permissions')}</div>
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('API Keys')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.api_keys} />
|
||||
@@ -871,7 +871,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Notes')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.notes} />
|
||||
@@ -887,7 +887,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Channels')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.channels} />
|
||||
@@ -903,7 +903,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Folders')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.folders} />
|
||||
@@ -919,7 +919,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Direct Tool Servers')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.direct_tool_servers} />
|
||||
@@ -935,7 +935,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Web Search')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.web_search} />
|
||||
@@ -951,7 +951,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Image Generation')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.image_generation} />
|
||||
@@ -967,7 +967,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Code Interpreter')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.code_interpreter} />
|
||||
@@ -983,7 +983,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Memories')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.memories} />
|
||||
@@ -1005,7 +1005,7 @@
|
||||
)}
|
||||
placement="top-start"
|
||||
>
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Automations')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.automations} />
|
||||
@@ -1021,7 +1021,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Calendar')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.calendar} />
|
||||
@@ -1037,7 +1037,7 @@
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('User Webhooks')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.features.webhooks} />
|
||||
@@ -1055,11 +1055,11 @@
|
||||
<hr class=" border-gray-100/30 dark:border-gray-850/30" />
|
||||
|
||||
<div>
|
||||
<div class=" mb-2 text-sm font-medium">{$i18n.t('Settings Permissions')}</div>
|
||||
<div class=" mb-2 text-sm font-normal">{$i18n.t('Settings Permissions')}</div>
|
||||
|
||||
<div class="flex flex-col w-full">
|
||||
<div class="flex w-full justify-between my-1">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{$i18n.t('Interface Settings Access')}
|
||||
</div>
|
||||
<Switch bind:state={permissions.settings.interface} />
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
/>
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-3 py-1 font-medium text-gray-900 dark:text-white max-w-48">
|
||||
<td class="px-3 py-1 font-normal text-gray-900 dark:text-white max-w-48">
|
||||
<Tooltip content={user.email} placement="top-start">
|
||||
<div class="flex items-center">
|
||||
<img
|
||||
@@ -257,7 +257,7 @@
|
||||
alt="user"
|
||||
/>
|
||||
|
||||
<div class="font-medium truncate">{user.name}</div>
|
||||
<div class="font-normal truncate">{user.name}</div>
|
||||
</div>
|
||||
</Tooltip>
|
||||
</td>
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
<div
|
||||
class="pt-0.5 pb-1 gap-1 flex flex-col md:flex-row justify-between sticky top-0 z-10 bg-white dark:bg-gray-900"
|
||||
>
|
||||
<div class="flex md:self-center text-lg font-medium px-0.5 gap-2">
|
||||
<div class="flex md:self-center text-lg font-normal px-0.5 gap-2">
|
||||
<div class="flex-shrink-0">
|
||||
{$i18n.t('Users')}
|
||||
</div>
|
||||
@@ -177,18 +177,18 @@
|
||||
<div>
|
||||
{#if ($config?.license_metadata?.seats ?? null) !== null}
|
||||
{#if total > $config?.license_metadata?.seats}
|
||||
<span class="text-lg font-medium text-red-500"
|
||||
<span class="text-lg font-normal text-red-500"
|
||||
>{total} of {$config?.license_metadata?.seats}
|
||||
<span class="text-sm font-normal">{$i18n.t('available users')}</span></span
|
||||
>
|
||||
{:else}
|
||||
<span class="text-lg font-medium text-gray-500 dark:text-gray-300"
|
||||
<span class="text-lg font-normal text-gray-500 dark:text-gray-300"
|
||||
>{total} of {$config?.license_metadata?.seats}
|
||||
<span class="text-sm font-normal">{$i18n.t('available users')}</span></span
|
||||
>
|
||||
{/if}
|
||||
{:else}
|
||||
<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{total}</span>
|
||||
<span class="text-lg font-normal text-gray-500 dark:text-gray-300">{total}</span>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
@@ -222,7 +222,7 @@
|
||||
<div>
|
||||
<Tooltip content={$i18n.t('Add User')}>
|
||||
<button
|
||||
class=" p-2 rounded-xl hover:bg-gray-100 dark:bg-gray-900 dark:hover:bg-gray-850 transition font-medium text-sm flex items-center space-x-1"
|
||||
class=" p-2 rounded-xl hover:bg-gray-100 dark:bg-gray-900 dark:hover:bg-gray-850 transition font-normal text-sm flex items-center space-x-1"
|
||||
on:click={() => {
|
||||
showAddUserModal = !showAddUserModal;
|
||||
}}
|
||||
@@ -377,7 +377,7 @@
|
||||
/>
|
||||
</button>
|
||||
</td>
|
||||
<td class="px-3 py-1 font-medium text-gray-900 dark:text-white max-w-48">
|
||||
<td class="px-3 py-1 font-normal text-gray-900 dark:text-white max-w-48">
|
||||
<div class="flex items-center gap-2">
|
||||
<ProfilePreview {user} side="right" align="center" sideOffset={6}>
|
||||
<img
|
||||
@@ -390,7 +390,7 @@
|
||||
/>
|
||||
</ProfilePreview>
|
||||
|
||||
<div class="font-medium truncate">{user.name}</div>
|
||||
<div class="font-normal truncate">{user.name}</div>
|
||||
|
||||
{#if user?.last_active_at && Date.now() / 1000 - user.last_active_at < 180}
|
||||
<div>
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
<Modal size="sm" bind:show>
|
||||
<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 User')}</div>
|
||||
<div class=" text-lg font-normal self-center">{$i18n.t('Add User')}</div>
|
||||
<button
|
||||
class="self-center"
|
||||
aria-label={$i18n.t('Close')}
|
||||
@@ -165,7 +165,7 @@
|
||||
}}
|
||||
>
|
||||
<div
|
||||
class="flex -mt-2 mb-1.5 gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full bg-transparent dark:text-gray-200"
|
||||
class="flex -mt-2 mb-1.5 gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-normal rounded-full bg-transparent dark:text-gray-200"
|
||||
>
|
||||
<button
|
||||
class="min-w-fit p-1.5 {tab === ''
|
||||
@@ -268,7 +268,7 @@
|
||||
/>
|
||||
|
||||
<button
|
||||
class="w-full text-sm font-medium py-3 bg-transparent hover:bg-gray-100 border border-dashed dark:border-gray-850 dark:hover:bg-gray-850 text-center rounded-xl"
|
||||
class="w-full text-sm font-normal py-3 bg-transparent hover:bg-gray-100 border border-dashed dark:border-gray-850 dark:hover:bg-gray-850 text-center rounded-xl"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
document.getElementById('upload-user-csv-input')?.click();
|
||||
@@ -297,9 +297,9 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<Modal size="sm" bind:show>
|
||||
<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('Edit User')}</div>
|
||||
<div class=" text-lg font-normal self-center">{$i18n.t('Edit User')}</div>
|
||||
<button
|
||||
class="self-center"
|
||||
aria-label={$i18n.t('Close')}
|
||||
@@ -101,7 +101,7 @@
|
||||
|
||||
<div class=" flex-1 min-w-0">
|
||||
<div class="overflow-hidden w-ful mb-2">
|
||||
<div class=" self-center capitalize font-medium truncate">
|
||||
<div class=" self-center capitalize font-normal truncate">
|
||||
{selectedUser.name}
|
||||
</div>
|
||||
|
||||
@@ -218,9 +218,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
<!-- Header -->
|
||||
<div class="flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<input
|
||||
class="w-full text-lg bg-transparent outline-hidden font-primary placeholder:text-gray-300 dark:placeholder:text-gray-700"
|
||||
class="w-full text-lg bg-transparent outline-hidden placeholder:text-gray-300 dark:placeholder:text-gray-700"
|
||||
type="text"
|
||||
bind:value={title}
|
||||
placeholder={$i18n.t('Event title')}
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
<!-- Mini Month Calendar -->
|
||||
<div>
|
||||
<div class="flex items-center justify-between px-1 mb-1.5 mt-1.5">
|
||||
<div class="text-[11px] font-medium">{miniMonthNames[miniMonth]} {miniYear}</div>
|
||||
<div class="text-[11px] font-normal">{miniMonthNames[miniMonth]} {miniYear}</div>
|
||||
<div class="flex items-center gap-0.5">
|
||||
<button
|
||||
class="p-0.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition"
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<div>
|
||||
<!-- Header -->
|
||||
<div class="flex justify-between items-center dark:text-gray-100 px-5 pt-4 pb-2">
|
||||
<h3 class="text-base font-medium">{$i18n.t('New Calendar')}</h3>
|
||||
<h3 class="text-base font-normal">{$i18n.t('New Calendar')}</h3>
|
||||
<button
|
||||
class="self-center shrink-0 ml-2"
|
||||
aria-label={$i18n.t('Close')}
|
||||
@@ -81,7 +81,7 @@
|
||||
<div>
|
||||
<div class="mb-1 text-xs text-gray-500">{$i18n.t('Name')}</div>
|
||||
<input
|
||||
class="w-full text-sm bg-transparent outline-hidden font-primary placeholder:text-gray-300 dark:placeholder:text-gray-700"
|
||||
class="w-full text-sm bg-transparent outline-hidden placeholder:text-gray-300 dark:placeholder:text-gray-700"
|
||||
type="text"
|
||||
bind:value={name}
|
||||
placeholder={$i18n.t('Calendar name')}
|
||||
|
||||
@@ -81,9 +81,9 @@
|
||||
<MemberSelector bind:userIds bind:groupIds includeGroups={true} />
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium gap-1.5">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal gap-1.5">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-950 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-950 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
|
||||
? ' cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
<div class="">
|
||||
<button
|
||||
type="button"
|
||||
class=" px-3 py-1.5 gap-1 rounded-xl bg-gray-100/50 dark:text-white dark:bg-gray-850/50 text-black transition font-medium text-xs flex items-center justify-center"
|
||||
class=" px-3 py-1.5 gap-1 rounded-xl bg-gray-100/50 dark:text-white dark:bg-gray-850/50 text-black transition font-normal text-xs flex items-center justify-center"
|
||||
on:click={onAdd}
|
||||
>
|
||||
<Plus className="size-3.5 " />
|
||||
@@ -212,7 +212,7 @@
|
||||
<div class="w-full">
|
||||
{#each users as user, userIdx (user.id)}
|
||||
<div class=" dark:border-gray-850 text-xs flex items-center justify-between">
|
||||
<div class="px-2 py-1.5 font-medium text-gray-900 dark:text-white flex-1">
|
||||
<div class="px-2 py-1.5 font-normal text-gray-900 dark:text-white flex-1">
|
||||
<div class="flex items-center gap-2">
|
||||
<ProfilePreview {user} side="right" align="center" sideOffset={6}>
|
||||
<img
|
||||
@@ -222,7 +222,7 @@
|
||||
/>
|
||||
</ProfilePreview>
|
||||
<Tooltip content={user.email} placement="top-start">
|
||||
<div class="font-medium truncate">{user.name}</div>
|
||||
<div class="font-normal truncate">{user.name}</div>
|
||||
</Tooltip>
|
||||
|
||||
{#if user?.is_active}
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="text-2xl font-medium capitalize">
|
||||
<div class="text-2xl font-normal capitalize">
|
||||
{#if channel?.name}
|
||||
{channel.name}
|
||||
{:else}
|
||||
|
||||
@@ -402,7 +402,7 @@
|
||||
|
||||
{#if message.created_at}
|
||||
<div
|
||||
class="mt-1.5 flex shrink-0 items-center text-xs self-center invisible group-hover:visible text-gray-500 font-medium first-letter:capitalize"
|
||||
class="mt-1.5 flex shrink-0 items-center text-xs self-center invisible group-hover:visible text-gray-500 font-normal first-letter:capitalize"
|
||||
>
|
||||
<Tooltip content={dayjs(message.created_at / 1000000).format('LLLL')}>
|
||||
{dayjs(message.created_at / 1000000).format('HH:mm')}
|
||||
@@ -415,7 +415,7 @@
|
||||
<div class="flex-auto w-0 pl-2">
|
||||
{#if showUserProfile}
|
||||
<Name>
|
||||
<div class=" self-end text-base shrink-0 font-medium truncate">
|
||||
<div class=" self-end text-base shrink-0 font-normal truncate">
|
||||
{#if message?.meta?.model_id}
|
||||
{message?.meta?.model_name ?? message?.meta?.model_id}
|
||||
{:else}
|
||||
@@ -425,7 +425,7 @@
|
||||
|
||||
{#if message.created_at}
|
||||
<div
|
||||
class=" self-center text-xs text-gray-400 font-medium first-letter:capitalize ml-0.5 translate-y-[1px]"
|
||||
class=" self-center text-xs text-gray-400 font-normal first-letter:capitalize ml-0.5 translate-y-[1px]"
|
||||
>
|
||||
<Tooltip content={dayjs(message.created_at / 1000000).format('LLLL')}>
|
||||
<span class="line-clamp-1">
|
||||
@@ -497,7 +497,7 @@
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<div class=" mt-2 mb-1 flex justify-end text-sm font-medium">
|
||||
<div class=" mt-2 mb-1 flex justify-end text-sm font-normal">
|
||||
<div class="flex space-x-1.5">
|
||||
<button
|
||||
id="close-edit-message-button"
|
||||
@@ -593,7 +593,7 @@
|
||||
<Emoji shortCode={reaction.name} />
|
||||
|
||||
{#if reaction.users.length > 0}
|
||||
<div class="text-xs font-medium text-gray-500 dark:text-gray-400">
|
||||
<div class="text-xs font-normal text-gray-500 dark:text-gray-400">
|
||||
{reaction.users?.length}
|
||||
</div>
|
||||
{/if}
|
||||
@@ -628,7 +628,7 @@
|
||||
onThread(message.id);
|
||||
}}
|
||||
>
|
||||
<span class="font-medium mr-1">
|
||||
<span class="font-normal mr-1">
|
||||
{$i18n.t('{{COUNT}} Replies', { COUNT: message.reply_count })}</span
|
||||
><span>
|
||||
{' - '}{$i18n.t('Last reply')}
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
</div>
|
||||
|
||||
<div class=" flex flex-col w-full flex-1">
|
||||
<div class="mb-0.5 font-medium line-clamp-1 pr-2">
|
||||
<div class="mb-0.5 font-normal line-clamp-1 pr-2">
|
||||
{user.name}
|
||||
</div>
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
<ChatBubbleOval className="size-4" />
|
||||
</div>
|
||||
|
||||
<div class="font-medium">
|
||||
<div class="font-normal">
|
||||
{$i18n.t('Message')}
|
||||
</div>
|
||||
</button>
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
{#if channel}
|
||||
<div class="flex flex-col w-full h-full bg-gray-50 dark:bg-gray-850">
|
||||
<div class="sticky top-0 flex items-center justify-between px-3.5 py-3">
|
||||
<div class=" font-medium text-lg">{$i18n.t('Thread')}</div>
|
||||
<div class=" font-normal text-lg">{$i18n.t('Thread')}</div>
|
||||
|
||||
<div>
|
||||
<button
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
alt=""
|
||||
/>
|
||||
<div class="flex-1 text-left min-w-0">
|
||||
<div class="font-medium text-gray-900 dark:text-white truncate">
|
||||
<div class="font-normal text-gray-900 dark:text-white truncate">
|
||||
{name}
|
||||
</div>
|
||||
<div class="text-gray-500 text-xs">
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
<button
|
||||
type="button"
|
||||
class="px-3 py-1.5 gap-1 rounded-xl bg-gray-100/50 dark:bg-gray-850/50 text-black dark:text-white transition font-medium text-xs flex items-center justify-center"
|
||||
class="px-3 py-1.5 gap-1 rounded-xl bg-gray-100/50 dark:bg-gray-850/50 text-black dark:text-white transition font-normal text-xs flex items-center justify-center"
|
||||
on:click={createHandler}
|
||||
disabled={isSaving}
|
||||
>
|
||||
@@ -158,9 +158,9 @@
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="flex justify-end text-sm font-medium gap-1.5">
|
||||
<div class="flex justify-end text-sm font-normal gap-1.5">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {isSaving
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex items-center gap-2 whitespace-nowrap {isSaving
|
||||
? 'cursor-not-allowed'
|
||||
: ''}"
|
||||
type="submit"
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
{/if}
|
||||
</div>
|
||||
{:else}
|
||||
<div class="m-auto font-medium text-xs text-gray-900 dark:text-white">
|
||||
<div class="m-auto font-normal text-xs text-gray-900 dark:text-white">
|
||||
{$i18n.t('No HTML, CSS, or JavaScript content found.')}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
@@ -3108,7 +3108,7 @@
|
||||
}}
|
||||
>
|
||||
<div class=" text-sm text-gray-500 flex-1 line-clamp-3">
|
||||
{$i18n.t('This will delete')} <span class=" font-semibold">{$chatTitle}</span>.
|
||||
{$i18n.t('This will delete')} <span class=" font-normal">{$chatTitle}</span>.
|
||||
</div>
|
||||
</DeleteConfirmDialog>
|
||||
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
<button
|
||||
class="px-2.5 py-1 text-sm rounded-lg transition whitespace-nowrap {activeTab ===
|
||||
'controls'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-medium text-gray-700 dark:text-gray-200'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-normal text-gray-700 dark:text-gray-200'
|
||||
: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100/30 dark:hover:bg-gray-800/20 hover:text-gray-600 dark:hover:text-gray-300'}"
|
||||
on:click={() => (activeTab = 'controls')}
|
||||
>
|
||||
@@ -320,7 +320,7 @@
|
||||
<button
|
||||
class="px-2.5 py-1 text-sm rounded-lg transition whitespace-nowrap {activeTab ===
|
||||
'files'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-medium text-gray-700 dark:text-gray-200'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-normal text-gray-700 dark:text-gray-200'
|
||||
: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100/30 dark:hover:bg-gray-800/20 hover:text-gray-600 dark:hover:text-gray-300'}"
|
||||
on:click={() => (activeTab = 'files')}
|
||||
>
|
||||
@@ -331,7 +331,7 @@
|
||||
<button
|
||||
class="px-2.5 py-1 text-sm rounded-lg transition whitespace-nowrap {activeTab ===
|
||||
'overview'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-medium text-gray-700 dark:text-gray-200'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-normal text-gray-700 dark:text-gray-200'
|
||||
: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100/30 dark:hover:bg-gray-800/20 hover:text-gray-600 dark:hover:text-gray-300'}"
|
||||
on:click={() => (activeTab = 'overview')}
|
||||
>
|
||||
@@ -454,7 +454,7 @@
|
||||
<button
|
||||
class="px-2.5 py-1 text-sm rounded-lg transition whitespace-nowrap {activeTab ===
|
||||
'controls'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-medium text-gray-700 dark:text-gray-200'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-normal text-gray-700 dark:text-gray-200'
|
||||
: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100/30 dark:hover:bg-gray-800/20 hover:text-gray-600 dark:hover:text-gray-300'}"
|
||||
on:click={() => (activeTab = 'controls')}
|
||||
>
|
||||
@@ -465,7 +465,7 @@
|
||||
<button
|
||||
class="px-2.5 py-1 text-sm rounded-lg transition whitespace-nowrap {activeTab ===
|
||||
'files'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-medium text-gray-700 dark:text-gray-200'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-normal text-gray-700 dark:text-gray-200'
|
||||
: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100/30 dark:hover:bg-gray-800/20 hover:text-gray-600 dark:hover:text-gray-300'}"
|
||||
on:click={() => (activeTab = 'files')}
|
||||
>
|
||||
@@ -476,7 +476,7 @@
|
||||
<button
|
||||
class="px-2.5 py-1 text-sm rounded-lg transition whitespace-nowrap {activeTab ===
|
||||
'overview'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-medium text-gray-700 dark:text-gray-200'
|
||||
? 'bg-gray-100/40 dark:bg-gray-800/25 font-normal text-gray-700 dark:text-gray-200'
|
||||
: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100/30 dark:hover:bg-gray-800/20 hover:text-gray-600 dark:hover:text-gray-300'}"
|
||||
on:click={() => (activeTab = 'overview')}
|
||||
>
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
{/if}
|
||||
|
||||
<div
|
||||
class=" mt-2 mb-4 text-3xl text-gray-800 dark:text-gray-100 text-left flex items-center gap-4 font-primary"
|
||||
class=" mt-2 mb-4 text-3xl text-gray-800 dark:text-gray-100 text-left flex items-center gap-4 "
|
||||
>
|
||||
<div>
|
||||
<div class=" capitalize line-clamp-1" in:fade={{ duration: 200 }}>
|
||||
@@ -132,7 +132,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class=" w-full font-primary" in:fade={{ duration: 200, delay: 300 }}>
|
||||
<div class=" w-full " in:fade={{ duration: 200, delay: 300 }}>
|
||||
<Suggestions
|
||||
className="grid grid-cols-2"
|
||||
suggestionPrompts={atSelectedModel?.info?.meta?.suggestion_prompts ??
|
||||
|
||||
@@ -30,13 +30,13 @@
|
||||
let showAdvancedParams = getOpen('advancedParams');
|
||||
|
||||
const compactSectionButtonClass =
|
||||
'w-full py-1 text-xs font-medium text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 transition cursor-pointer select-none';
|
||||
'w-full py-1 text-xs font-normal text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 transition cursor-pointer select-none';
|
||||
</script>
|
||||
|
||||
<div class=" dark:text-white">
|
||||
{#if !embed}
|
||||
<div class=" flex items-center justify-between dark:text-gray-100 mb-2">
|
||||
<div class=" text-md self-center font-primary">{$i18n.t('Controls')}</div>
|
||||
<div class=" text-md self-center ">{$i18n.t('Controls')}</div>
|
||||
<button
|
||||
class="self-center"
|
||||
aria-label={$i18n.t('Close chat controls')}
|
||||
|
||||
@@ -1494,7 +1494,7 @@
|
||||
clip-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
<span class="font-medium">{$i18n.t('Terminal')}</span>
|
||||
<span class="font-normal">{$i18n.t('Terminal')}</span>
|
||||
|
||||
{#if terminalExpanded}
|
||||
<div
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
</script>
|
||||
|
||||
<div class="flex items-center gap-2 px-3 py-1.5 bg-gray-50 dark:bg-gray-800/50 shrink-0">
|
||||
<span class="text-xs font-medium text-gray-600 dark:text-gray-400 flex-1 truncate">
|
||||
<span class="text-xs font-normal text-gray-600 dark:text-gray-400 flex-1 truncate">
|
||||
{$i18n.t('{{count}} selected', { count })}
|
||||
</span>
|
||||
|
||||
|
||||
@@ -319,7 +319,7 @@
|
||||
<button
|
||||
class="shrink-0 px-3 py-1 text-xs rounded-md transition-colors
|
||||
{selectedExcelSheet === sheet
|
||||
? 'bg-gray-200 dark:bg-gray-700 text-gray-800 dark:text-gray-200 font-medium'
|
||||
? 'bg-gray-200 dark:bg-gray-700 text-gray-800 dark:text-gray-200 font-normal'
|
||||
: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800'}"
|
||||
on:click={() => onSheetChange?.(sheet)}
|
||||
>
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
<div class="px-2 py-1">
|
||||
<button
|
||||
class="flex items-center gap-1 w-full text-xs font-medium text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 transition"
|
||||
class="flex items-center gap-1 w-full text-xs font-normal text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 transition"
|
||||
on:click={() => (expanded = !expanded)}
|
||||
>
|
||||
<svg
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
<button
|
||||
class="shrink-0 px-2 py-1 text-xs rounded-lg transition
|
||||
{table === selectedTable && !queryMode
|
||||
? 'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-200 font-medium'
|
||||
? 'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-200 font-normal'
|
||||
: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800'}"
|
||||
on:click={() => selectTable(table)}
|
||||
>
|
||||
@@ -150,7 +150,7 @@
|
||||
<button
|
||||
class="shrink-0 px-2 py-1 text-xs rounded-lg transition font-mono
|
||||
{queryMode
|
||||
? 'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-200 font-medium'
|
||||
? 'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-200 font-normal'
|
||||
: 'text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800'}"
|
||||
on:click={() => {
|
||||
queryMode = !queryMode;
|
||||
@@ -187,7 +187,7 @@
|
||||
<span class="text-[0.6rem] text-gray-400 dark:text-gray-600 select-none">⌘+Enter</span>
|
||||
{/if}
|
||||
<button
|
||||
class="shrink-0 px-2.5 py-0.5 text-[0.65rem] font-medium rounded hover:bg-gray-200 dark:hover:bg-gray-800 transition text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300"
|
||||
class="shrink-0 px-2.5 py-0.5 text-[0.65rem] font-normal rounded hover:bg-gray-200 dark:hover:bg-gray-800 transition text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300"
|
||||
on:click={runQuery}
|
||||
>
|
||||
{$i18n.t('Run')}
|
||||
|
||||
@@ -1233,7 +1233,7 @@
|
||||
/>
|
||||
|
||||
{#if loaded}
|
||||
<div class="w-full font-primary">
|
||||
<div class="w-full ">
|
||||
<div class=" mx-auto inset-x-0 bg-transparent flex justify-center">
|
||||
<div
|
||||
class="flex flex-col px-3 {($settings?.widescreenMode ?? null)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<Modal bind:show size="sm">
|
||||
<div class="flex flex-col h-full">
|
||||
<div class="flex justify-between items-center dark:text-gray-100 px-5 pt-4 pb-1.5">
|
||||
<h1 class="text-lg font-medium self-center font-primary">
|
||||
<h1 class="text-lg font-normal self-center ">
|
||||
{$i18n.t('Attach Webpage')}
|
||||
</h1>
|
||||
<button
|
||||
@@ -79,7 +79,7 @@
|
||||
|
||||
<div class="flex justify-end gap-2 pt-3 bg-gray-50 dark:bg-gray-900/50">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-800 text-white dark:bg-white dark:text-black dark:hover:bg-gray-200 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-800 text-white dark:bg-white dark:text-black dark:hover:bg-gray-200 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Add')}
|
||||
|
||||
@@ -959,7 +959,7 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<div class="line-clamp-1 text-sm font-medium">
|
||||
<div class="line-clamp-1 text-sm font-normal">
|
||||
{#if loading}
|
||||
{$i18n.t('Thinking...')}
|
||||
{:else if muted}
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
on:focus={() => {}}
|
||||
data-selected={promptIdx === selectedPromptIdx}
|
||||
>
|
||||
<span class=" font-medium text-black dark:text-gray-100">
|
||||
<span class=" font-normal text-black dark:text-gray-100">
|
||||
{promptItem.command}
|
||||
</span>
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
const description = escapeTooltipText(skill.description);
|
||||
|
||||
return `<div class="max-w-80 whitespace-normal text-left leading-snug">
|
||||
<span class="break-words font-medium">${name}</span>${description ? `: <span class="break-words opacity-80">${description}</span>` : ''}
|
||||
<span class="break-words font-normal">${name}</span>${description ? `: <span class="break-words opacity-80">${description}</span>` : ''}
|
||||
</div>`;
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<Modal bind:show size="md">
|
||||
<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('Input Variables')}</div>
|
||||
<div class=" text-lg font-normal self-center">{$i18n.t('Input Variables')}</div>
|
||||
<button
|
||||
class="self-center"
|
||||
on:click={() => {
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
<div class=" py-0.5 w-full justify-between">
|
||||
<div class="flex w-full justify-between mb-1.5">
|
||||
<div class=" self-center text-xs font-medium">
|
||||
<div class=" self-center text-xs font-normal">
|
||||
{variable}
|
||||
|
||||
{#if variables[variable]?.required ?? false}
|
||||
@@ -350,9 +350,9 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-3 text-sm font-medium">
|
||||
<div class="flex justify-end pt-3 text-sm font-normal">
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-white hover:bg-gray-100 text-black dark:bg-black dark:text-white dark:hover:bg-gray-900 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-white hover:bg-gray-100 text-black dark:bg-black dark:text-white dark:hover:bg-gray-900 transition rounded-full"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
show = false;
|
||||
@@ -362,7 +362,7 @@
|
||||
</button>
|
||||
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
type="submit"
|
||||
>
|
||||
{$i18n.t('Save')}
|
||||
|
||||
@@ -507,7 +507,7 @@
|
||||
|
||||
|
||||
{loading ? ' text-gray-500 dark:text-gray-400 ' : ' text-indigo-400 '}
|
||||
font-medium flex-1 mx-auto text-center"
|
||||
font-normal flex-1 mx-auto text-center"
|
||||
>
|
||||
{formatSeconds(durationSeconds)}
|
||||
</div>
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
{@const urlCitations = citations.filter((c) => c?.source?.name?.startsWith('http'))}
|
||||
<div class=" py-1 -mx-0.5 w-full flex gap-1 items-center flex-wrap">
|
||||
<button
|
||||
class="text-xs font-medium text-gray-600 dark:text-gray-300 px-3.5 h-8 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition flex items-center gap-1 border border-gray-50 dark:border-gray-850/30"
|
||||
class="text-xs font-normal text-gray-600 dark:text-gray-300 px-3.5 h-8 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition flex items-center gap-1 border border-gray-50 dark:border-gray-850/30"
|
||||
aria-label={citations.length === 1
|
||||
? $i18n.t('Toggle 1 source')
|
||||
: $i18n.t('Toggle {{COUNT}} sources', { COUNT: citations.length })}
|
||||
@@ -185,7 +185,7 @@
|
||||
{/each}
|
||||
{#if citations.length > 3}
|
||||
<div
|
||||
class="size-4 rounded-full shrink-0 border border-white dark:border-gray-850 bg-gray-100 dark:bg-gray-800 flex items-center justify-center text-[8px] font-semibold text-gray-500 dark:text-gray-400 whitespace-nowrap tracking-tighter"
|
||||
class="size-4 rounded-full shrink-0 border border-white dark:border-gray-850 bg-gray-100 dark:bg-gray-800 flex items-center justify-center text-[8px] font-normal text-gray-500 dark:text-gray-400 whitespace-nowrap tracking-tighter"
|
||||
aria-hidden="true"
|
||||
>
|
||||
+{citations.length - Math.min(urlCitations.length, 3)}
|
||||
@@ -221,7 +221,7 @@
|
||||
selectedCitation = citation;
|
||||
}}
|
||||
>
|
||||
<div class=" font-medium bg-gray-50 dark:bg-gray-850 rounded-md px-1">
|
||||
<div class=" font-normal bg-gray-50 dark:bg-gray-850 rounded-md px-1">
|
||||
{idx + 1}
|
||||
</div>
|
||||
<div
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<Modal size="lg" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-300 px-4.5 pt-3 pb-2">
|
||||
<div class=" text-lg font-medium self-center flex items-center">
|
||||
<div class=" text-lg font-normal self-center flex items-center">
|
||||
{#if citation?.source?.name}
|
||||
{@const document = mergedDocuments?.[0]}
|
||||
{#if document?.metadata?.file_id || document.source?.url?.includes('http')}
|
||||
@@ -148,7 +148,7 @@
|
||||
<div class="flex flex-col w-full gap-2">
|
||||
{#if document.metadata?.parameters}
|
||||
<div>
|
||||
<div class="text-sm font-medium dark:text-gray-300 mb-1">
|
||||
<div class="text-sm font-normal dark:text-gray-300 mb-1">
|
||||
{$i18n.t('Parameters')}
|
||||
</div>
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
|
||||
<div>
|
||||
<div
|
||||
class=" text-sm font-medium dark:text-gray-300 flex items-center gap-2 w-fit mb-1"
|
||||
class=" text-sm font-normal dark:text-gray-300 flex items-center gap-2 w-fit mb-1"
|
||||
>
|
||||
{#if document.source?.url?.includes('http')}
|
||||
{@const snippetUrl = getTextFragmentUrl(document)}
|
||||
@@ -190,7 +190,7 @@
|
||||
|
||||
{#if typeof percentage === 'number'}
|
||||
<span
|
||||
class={`px-1 rounded-sm font-medium ${getRelevanceColor(percentage)}`}
|
||||
class={`px-1 rounded-sm font-normal ${getRelevanceColor(percentage)}`}
|
||||
>
|
||||
{percentage.toFixed(2)}%
|
||||
</span>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<Modal size="lg" bind:show>
|
||||
<div>
|
||||
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
|
||||
<div class=" text-lg font-medium self-center capitalize">
|
||||
<div class=" text-lg font-normal self-center capitalize">
|
||||
{$i18n.t('Citations')}
|
||||
</div>
|
||||
<button
|
||||
@@ -66,7 +66,7 @@
|
||||
selectedCitation = citation;
|
||||
}}
|
||||
>
|
||||
<div class=" font-medium">
|
||||
<div class=" font-normal">
|
||||
{idx + 1}.
|
||||
</div>
|
||||
<div
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<Modal size="lg" bind:show>
|
||||
<div>
|
||||
<div class="flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
|
||||
<div class="text-lg font-medium self-center flex flex-col gap-0.5 capitalize">
|
||||
<div class="text-lg font-normal self-center flex flex-col gap-0.5 capitalize">
|
||||
{#if codeExecution?.result}
|
||||
<div>
|
||||
{#if codeExecution.result?.error}
|
||||
@@ -91,7 +91,7 @@
|
||||
{#if codeExecution?.result?.files && codeExecution?.result?.files.length > 0}
|
||||
<div class="flex flex-col w-full">
|
||||
<hr class="border-gray-100/30 dark:border-gray-850/30 my-2" />
|
||||
<div class=" text-sm font-medium dark:text-gray-300">
|
||||
<div class=" text-sm font-normal dark:text-gray-300">
|
||||
{$i18n.t('Files')}
|
||||
</div>
|
||||
<ul class="mt-1 list-disc pl-4 text-xs">
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
{#if codeExecutions.length > 0}
|
||||
<div class="mt-1 mb-2 w-full flex gap-1 items-center flex-wrap">
|
||||
{#each codeExecutions as execution (execution.id)}
|
||||
<div class="flex gap-1 text-xs font-semibold">
|
||||
<div class="flex gap-1 text-xs font-normal">
|
||||
<button
|
||||
class="flex dark:text-gray-300 py-1 px-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-xl max-w-96"
|
||||
on:click={() => {
|
||||
|
||||
@@ -102,7 +102,7 @@ Renders the following Markdown as alerts:
|
||||
<div class={`border-l-4 pl-2.5 ${alertStyles[alert.type].border} my-0.5`}>
|
||||
<div class="{alertStyles[alert.type].text} items-center flex gap-1 py-1.5">
|
||||
<svelte:component this={alertStyles[alert.type].icon} className="inline-block size-4" />
|
||||
<span class=" font-medium">{alert.type}</span>
|
||||
<span class=" font-normal">{alert.type}</span>
|
||||
</div>
|
||||
<div class="pb-2">
|
||||
<MarkdownTokens id={`${id}-${tokenIdx}`} tokens={alert.tokens} {onTaskClick} {onSourceClick} />
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<div class="relative group my-2 rounded-2xl border border-gray-100 dark:border-gray-800 px-4 py-3">
|
||||
<!-- Header row: type badge + copy button -->
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<span class="text-xs font-medium text-gray-500 dark:text-gray-400">
|
||||
<span class="text-xs font-normal text-gray-500 dark:text-gray-400">
|
||||
{label}
|
||||
</span>
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
>
|
||||
<div class="flex flex-col justify-center w-full min-w-0">
|
||||
<div class="dark:text-gray-100 text-sm flex justify-between items-center gap-2">
|
||||
<div class="font-medium line-clamp-1 flex-1 min-w-0">
|
||||
<div class="font-normal line-clamp-1 flex-1 min-w-0">
|
||||
{#if loading}
|
||||
<span class="text-gray-400">...</span>
|
||||
{:else}
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
<div class="w-full">
|
||||
<div class=" flex w-full mb-4.5 border-b border-gray-200 dark:border-gray-850">
|
||||
<div
|
||||
class="flex gap-2 scrollbar-none overflow-x-auto w-fit text-center font-medium bg-transparent pt-1 text-sm"
|
||||
class="flex gap-2 scrollbar-none overflow-x-auto w-fit text-center font-normal bg-transparent pt-1 text-sm"
|
||||
on:wheel|preventDefault={(e) => {
|
||||
e.currentTarget.scrollLeft += e.deltaY;
|
||||
}}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<div class=" self-center font-semibold line-clamp-1 flex gap-1 items-center">
|
||||
<div class=" self-center font-normal line-clamp-1 flex gap-1 items-center">
|
||||
<slot />
|
||||
</div>
|
||||
|
||||
@@ -259,7 +259,7 @@
|
||||
<!-- Role label -->
|
||||
<div class="flex items-start pt-1.5">
|
||||
<div
|
||||
class="text-[11px] font-semibold uppercase tracking-wide min-w-[4.5rem] text-gray-400 dark:text-gray-500"
|
||||
class="text-[11px] font-normal uppercase tracking-wide min-w-[4.5rem] text-gray-400 dark:text-gray-500"
|
||||
>
|
||||
{getItemLabel(di)}
|
||||
</div>
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
</script>
|
||||
|
||||
{#if message?.arena}
|
||||
<div class="text-xs font-medium pt-1.5 -mb-0.5">
|
||||
<div class="text-xs font-normal pt-1.5 -mb-0.5">
|
||||
{$i18n.t('This response was generated by "{{model}}"', {
|
||||
model: selectedModel ? (selectedModel?.name ?? selectedModel.id) : message.selectedModelId
|
||||
})}
|
||||
@@ -116,7 +116,7 @@
|
||||
id="message-feedback-{message.id}"
|
||||
>
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="text-sm font-medium">{$i18n.t('How would you rate this response?')}</div>
|
||||
<div class="text-sm font-normal">{$i18n.t('How would you rate this response?')}</div>
|
||||
|
||||
<!-- <div class=" text-sm">{$i18n.t('Tell us more:')}</div> -->
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
|
||||
<div>
|
||||
{#if reasons.length > 0}
|
||||
<div class="text-sm mt-1.5 font-medium">{$i18n.t('Why?')}</div>
|
||||
<div class="text-sm mt-1.5 font-normal">{$i18n.t('Why?')}</div>
|
||||
|
||||
<div class="flex flex-wrap gap-1.5 text-sm mt-1.5">
|
||||
{#each reasons as reason}
|
||||
@@ -244,7 +244,7 @@
|
||||
</div>
|
||||
|
||||
<button
|
||||
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
class="px-3.5 py-1.5 text-sm font-normal bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
|
||||
on:click={() => {
|
||||
saveHandler();
|
||||
}}
|
||||
@@ -261,7 +261,7 @@
|
||||
class="flex cursor-pointer items-center justify-between hover:bg-gray-50 dark:hover:bg-gray-850 w-full px-3 py-2 rounded-xl transition"
|
||||
>
|
||||
<div class="self-center">
|
||||
<div class="text-sm font-medium">
|
||||
<div class="text-sm font-normal">
|
||||
{$i18n.t('Leave a public review for {{modelName}}', { modelName: message.model })}
|
||||
</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
|
||||
@@ -761,7 +761,7 @@
|
||||
/>
|
||||
{/if}
|
||||
|
||||
<div class=" mt-2 mb-1 flex justify-between text-sm font-medium">
|
||||
<div class=" mt-2 mb-1 flex justify-between text-sm font-normal">
|
||||
<div>
|
||||
<button
|
||||
id="save-new-message-button"
|
||||
@@ -921,7 +921,7 @@
|
||||
|
||||
{#if messageIndexEdit}
|
||||
<div
|
||||
class="text-sm flex justify-center font-semibold self-center dark:text-gray-100 min-w-fit"
|
||||
class="text-sm flex justify-center font-normal self-center dark:text-gray-100 min-w-fit"
|
||||
>
|
||||
<input
|
||||
id="message-index-input-{message.id}"
|
||||
@@ -942,13 +942,13 @@
|
||||
messageIndexEdit = false;
|
||||
}
|
||||
}}
|
||||
class="bg-transparent font-semibold self-center dark:text-gray-100 min-w-fit outline-hidden"
|
||||
class="bg-transparent font-normal self-center dark:text-gray-100 min-w-fit outline-hidden"
|
||||
/>/{siblings.length}
|
||||
</div>
|
||||
{:else}
|
||||
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
||||
<div
|
||||
class="text-sm tracking-widest font-semibold self-center dark:text-gray-100 min-w-fit"
|
||||
class="text-sm tracking-widest font-normal self-center dark:text-gray-100 min-w-fit"
|
||||
on:dblclick={async () => {
|
||||
messageIndexEdit = true;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</script>
|
||||
|
||||
<div class="mt-4">
|
||||
<div class="text-sm font-medium">
|
||||
<div class="text-sm font-normal">
|
||||
{$i18n.t('Follow up')}
|
||||
</div>
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
on:click={() => (expanded = !expanded)}
|
||||
>
|
||||
<span class="w-1.5 h-1.5 rounded-full bg-gray-300 dark:bg-gray-600 shrink-0"></span>
|
||||
<span class="text-[0.75rem] font-medium shrink-0">
|
||||
<span class="text-[0.75rem] font-normal shrink-0">
|
||||
{$i18n.t('Background sub-agent finished')}
|
||||
</span>
|
||||
{#if summary}
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
<Name>
|
||||
{#if message.user}
|
||||
{$i18n.t('You')}
|
||||
<span class=" text-gray-500 text-sm font-medium">{message?.user ?? ''}</span>
|
||||
<span class=" text-gray-500 text-sm font-normal">{message?.user ?? ''}</span>
|
||||
{:else if $settings.showUsername || $_user?.name !== user?.name}
|
||||
{user?.name ?? $i18n.t('You')}
|
||||
{:else}
|
||||
@@ -299,7 +299,7 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class=" mt-2 mb-1 flex justify-between text-sm font-medium">
|
||||
<div class=" mt-2 mb-1 flex justify-between text-sm font-normal">
|
||||
<div>
|
||||
<button
|
||||
id="save-edit-message-button"
|
||||
@@ -414,7 +414,7 @@
|
||||
|
||||
{#if messageIndexEdit}
|
||||
<div
|
||||
class="text-sm flex justify-center font-semibold self-center dark:text-gray-100 min-w-fit"
|
||||
class="text-sm flex justify-center font-normal self-center dark:text-gray-100 min-w-fit"
|
||||
>
|
||||
<input
|
||||
id="message-index-input-{message.id}"
|
||||
@@ -435,13 +435,13 @@
|
||||
messageIndexEdit = false;
|
||||
}
|
||||
}}
|
||||
class="bg-transparent font-semibold self-center dark:text-gray-100 min-w-fit outline-hidden"
|
||||
class="bg-transparent font-normal self-center dark:text-gray-100 min-w-fit outline-hidden"
|
||||
/>/{siblings.length}
|
||||
</div>
|
||||
{:else}
|
||||
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
||||
<div
|
||||
class="text-sm tracking-widest font-semibold self-center dark:text-gray-100 min-w-fit"
|
||||
class="text-sm tracking-widest font-normal self-center dark:text-gray-100 min-w-fit"
|
||||
on:dblclick={async () => {
|
||||
messageIndexEdit = true;
|
||||
|
||||
@@ -598,7 +598,7 @@
|
||||
|
||||
{#if messageIndexEdit}
|
||||
<div
|
||||
class="text-sm flex justify-center font-semibold self-center dark:text-gray-100 min-w-fit"
|
||||
class="text-sm flex justify-center font-normal self-center dark:text-gray-100 min-w-fit"
|
||||
>
|
||||
<input
|
||||
id="message-index-input-{message.id}"
|
||||
@@ -619,13 +619,13 @@
|
||||
messageIndexEdit = false;
|
||||
}
|
||||
}}
|
||||
class="bg-transparent font-semibold self-center dark:text-gray-100 min-w-fit outline-hidden"
|
||||
class="bg-transparent font-normal self-center dark:text-gray-100 min-w-fit outline-hidden"
|
||||
/>/{siblings.length}
|
||||
</div>
|
||||
{:else}
|
||||
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
||||
<div
|
||||
class="text-sm tracking-widest font-semibold self-center dark:text-gray-100 min-w-fit"
|
||||
class="text-sm tracking-widest font-normal self-center dark:text-gray-100 min-w-fit"
|
||||
on:dblclick={async () => {
|
||||
messageIndexEdit = true;
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
{#each item.model?.tags.sort((a, b) => a.name.localeCompare(b.name)) as tag}
|
||||
<Tooltip content={tag.name} className="flex-shrink-0">
|
||||
<div
|
||||
class=" text-xs font-semibold px-1 rounded-sm uppercase bg-gray-500/20 text-gray-700 dark:text-gray-200"
|
||||
class=" text-xs font-normal px-1 rounded-sm uppercase bg-gray-500/20 text-gray-700 dark:text-gray-200"
|
||||
>
|
||||
{tag.name}
|
||||
</div>
|
||||
@@ -157,7 +157,7 @@
|
||||
<div slot="tooltip" id="tags-{item.model.id}">
|
||||
{#each item.model?.tags.sort((a, b) => a.name.localeCompare(b.name)) as tag}
|
||||
<Tooltip content={tag.name} className="flex-shrink-0">
|
||||
<div class=" text-xs font-medium rounded-sm uppercase text-white">
|
||||
<div class=" text-xs font-normal rounded-sm uppercase text-white">
|
||||
{tag.name}
|
||||
</div>
|
||||
</Tooltip>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user