Browse Source

feat: hide all API keys by default in admin settings

Jun Siang Cheah 10 months ago
parent
commit
d5b91fb084
42 changed files with 525 additions and 101 deletions
  1. 101 15
      src/lib/components/admin/Settings/Audio.svelte
  2. 44 2
      src/lib/components/admin/Settings/Connections.svelte
  3. 77 22
      src/lib/components/admin/Settings/Documents.svelte
  4. 50 7
      src/lib/components/admin/Settings/Images.svelte
  5. 253 18
      src/lib/components/admin/Settings/WebSearch.svelte
  6. 0 1
      src/lib/i18n/locales/ar-BH/translation.json
  7. 0 1
      src/lib/i18n/locales/bg-BG/translation.json
  8. 0 1
      src/lib/i18n/locales/bn-BD/translation.json
  9. 0 1
      src/lib/i18n/locales/ca-ES/translation.json
  10. 0 1
      src/lib/i18n/locales/ceb-PH/translation.json
  11. 0 1
      src/lib/i18n/locales/de-DE/translation.json
  12. 0 1
      src/lib/i18n/locales/dg-DG/translation.json
  13. 0 1
      src/lib/i18n/locales/en-GB/translation.json
  14. 0 1
      src/lib/i18n/locales/en-US/translation.json
  15. 0 1
      src/lib/i18n/locales/es-ES/translation.json
  16. 0 1
      src/lib/i18n/locales/fa-IR/translation.json
  17. 0 1
      src/lib/i18n/locales/fi-FI/translation.json
  18. 0 1
      src/lib/i18n/locales/fr-CA/translation.json
  19. 0 1
      src/lib/i18n/locales/fr-FR/translation.json
  20. 0 1
      src/lib/i18n/locales/he-IL/translation.json
  21. 0 1
      src/lib/i18n/locales/hi-IN/translation.json
  22. 0 1
      src/lib/i18n/locales/hr-HR/translation.json
  23. 0 1
      src/lib/i18n/locales/it-IT/translation.json
  24. 0 1
      src/lib/i18n/locales/ja-JP/translation.json
  25. 0 1
      src/lib/i18n/locales/ka-GE/translation.json
  26. 0 1
      src/lib/i18n/locales/ko-KR/translation.json
  27. 0 1
      src/lib/i18n/locales/lt-LT/translation.json
  28. 0 1
      src/lib/i18n/locales/nb-NO/translation.json
  29. 0 1
      src/lib/i18n/locales/nl-NL/translation.json
  30. 0 1
      src/lib/i18n/locales/pa-IN/translation.json
  31. 0 1
      src/lib/i18n/locales/pl-PL/translation.json
  32. 0 1
      src/lib/i18n/locales/pt-BR/translation.json
  33. 0 1
      src/lib/i18n/locales/pt-PT/translation.json
  34. 0 1
      src/lib/i18n/locales/ru-RU/translation.json
  35. 0 1
      src/lib/i18n/locales/sr-RS/translation.json
  36. 0 1
      src/lib/i18n/locales/sv-SE/translation.json
  37. 0 1
      src/lib/i18n/locales/tk-TW/translation.json
  38. 0 1
      src/lib/i18n/locales/tr-TR/translation.json
  39. 0 1
      src/lib/i18n/locales/uk-UA/translation.json
  40. 0 1
      src/lib/i18n/locales/vi-VN/translation.json
  41. 0 1
      src/lib/i18n/locales/zh-CN/translation.json
  42. 0 1
      src/lib/i18n/locales/zh-TW/translation.json

+ 101 - 15
src/lib/components/admin/Settings/Audio.svelte

@@ -18,11 +18,13 @@
 	let TTS_ENGINE = '';
 	let TTS_ENGINE = '';
 	let TTS_MODEL = '';
 	let TTS_MODEL = '';
 	let TTS_VOICE = '';
 	let TTS_VOICE = '';
+	let showTTSKey = false;
 
 
 	let STT_OPENAI_API_BASE_URL = '';
 	let STT_OPENAI_API_BASE_URL = '';
 	let STT_OPENAI_API_KEY = '';
 	let STT_OPENAI_API_KEY = '';
 	let STT_ENGINE = '';
 	let STT_ENGINE = '';
 	let STT_MODEL = '';
 	let STT_MODEL = '';
+	let showSTTKey = false;
 
 
 	let voices = [];
 	let voices = [];
 	let models = [];
 	let models = [];
@@ -137,18 +139,60 @@
 					<div>
 					<div>
 						<div class="mt-1 flex gap-2 mb-1">
 						<div class="mt-1 flex gap-2 mb-1">
 							<input
 							<input
-								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+								class="flex-1 w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 								placeholder={$i18n.t('API Base URL')}
 								placeholder={$i18n.t('API Base URL')}
 								bind:value={STT_OPENAI_API_BASE_URL}
 								bind:value={STT_OPENAI_API_BASE_URL}
 								required
 								required
 							/>
 							/>
 
 
-							<input
-								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-								placeholder={$i18n.t('API Key')}
-								bind:value={STT_OPENAI_API_KEY}
-								required
-							/>
+							<div class="flex flex-1">
+								<input
+									class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+									placeholder={$i18n.t('API Key')}
+									bind:value={STT_OPENAI_API_KEY}
+									required
+									{...{ type: showSTTKey ? 'text' : 'password' }}
+								/>
+								<button
+									class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+									on:click={(e) => {
+										e.preventDefault();
+										showSTTKey = !showSTTKey;
+									}}
+								>
+									{#if showSTTKey}
+										<svg
+											xmlns="http://www.w3.org/2000/svg"
+											viewBox="0 0 16 16"
+											fill="currentColor"
+											class="w-4 h-4"
+										>
+											<path
+												fill-rule="evenodd"
+												d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+												clip-rule="evenodd"
+											/>
+											<path
+												d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+											/>
+										</svg>
+									{:else}
+										<svg
+											xmlns="http://www.w3.org/2000/svg"
+											viewBox="0 0 16 16"
+											fill="currentColor"
+											class="w-4 h-4"
+										>
+											<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+											<path
+												fill-rule="evenodd"
+												d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+												clip-rule="evenodd"
+											/>
+										</svg>
+									{/if}
+								</button>
+							</div>
 						</div>
 						</div>
 					</div>
 					</div>
 
 
@@ -198,7 +242,7 @@
 							}}
 							}}
 						>
 						>
 							<option value="">{$i18n.t('Web API')}</option>
 							<option value="">{$i18n.t('Web API')}</option>
-							<option value="openai">{$i18n.t('Open AI')}</option>
+							<option value="openai">{$i18n.t('OpenAI')}</option>
 						</select>
 						</select>
 					</div>
 					</div>
 				</div>
 				</div>
@@ -207,18 +251,60 @@
 					<div>
 					<div>
 						<div class="mt-1 flex gap-2 mb-1">
 						<div class="mt-1 flex gap-2 mb-1">
 							<input
 							<input
-								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+								class="flex-1 w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 								placeholder={$i18n.t('API Base URL')}
 								placeholder={$i18n.t('API Base URL')}
 								bind:value={TTS_OPENAI_API_BASE_URL}
 								bind:value={TTS_OPENAI_API_BASE_URL}
 								required
 								required
 							/>
 							/>
 
 
-							<input
-								class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-								placeholder={$i18n.t('API Key')}
-								bind:value={TTS_OPENAI_API_KEY}
-								required
-							/>
+							<div class="flex-1 flex">
+								<input
+									class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+									placeholder={$i18n.t('API Key')}
+									bind:value={TTS_OPENAI_API_KEY}
+									required
+									{...{ type: showTTSKey ? 'text' : 'password' }}
+								/>
+								<button
+									class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+									on:click={(e) => {
+										e.preventDefault();
+										showTTSKey = !showTTSKey;
+									}}
+								>
+									{#if showSTTKey}
+										<svg
+											xmlns="http://www.w3.org/2000/svg"
+											viewBox="0 0 16 16"
+											fill="currentColor"
+											class="w-4 h-4"
+										>
+											<path
+												fill-rule="evenodd"
+												d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+												clip-rule="evenodd"
+											/>
+											<path
+												d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+											/>
+										</svg>
+									{:else}
+										<svg
+											xmlns="http://www.w3.org/2000/svg"
+											viewBox="0 0 16 16"
+											fill="currentColor"
+											class="w-4 h-4"
+										>
+											<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+											<path
+												fill-rule="evenodd"
+												d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+												clip-rule="evenodd"
+											/>
+										</svg>
+									{/if}
+								</button>
+							</div>
 						</div>
 						</div>
 					</div>
 					</div>
 				{/if}
 				{/if}

+ 44 - 2
src/lib/components/admin/Settings/Connections.svelte

@@ -1,6 +1,7 @@
 <script lang="ts">
 <script lang="ts">
 	import { models, user } from '$lib/stores';
 	import { models, user } from '$lib/stores';
 	import { createEventDispatcher, onMount, getContext, tick } from 'svelte';
 	import { createEventDispatcher, onMount, getContext, tick } from 'svelte';
+
 	const dispatch = createEventDispatcher();
 	const dispatch = createEventDispatcher();
 
 
 	import {
 	import {
@@ -37,6 +38,7 @@
 
 
 	let OPENAI_API_KEYS = [''];
 	let OPENAI_API_KEYS = [''];
 	let OPENAI_API_BASE_URLS = [''];
 	let OPENAI_API_BASE_URLS = [''];
+	let showAPIKeys = [false];
 
 
 	let pipelineUrls = {};
 	let pipelineUrls = {};
 
 
@@ -228,13 +230,53 @@
 										{/if}
 										{/if}
 									</div>
 									</div>
 
 
-									<div class="flex-1">
+									<div class="flex-1 flex">
 										<input
 										<input
-											class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+											class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 											placeholder={$i18n.t('API Key')}
 											placeholder={$i18n.t('API Key')}
 											bind:value={OPENAI_API_KEYS[idx]}
 											bind:value={OPENAI_API_KEYS[idx]}
 											autocomplete="off"
 											autocomplete="off"
+											{...{ type: showAPIKeys[idx] ? 'text' : 'password' }}
 										/>
 										/>
+										<button
+											class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+											on:click={(e) => {
+												e.preventDefault();
+												showAPIKeys[idx] = !showAPIKeys[idx];
+											}}
+										>
+											{#if showAPIKeys[idx]}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path
+														fill-rule="evenodd"
+														d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+														clip-rule="evenodd"
+													/>
+													<path
+														d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+													/>
+												</svg>
+											{:else}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+													<path
+														fill-rule="evenodd"
+														d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+														clip-rule="evenodd"
+													/>
+												</svg>
+											{/if}
+										</button>
 									</div>
 									</div>
 									<div class="self-center flex items-center">
 									<div class="self-center flex items-center">
 										{#if idx === 0}
 										{#if idx === 0}

+ 77 - 22
src/lib/components/admin/Settings/Documents.svelte

@@ -41,6 +41,7 @@
 	let pdfExtractImages = true;
 	let pdfExtractImages = true;
 
 
 	let OpenAIKey = '';
 	let OpenAIKey = '';
+	let showOpenAIKey = false;
 	let OpenAIUrl = '';
 	let OpenAIUrl = '';
 	let OpenAIBatchSize = 1;
 	let OpenAIBatchSize = 1;
 
 
@@ -280,24 +281,28 @@
 								viewBox="0 0 24 24"
 								viewBox="0 0 24 24"
 								fill="currentColor"
 								fill="currentColor"
 								xmlns="http://www.w3.org/2000/svg"
 								xmlns="http://www.w3.org/2000/svg"
-								><style>
+							>
+								<style>
 									.spinner_ajPY {
 									.spinner_ajPY {
 										transform-origin: center;
 										transform-origin: center;
 										animation: spinner_AtaB 0.75s infinite linear;
 										animation: spinner_AtaB 0.75s infinite linear;
 									}
 									}
+
 									@keyframes spinner_AtaB {
 									@keyframes spinner_AtaB {
 										100% {
 										100% {
 											transform: rotate(360deg);
 											transform: rotate(360deg);
 										}
 										}
 									}
 									}
-								</style><path
+								</style>
+								<path
 									d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
 									d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
 									opacity=".25"
 									opacity=".25"
-								/><path
+								/>
+								<path
 									d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
 									d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
 									class="spinner_ajPY"
 									class="spinner_ajPY"
-								/></svg
-							>
+								/>
+							</svg>
 						</div>
 						</div>
 					{/if}
 					{/if}
 				</button>
 				</button>
@@ -330,18 +335,60 @@
 			{#if embeddingEngine === 'openai'}
 			{#if embeddingEngine === 'openai'}
 				<div class="my-0.5 flex gap-2">
 				<div class="my-0.5 flex gap-2">
 					<input
 					<input
-						class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+						class="flex-1 w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 						placeholder={$i18n.t('API Base URL')}
 						placeholder={$i18n.t('API Base URL')}
 						bind:value={OpenAIUrl}
 						bind:value={OpenAIUrl}
 						required
 						required
 					/>
 					/>
 
 
-					<input
-						class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-						placeholder={$i18n.t('API Key')}
-						bind:value={OpenAIKey}
-						required
-					/>
+					<div class="flex-1 flex">
+						<input
+							class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+							placeholder={$i18n.t('API Key')}
+							bind:value={OpenAIKey}
+							required
+							{...{ type: showOpenAIKey ? 'text' : 'password' }}
+						/>
+						<button
+							class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+							on:click={(e) => {
+								e.preventDefault();
+								showOpenAIKey = !showOpenAIKey;
+							}}
+						>
+							{#if showOpenAIKey}
+								<svg
+									xmlns="http://www.w3.org/2000/svg"
+									viewBox="0 0 16 16"
+									fill="currentColor"
+									class="w-4 h-4"
+								>
+									<path
+										fill-rule="evenodd"
+										d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+										clip-rule="evenodd"
+									/>
+									<path
+										d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+									/>
+								</svg>
+							{:else}
+								<svg
+									xmlns="http://www.w3.org/2000/svg"
+									viewBox="0 0 16 16"
+									fill="currentColor"
+									class="w-4 h-4"
+								>
+									<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+									<path
+										fill-rule="evenodd"
+										d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+										clip-rule="evenodd"
+									/>
+								</svg>
+							{/if}
+						</button>
+					</div>
 				</div>
 				</div>
 				<div class="flex mt-0.5 space-x-2">
 				<div class="flex mt-0.5 space-x-2">
 					<div class=" self-center text-xs font-medium">{$i18n.t('Embedding Batch Size')}</div>
 					<div class=" self-center text-xs font-medium">{$i18n.t('Embedding Batch Size')}</div>
@@ -439,24 +486,28 @@
 										viewBox="0 0 24 24"
 										viewBox="0 0 24 24"
 										fill="currentColor"
 										fill="currentColor"
 										xmlns="http://www.w3.org/2000/svg"
 										xmlns="http://www.w3.org/2000/svg"
-										><style>
+									>
+										<style>
 											.spinner_ajPY {
 											.spinner_ajPY {
 												transform-origin: center;
 												transform-origin: center;
 												animation: spinner_AtaB 0.75s infinite linear;
 												animation: spinner_AtaB 0.75s infinite linear;
 											}
 											}
+
 											@keyframes spinner_AtaB {
 											@keyframes spinner_AtaB {
 												100% {
 												100% {
 													transform: rotate(360deg);
 													transform: rotate(360deg);
 												}
 												}
 											}
 											}
-										</style><path
+										</style>
+										<path
 											d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
 											d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
 											opacity=".25"
 											opacity=".25"
-										/><path
+										/>
+										<path
 											d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
 											d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
 											class="spinner_ajPY"
 											class="spinner_ajPY"
-										/></svg
-									>
+										/>
+									</svg>
 								</div>
 								</div>
 							{:else}
 							{:else}
 								<svg
 								<svg
@@ -512,24 +563,28 @@
 										viewBox="0 0 24 24"
 										viewBox="0 0 24 24"
 										fill="currentColor"
 										fill="currentColor"
 										xmlns="http://www.w3.org/2000/svg"
 										xmlns="http://www.w3.org/2000/svg"
-										><style>
+									>
+										<style>
 											.spinner_ajPY {
 											.spinner_ajPY {
 												transform-origin: center;
 												transform-origin: center;
 												animation: spinner_AtaB 0.75s infinite linear;
 												animation: spinner_AtaB 0.75s infinite linear;
 											}
 											}
+
 											@keyframes spinner_AtaB {
 											@keyframes spinner_AtaB {
 												100% {
 												100% {
 													transform: rotate(360deg);
 													transform: rotate(360deg);
 												}
 												}
 											}
 											}
-										</style><path
+										</style>
+										<path
 											d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
 											d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
 											opacity=".25"
 											opacity=".25"
-										/><path
+										/>
+										<path
 											d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
 											d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
 											class="spinner_ajPY"
 											class="spinner_ajPY"
-										/></svg
-									>
+										/>
+									</svg>
 								</div>
 								</div>
 							{:else}
 							{:else}
 								<svg
 								<svg

+ 50 - 7
src/lib/components/admin/Settings/Images.svelte

@@ -34,6 +34,7 @@
 
 
 	let OPENAI_API_BASE_URL = '';
 	let OPENAI_API_BASE_URL = '';
 	let OPENAI_API_KEY = '';
 	let OPENAI_API_KEY = '';
+	let showOpenAIKey = false;
 
 
 	let selectedModel = '';
 	let selectedModel = '';
 	let models = null;
 	let models = null;
@@ -333,18 +334,60 @@
 
 
 				<div class="flex gap-2 mb-1">
 				<div class="flex gap-2 mb-1">
 					<input
 					<input
-						class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+						class="flex-1 w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 						placeholder={$i18n.t('API Base URL')}
 						placeholder={$i18n.t('API Base URL')}
 						bind:value={OPENAI_API_BASE_URL}
 						bind:value={OPENAI_API_BASE_URL}
 						required
 						required
 					/>
 					/>
 
 
-					<input
-						class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-						placeholder={$i18n.t('API Key')}
-						bind:value={OPENAI_API_KEY}
-						required
-					/>
+					<div class="flex-1 flex">
+						<input
+							class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
+							placeholder={$i18n.t('API Key')}
+							bind:value={OPENAI_API_KEY}
+							required
+							{...{ type: showOpenAIKey ? 'text' : 'password' }}
+						/>
+						<button
+							class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+							on:click={(e) => {
+								e.preventDefault();
+								showOpenAIKey = !showOpenAIKey;
+							}}
+						>
+							{#if showOpenAIKey}
+								<svg
+									xmlns="http://www.w3.org/2000/svg"
+									viewBox="0 0 16 16"
+									fill="currentColor"
+									class="w-4 h-4"
+								>
+									<path
+										fill-rule="evenodd"
+										d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+										clip-rule="evenodd"
+									/>
+									<path
+										d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+									/>
+								</svg>
+							{:else}
+								<svg
+									xmlns="http://www.w3.org/2000/svg"
+									viewBox="0 0 16 16"
+									fill="currentColor"
+									class="w-4 h-4"
+								>
+									<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+									<path
+										fill-rule="evenodd"
+										d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+										clip-rule="evenodd"
+									/>
+								</svg>
+							{/if}
+						</button>
+					</div>
 				</div>
 				</div>
 			</div>
 			</div>
 		{/if}
 		{/if}

+ 253 - 18
src/lib/components/admin/Settings/WebSearch.svelte

@@ -22,6 +22,7 @@
 		'tavily',
 		'tavily',
 		'jina'
 		'jina'
 	];
 	];
+	let showApiKey = false;
 
 
 	let youtubeLanguage = 'en';
 	let youtubeLanguage = 'en';
 	let youtubeTranslation = null;
 	let youtubeTranslation = null;
@@ -116,14 +117,53 @@
 								</div>
 								</div>
 
 
 								<div class="flex w-full">
 								<div class="flex w-full">
-									<div class="flex-1">
+									<div class="flex-1 flex">
 										<input
 										<input
-											class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-											type="text"
+											class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 											placeholder={$i18n.t('Enter Google PSE API Key')}
 											placeholder={$i18n.t('Enter Google PSE API Key')}
 											bind:value={webConfig.search.google_pse_api_key}
 											bind:value={webConfig.search.google_pse_api_key}
 											autocomplete="off"
 											autocomplete="off"
+											{...{ type: showApiKey ? 'text' : 'password' }}
 										/>
 										/>
+										<button
+											class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+											on:click={(e) => {
+												e.preventDefault();
+												showApiKey = !showApiKey;
+											}}
+										>
+											{#if showApiKey}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path
+														fill-rule="evenodd"
+														d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+														clip-rule="evenodd"
+													/>
+													<path
+														d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+													/>
+												</svg>
+											{:else}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+													<path
+														fill-rule="evenodd"
+														d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+														clip-rule="evenodd"
+													/>
+												</svg>
+											{/if}
+										</button>
 									</div>
 									</div>
 								</div>
 								</div>
 							</div>
 							</div>
@@ -151,14 +191,53 @@
 								</div>
 								</div>
 
 
 								<div class="flex w-full">
 								<div class="flex w-full">
-									<div class="flex-1">
+									<div class="flex-1 flex">
 										<input
 										<input
-											class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-											type="text"
+											class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 											placeholder={$i18n.t('Enter Brave Search API Key')}
 											placeholder={$i18n.t('Enter Brave Search API Key')}
 											bind:value={webConfig.search.brave_search_api_key}
 											bind:value={webConfig.search.brave_search_api_key}
 											autocomplete="off"
 											autocomplete="off"
+											{...{ type: showApiKey ? 'text' : 'password' }}
 										/>
 										/>
+										<button
+											class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+											on:click={(e) => {
+												e.preventDefault();
+												showApiKey = !showApiKey;
+											}}
+										>
+											{#if showApiKey}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path
+														fill-rule="evenodd"
+														d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+														clip-rule="evenodd"
+													/>
+													<path
+														d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+													/>
+												</svg>
+											{:else}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+													<path
+														fill-rule="evenodd"
+														d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+														clip-rule="evenodd"
+													/>
+												</svg>
+											{/if}
+										</button>
 									</div>
 									</div>
 								</div>
 								</div>
 							</div>
 							</div>
@@ -169,14 +248,53 @@
 								</div>
 								</div>
 
 
 								<div class="flex w-full">
 								<div class="flex w-full">
-									<div class="flex-1">
+									<div class="flex-1 flex">
 										<input
 										<input
-											class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-											type="text"
+											class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 											placeholder={$i18n.t('Enter Serpstack API Key')}
 											placeholder={$i18n.t('Enter Serpstack API Key')}
 											bind:value={webConfig.search.serpstack_api_key}
 											bind:value={webConfig.search.serpstack_api_key}
 											autocomplete="off"
 											autocomplete="off"
+											{...{ type: showApiKey ? 'text' : 'password' }}
 										/>
 										/>
+										<button
+											class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+											on:click={(e) => {
+												e.preventDefault();
+												showApiKey = !showApiKey;
+											}}
+										>
+											{#if showApiKey}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path
+														fill-rule="evenodd"
+														d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+														clip-rule="evenodd"
+													/>
+													<path
+														d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+													/>
+												</svg>
+											{:else}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+													<path
+														fill-rule="evenodd"
+														d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+														clip-rule="evenodd"
+													/>
+												</svg>
+											{/if}
+										</button>
 									</div>
 									</div>
 								</div>
 								</div>
 							</div>
 							</div>
@@ -187,14 +305,53 @@
 								</div>
 								</div>
 
 
 								<div class="flex w-full">
 								<div class="flex w-full">
-									<div class="flex-1">
+									<div class="flex-1 flex">
 										<input
 										<input
-											class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-											type="text"
+											class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 											placeholder={$i18n.t('Enter Serper API Key')}
 											placeholder={$i18n.t('Enter Serper API Key')}
 											bind:value={webConfig.search.serper_api_key}
 											bind:value={webConfig.search.serper_api_key}
 											autocomplete="off"
 											autocomplete="off"
+											{...{ type: showApiKey ? 'text' : 'password' }}
 										/>
 										/>
+										<button
+											class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+											on:click={(e) => {
+												e.preventDefault();
+												showApiKey = !showApiKey;
+											}}
+										>
+											{#if showApiKey}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path
+														fill-rule="evenodd"
+														d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+														clip-rule="evenodd"
+													/>
+													<path
+														d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+													/>
+												</svg>
+											{:else}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+													<path
+														fill-rule="evenodd"
+														d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+														clip-rule="evenodd"
+													/>
+												</svg>
+											{/if}
+										</button>
 									</div>
 									</div>
 								</div>
 								</div>
 							</div>
 							</div>
@@ -205,14 +362,53 @@
 								</div>
 								</div>
 
 
 								<div class="flex w-full">
 								<div class="flex w-full">
-									<div class="flex-1">
+									<div class="flex-1 flex">
 										<input
 										<input
-											class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-											type="text"
+											class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 											placeholder={$i18n.t('Enter Serply API Key')}
 											placeholder={$i18n.t('Enter Serply API Key')}
 											bind:value={webConfig.search.serply_api_key}
 											bind:value={webConfig.search.serply_api_key}
 											autocomplete="off"
 											autocomplete="off"
+											{...{ type: showApiKey ? 'text' : 'password' }}
 										/>
 										/>
+										<button
+											class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+											on:click={(e) => {
+												e.preventDefault();
+												showApiKey = !showApiKey;
+											}}
+										>
+											{#if showApiKey}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path
+														fill-rule="evenodd"
+														d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+														clip-rule="evenodd"
+													/>
+													<path
+														d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+													/>
+												</svg>
+											{:else}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+													<path
+														fill-rule="evenodd"
+														d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+														clip-rule="evenodd"
+													/>
+												</svg>
+											{/if}
+										</button>
 									</div>
 									</div>
 								</div>
 								</div>
 							</div>
 							</div>
@@ -223,14 +419,53 @@
 								</div>
 								</div>
 
 
 								<div class="flex w-full">
 								<div class="flex w-full">
-									<div class="flex-1">
+									<div class="flex-1 flex">
 										<input
 										<input
-											class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
-											type="text"
+											class="w-full rounded-l-lg py-2 pl-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
 											placeholder={$i18n.t('Enter Tavily API Key')}
 											placeholder={$i18n.t('Enter Tavily API Key')}
 											bind:value={webConfig.search.tavily_api_key}
 											bind:value={webConfig.search.tavily_api_key}
 											autocomplete="off"
 											autocomplete="off"
+											{...{ type: showApiKey ? 'text' : 'password' }}
 										/>
 										/>
+										<button
+											class="px-2 transition rounded-r-lg bg-white dark:bg-gray-850"
+											on:click={(e) => {
+												e.preventDefault();
+												showApiKey = !showApiKey;
+											}}
+										>
+											{#if showApiKey}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path
+														fill-rule="evenodd"
+														d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
+														clip-rule="evenodd"
+													/>
+													<path
+														d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z"
+													/>
+												</svg>
+											{:else}
+												<svg
+													xmlns="http://www.w3.org/2000/svg"
+													viewBox="0 0 16 16"
+													fill="currentColor"
+													class="w-4 h-4"
+												>
+													<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
+													<path
+														fill-rule="evenodd"
+														d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
+														clip-rule="evenodd"
+													/>
+												</svg>
+											{/if}
+										</button>
 									</div>
 									</div>
 								</div>
 								</div>
 							</div>
 							</div>

+ 0 - 1
src/lib/i18n/locales/ar-BH/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "خطاء! أنت تستخدم طريقة غير مدعومة (الواجهة الأمامية فقط). يرجى تقديم واجهة WebUI من الواجهة الخلفية.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "خطاء! أنت تستخدم طريقة غير مدعومة (الواجهة الأمامية فقط). يرجى تقديم واجهة WebUI من الواجهة الخلفية.",
 	"Open": "فتح",
 	"Open": "فتح",
-	"Open AI": "AI فتح",
 	"Open AI (Dall-E)": "AI (Dall-E) فتح",
 	"Open AI (Dall-E)": "AI (Dall-E) فتح",
 	"Open new chat": "فتح محادثة جديده",
 	"Open new chat": "فتح محادثة جديده",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/bg-BG/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Използвате неподдържан метод (само фронтенд). Моля, сервирайте WebUI от бекенда.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Използвате неподдържан метод (само фронтенд). Моля, сервирайте WebUI от бекенда.",
 	"Open": "Отвори",
 	"Open": "Отвори",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Отвори нов чат",
 	"Open new chat": "Отвори нов чат",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/bn-BD/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "আপনি একটা আনসাপোর্টেড পদ্ধতি (শুধু ফ্রন্টএন্ড) ব্যবহার করছেন। দয়া করে WebUI ব্যাকএন্ড থেকে চালনা করুন।",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "আপনি একটা আনসাপোর্টেড পদ্ধতি (শুধু ফ্রন্টএন্ড) ব্যবহার করছেন। দয়া করে WebUI ব্যাকএন্ড থেকে চালনা করুন।",
 	"Open": "খোলা",
 	"Open": "খোলা",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "নতুন চ্যাট খুলুন",
 	"Open new chat": "নতুন চ্যাট খুলুন",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/ca-ES/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "Ui! Hi ha hagut un error en la resposta anterior. Torna a provar-ho o contacta amb un administrador",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "Ui! Hi ha hagut un error en la resposta anterior. Torna a provar-ho o contacta amb un administrador",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ui! Estàs utilitzant un mètode no suportat (només frontend). Si us plau, serveix la WebUI des del backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ui! Estàs utilitzant un mètode no suportat (només frontend). Si us plau, serveix la WebUI des del backend.",
 	"Open": "Obre",
 	"Open": "Obre",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Obre un xat nou",
 	"Open new chat": "Obre un xat nou",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/ceb-PH/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! ",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! ",
 	"Open": "Bukas",
 	"Open": "Bukas",
-	"Open AI": "Buksan ang AI",
 	"Open AI (Dall-E)": "Buksan ang AI (Dall-E)",
 	"Open AI (Dall-E)": "Buksan ang AI (Dall-E)",
 	"Open new chat": "Ablihi ang bag-ong diskusyon",
 	"Open new chat": "Ablihi ang bag-ong diskusyon",
 	"OpenAI": "",
 	"OpenAI": "",

+ 0 - 1
src/lib/i18n/locales/de-DE/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppla! du verwendest eine nicht unterstützte Methode (nur Frontend). Bitte stelle die WebUI vom Backend aus bereit.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppla! du verwendest eine nicht unterstützte Methode (nur Frontend). Bitte stelle die WebUI vom Backend aus bereit.",
 	"Open": "Öffne",
 	"Open": "Öffne",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Neuen Chat öffnen",
 	"Open new chat": "Neuen Chat öffnen",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/dg-DG/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.",
 	"Open": "Open",
 	"Open": "Open",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Open new bark",
 	"Open new chat": "Open new bark",
 	"OpenAI": "",
 	"OpenAI": "",

+ 0 - 1
src/lib/i18n/locales/en-GB/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "",
 	"Open": "",
 	"Open": "",
-	"Open AI": "",
 	"Open AI (Dall-E)": "",
 	"Open AI (Dall-E)": "",
 	"Open new chat": "",
 	"Open new chat": "",
 	"OpenAI": "",
 	"OpenAI": "",

+ 0 - 1
src/lib/i18n/locales/en-US/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "",
 	"Open": "",
 	"Open": "",
-	"Open AI": "",
 	"Open AI (Dall-E)": "",
 	"Open AI (Dall-E)": "",
 	"Open new chat": "",
 	"Open new chat": "",
 	"OpenAI": "",
 	"OpenAI": "",

+ 0 - 1
src/lib/i18n/locales/es-ES/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "¡Ups! Estás utilizando un método no compatible (solo frontend). Por favor ejecute la WebUI desde el backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "¡Ups! Estás utilizando un método no compatible (solo frontend). Por favor ejecute la WebUI desde el backend.",
 	"Open": "Abrir",
 	"Open": "Abrir",
-	"Open AI": "Abrir AI",
 	"Open AI (Dall-E)": "Abrir AI (Dall-E)",
 	"Open AI (Dall-E)": "Abrir AI (Dall-E)",
 	"Open new chat": "Abrir nuevo chat",
 	"Open new chat": "Abrir nuevo chat",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/fa-IR/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "اوه! شما از یک روش پشتیبانی نشده (فقط frontend) استفاده می کنید. لطفاً WebUI را از بکند اجرا کنید.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "اوه! شما از یک روش پشتیبانی نشده (فقط frontend) استفاده می کنید. لطفاً WebUI را از بکند اجرا کنید.",
 	"Open": "باز",
 	"Open": "باز",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "باز کردن گپ جدید",
 	"Open new chat": "باز کردن گپ جدید",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/fi-FI/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hupsista! Käytät ei-tuettua menetelmää. WebUI pitää palvella backendista.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hupsista! Käytät ei-tuettua menetelmää. WebUI pitää palvella backendista.",
 	"Open": "Avaa",
 	"Open": "Avaa",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Avaa uusi keskustelu",
 	"Open new chat": "Avaa uusi keskustelu",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/fr-CA/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oups ! Vous utilisez une méthode non prise en charge (frontal uniquement). Veuillez servir WebUI depuis le backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oups ! Vous utilisez une méthode non prise en charge (frontal uniquement). Veuillez servir WebUI depuis le backend.",
 	"Open": "Ouvrir",
 	"Open": "Ouvrir",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Ouvrir une nouvelle discussion",
 	"Open new chat": "Ouvrir une nouvelle discussion",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/fr-FR/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oups ! Vous utilisez une méthode non-supportée (frontend uniquement). Veuillez également servir WebUI depuis le backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oups ! Vous utilisez une méthode non-supportée (frontend uniquement). Veuillez également servir WebUI depuis le backend.",
 	"Open": "Ouvrir",
 	"Open": "Ouvrir",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Ouvrir un nouveau chat",
 	"Open new chat": "Ouvrir un nouveau chat",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/he-IL/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "אופס! אתה משתמש בשיטה לא נתמכת (רק חזית). אנא שרת את ממשק המשתמש האינטרנטי מהשרת האחורי.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "אופס! אתה משתמש בשיטה לא נתמכת (רק חזית). אנא שרת את ממשק המשתמש האינטרנטי מהשרת האחורי.",
 	"Open": "פתח",
 	"Open": "פתח",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "פתח צ'אט חדש",
 	"Open new chat": "פתח צ'אט חדש",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/hi-IN/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "उफ़! आप एक असमर्थित विधि (केवल फ्रंटएंड) का उपयोग कर रहे हैं। कृपया बैकएंड से WebUI सर्वे करें।",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "उफ़! आप एक असमर्थित विधि (केवल फ्रंटएंड) का उपयोग कर रहे हैं। कृपया बैकएंड से WebUI सर्वे करें।",
 	"Open": "खोलें",
 	"Open": "खोलें",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "नई चैट खोलें",
 	"Open new chat": "नई चैट खोलें",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/hr-HR/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Koristite nepodržanu metodu (samo frontend). Molimo poslužite WebUI s backend-a.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Koristite nepodržanu metodu (samo frontend). Molimo poslužite WebUI s backend-a.",
 	"Open": "Otvoreno",
 	"Open": "Otvoreno",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Otvorite novi razgovor",
 	"Open new chat": "Otvorite novi razgovor",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/it-IT/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ops! Stai utilizzando un metodo non supportato (solo frontend). Si prega di servire la WebUI dal backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ops! Stai utilizzando un metodo non supportato (solo frontend). Si prega di servire la WebUI dal backend.",
 	"Open": "Apri",
 	"Open": "Apri",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Apri nuova chat",
 	"Open new chat": "Apri nuova chat",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/ja-JP/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "おっと! サポートされていない方法 (フロントエンドのみ) を使用しています。バックエンドから WebUI を提供してください。",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "おっと! サポートされていない方法 (フロントエンドのみ) を使用しています。バックエンドから WebUI を提供してください。",
 	"Open": "開く",
 	"Open": "開く",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "新しいチャットを開く",
 	"Open new chat": "新しいチャットを開く",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/ka-GE/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "უპს! თქვენ იყენებთ მხარდაუჭერელ მეთოდს (მხოლოდ frontend). გთხოვთ, მოემსახუროთ WebUI-ს ბექენდიდან",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "უპს! თქვენ იყენებთ მხარდაუჭერელ მეთოდს (მხოლოდ frontend). გთხოვთ, მოემსახუროთ WebUI-ს ბექენდიდან",
 	"Open": "ღია",
 	"Open": "ღია",
-	"Open AI": "ღია AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "ახალი მიმოწერის გახსნა",
 	"Open new chat": "ახალი მიმოწერის გახსნა",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/ko-KR/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "이런! 지원되지 않는 방식(프론트엔드만)을 사용하고 계십니다. 백엔드에서 WebUI를 제공해주세요.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "이런! 지원되지 않는 방식(프론트엔드만)을 사용하고 계십니다. 백엔드에서 WebUI를 제공해주세요.",
 	"Open": "열기",
 	"Open": "열기",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "OpenAI(Dall-E)",
 	"Open AI (Dall-E)": "OpenAI(Dall-E)",
 	"Open new chat": "새 채팅 열기",
 	"Open new chat": "새 채팅 열기",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/lt-LT/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Naudojate nepalaikomą (front-end) web ui rėžimą. Prašau serviruokite WebUI iš back-end",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Naudojate nepalaikomą (front-end) web ui rėžimą. Prašau serviruokite WebUI iš back-end",
 	"Open": "Atverti",
 	"Open": "Atverti",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Atverti naują pokalbį",
 	"Open new chat": "Atverti naują pokalbį",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/nb-NO/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! Du bruker en ikke-støttet metode (kun frontend). Vennligst server WebUI fra backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! Du bruker en ikke-støttet metode (kun frontend). Vennligst server WebUI fra backend.",
 	"Open": "Åpne",
 	"Open": "Åpne",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Åpne ny chat",
 	"Open new chat": "Åpne ny chat",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/nl-NL/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! Je gebruikt een niet-ondersteunde methode (alleen frontend). Serveer de WebUI vanuit de backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! Je gebruikt een niet-ondersteunde methode (alleen frontend). Serveer de WebUI vanuit de backend.",
 	"Open": "Open",
 	"Open": "Open",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Open nieuwe chat",
 	"Open new chat": "Open nieuwe chat",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/pa-IN/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "ਓਹੋ! ਤੁਸੀਂ ਇੱਕ ਅਣਸਮਰਥਿਤ ਢੰਗ ਵਰਤ ਰਹੇ ਹੋ (ਸਿਰਫ਼ ਫਰੰਟਐਂਡ)। ਕਿਰਪਾ ਕਰਕੇ ਵੈਬਯੂਆਈ ਨੂੰ ਬੈਕਐਂਡ ਤੋਂ ਸਰਵ ਕਰੋ।",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "ਓਹੋ! ਤੁਸੀਂ ਇੱਕ ਅਣਸਮਰਥਿਤ ਢੰਗ ਵਰਤ ਰਹੇ ਹੋ (ਸਿਰਫ਼ ਫਰੰਟਐਂਡ)। ਕਿਰਪਾ ਕਰਕੇ ਵੈਬਯੂਆਈ ਨੂੰ ਬੈਕਐਂਡ ਤੋਂ ਸਰਵ ਕਰੋ।",
 	"Open": "ਖੋਲ੍ਹੋ",
 	"Open": "ਖੋਲ੍ਹੋ",
-	"Open AI": "ਓਪਨ ਏਆਈ",
 	"Open AI (Dall-E)": "ਓਪਨ ਏਆਈ (ਡਾਲ-ਈ)",
 	"Open AI (Dall-E)": "ਓਪਨ ਏਆਈ (ਡਾਲ-ਈ)",
 	"Open new chat": "ਨਵੀਂ ਗੱਲਬਾਤ ਖੋਲ੍ਹੋ",
 	"Open new chat": "ਨਵੀਂ ਗੱਲਬਾਤ ਖੋਲ੍ਹੋ",
 	"OpenAI": "ਓਪਨਏਆਈ",
 	"OpenAI": "ਓਪਨਏਆਈ",

+ 0 - 1
src/lib/i18n/locales/pl-PL/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Używasz nieobsługiwanej metody (tylko interfejs front-end). Proszę obsłużyć interfejs WebUI z poziomu backendu.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Używasz nieobsługiwanej metody (tylko interfejs front-end). Proszę obsłużyć interfejs WebUI z poziomu backendu.",
 	"Open": "Otwórz",
 	"Open": "Otwórz",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Otwórz nowy czat",
 	"Open new chat": "Otwórz nowy czat",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/pt-BR/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Opa! Você está usando um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Opa! Você está usando um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.",
 	"Open": "Abrir",
 	"Open": "Abrir",
-	"Open AI": "OpenAI",
 	"Open AI (Dall-E)": "OpenAI (Dall-E)",
 	"Open AI (Dall-E)": "OpenAI (Dall-E)",
 	"Open new chat": "Abrir novo bate-papo",
 	"Open new chat": "Abrir novo bate-papo",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/pt-PT/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Epá! Você está a usar um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Epá! Você está a usar um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.",
 	"Open": "Abrir",
 	"Open": "Abrir",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Abrir nova conversa",
 	"Open new chat": "Abrir nova conversa",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/ru-RU/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Вы используете неподдерживаемый метод (только фронтенд). Пожалуйста, обслуживайте веб-интерфейс из бэкенда.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Вы используете неподдерживаемый метод (только фронтенд). Пожалуйста, обслуживайте веб-интерфейс из бэкенда.",
 	"Open": "Открыть",
 	"Open": "Открыть",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Открыть новый чат",
 	"Open new chat": "Открыть новый чат",
 	"OpenAI": "Open AI",
 	"OpenAI": "Open AI",

+ 0 - 1
src/lib/i18n/locales/sr-RS/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Користите неподржани метод (само фронтенд). Молимо вас да покренете WebUI са бекенда.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Користите неподржани метод (само фронтенд). Молимо вас да покренете WebUI са бекенда.",
 	"Open": "Отвори",
 	"Open": "Отвори",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Покрени ново ћаскање",
 	"Open new chat": "Покрени ново ћаскање",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/sv-SE/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppsan! Du använder en ej stödd metod (endast frontend). Vänligen servera WebUI från backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppsan! Du använder en ej stödd metod (endast frontend). Vänligen servera WebUI från backend.",
 	"Open": "Öppna",
 	"Open": "Öppna",
-	"Open AI": "Öppna AI",
 	"Open AI (Dall-E)": "Öppna AI (Dall-E)",
 	"Open AI (Dall-E)": "Öppna AI (Dall-E)",
 	"Open new chat": "Öppna ny chatt",
 	"Open new chat": "Öppna ny chatt",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/tk-TW/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "",
 	"Open": "",
 	"Open": "",
-	"Open AI": "",
 	"Open AI (Dall-E)": "",
 	"Open AI (Dall-E)": "",
 	"Open new chat": "",
 	"Open new chat": "",
 	"OpenAI": "",
 	"OpenAI": "",

+ 0 - 1
src/lib/i18n/locales/tr-TR/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hop! Desteklenmeyen bir yöntem kullanıyorsunuz (yalnızca önyüz). Lütfen WebUI'yi arkayüzden sunun.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hop! Desteklenmeyen bir yöntem kullanıyorsunuz (yalnızca önyüz). Lütfen WebUI'yi arkayüzden sunun.",
 	"Open": "Aç",
 	"Open": "Aç",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Yeni sohbet aç",
 	"Open new chat": "Yeni sohbet aç",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/uk-UA/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "Упс! У попередній відповіді сталася помилка. Будь ласка, спробуйте ще раз або зверніться до адміністратора.",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "Упс! У попередній відповіді сталася помилка. Будь ласка, спробуйте ще раз або зверніться до адміністратора.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Ви використовуєте непідтримуваний метод (тільки для фронтенду). Будь ласка, обслуговуйте WebUI з бекенду.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Ви використовуєте непідтримуваний метод (тільки для фронтенду). Будь ласка, обслуговуйте WebUI з бекенду.",
 	"Open": "Відкрити",
 	"Open": "Відкрити",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Відкрити новий чат",
 	"Open new chat": "Відкрити новий чат",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/vi-VN/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Rất tiếc! Bạn đang sử dụng một phương thức không được hỗ trợ (chỉ dành cho frontend). Vui lòng cung cấp phương thức cho WebUI từ phía backend.",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Rất tiếc! Bạn đang sử dụng một phương thức không được hỗ trợ (chỉ dành cho frontend). Vui lòng cung cấp phương thức cho WebUI từ phía backend.",
 	"Open": "Mở",
 	"Open": "Mở",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "Mở nội dung chat mới",
 	"Open new chat": "Mở nội dung chat mới",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/zh-CN/translation.json

@@ -401,7 +401,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "糟糕!之前的回复出现了错误。请重试或联系管理员。",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "糟糕!之前的回复出现了错误。请重试或联系管理员。",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "糟糕!你正在使用不被支持的方法(仅前端)。请从后端提供 WebUI 服务。",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "糟糕!你正在使用不被支持的方法(仅前端)。请从后端提供 WebUI 服务。",
 	"Open": "打开",
 	"Open": "打开",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "打开新对话",
 	"Open new chat": "打开新对话",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",

+ 0 - 1
src/lib/i18n/locales/zh-TW/translation.json

@@ -397,7 +397,6 @@
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "哎呀!先前的回應發生錯誤。請重試或聯絡管理員",
 	"Oops! There was an error in the previous response. Please try again or contact admin.": "哎呀!先前的回應發生錯誤。請重試或聯絡管理員",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "哎呀!您正在使用不支援的方法(僅有前端)。請從後端提供 WebUI。",
 	"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "哎呀!您正在使用不支援的方法(僅有前端)。請從後端提供 WebUI。",
 	"Open": "開啟",
 	"Open": "開啟",
-	"Open AI": "Open AI",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open AI (Dall-E)": "Open AI (Dall-E)",
 	"Open new chat": "開啟新聊天",
 	"Open new chat": "開啟新聊天",
 	"OpenAI": "OpenAI",
 	"OpenAI": "OpenAI",