This commit is contained in:
Timothy Jaeryang Baek
2026-07-14 04:15:20 -04:00
parent a7fbf66269
commit aedb6bef4e
208 changed files with 1056 additions and 1066 deletions
@@ -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>
+1 -1
View File
@@ -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}
>
+9 -9
View File
@@ -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')}
+1 -1
View File
@@ -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"
+31 -31
View File
@@ -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}
+1 -1
View File
@@ -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"
+5 -5
View File
@@ -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')}