Переглянути джерело

Tooltip info & warn. Detect file path during update. Add translation.

* Tooltips added to show full model name and warning regarding vector storage
* Send toast error and return early if more than a single front slash is detected
* Extend toast duration for model update action
* Add i18n en_US translation
* Remove commented code copied from existing function
Self Denial 1 рік тому
батько
коміт
11741ea7f0

+ 77 - 57
src/lib/components/documents/Settings/General.svelte

@@ -15,6 +15,8 @@
 	import { onMount, getContext } from 'svelte';
 	import { toast } from 'svelte-sonner';
 
+	import Tooltip from '$lib/components/common/Tooltip.svelte';
+
 	const i18n = getContext('i18n');
 
 	export let saveHandler: Function;
@@ -49,16 +51,33 @@
 	};
 
 	const embeddingModelUpdateHandler = async () => {
+		if ((embeddingModel.embedding_model.split("/").length -1) > 1) {
+			toast.error($i18n.t('Model filesystem path detected. Model shortname is required for update, cannot continue.', ));
+			return;
+		}
+
+		console.log('Update embedding model attempt:', embeddingModel.embedding_model);
+
 		loading1 = true;
 		const res = await updateEmbeddingModel(localStorage.token, embeddingModel);
 		loading1 = false;
 
 		if (res) {
 			console.log('embeddingModelUpdateHandler:', res);
-			if (res.status == true) {
-				toast.success($i18n.t('Model {{embedding_model}} update complete!', res));
+			if (res.status === true) {
+				toast.success(
+					$i18n.t('Model {{embedding_model}} update complete!', res),
+					{
+						duration: 1000 * 10,
+					}
+				);
 			} else {
-				toast.error($i18n.t('Model {{embedding_model}} update failed or not required!', res));
+				toast.error(
+					$i18n.t('Model {{embedding_model}} update failed or not required!', res),
+                                        {
+						duration: 1000 * 10,
+                                        }
+				);
 			}
 		}
 	};
@@ -162,65 +181,66 @@
 				</button>
 			</div>
 
+		</div>
+
+		<hr class=" dark:border-gray-700" />
+
+		<div>
 			<div class="  flex w-full justify-between">
-				<div class=" self-center text-xs font-medium">
-					{$i18n.t('Update embedding model {{embedding_model}}', embeddingModel)}
-				</div>
+				<Tooltip content={
+					$i18n.t('Embedding model: {{embedding_model}}', embeddingModel)
+				}>
 
-				<button
-					class=" self-center text-xs p-1 px-3 bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 rounded flex flex-row space-x-1 items-center {loading1
-						? ' cursor-not-allowed'
-						: ''}"
-					on:click={() => {
-						embeddingModelUpdateHandler(embeddingModel);
-						console.log('Update embedding model:', embeddingModel.embedding_model);
-					}}
-					type="button"
-					disabled={loading1}
-				>
-					<div class="self-center font-medium">{$i18n.t('Update')}</div>
+					<div class=" self-center text-xs font-medium">
+						{$i18n.t('Update embedding model {{embedding_model}}', { embedding_model: embeddingModel.embedding_model.slice(-40) })}
+					</div>
+				</Tooltip>
 
-					<!-- <svg
-						xmlns="http://www.w3.org/2000/svg"
-						viewBox="0 0 16 16"
-						fill="currentColor"
-						class="w-3 h-3"
-					>
-						<path
-							fill-rule="evenodd"
-							d="M13.836 2.477a.75.75 0 0 1 .75.75v3.182a.75.75 0 0 1-.75.75h-3.182a.75.75 0 0 1 0-1.5h1.37l-.84-.841a4.5 4.5 0 0 0-7.08.932.75.75 0 0 1-1.3-.75 6 6 0 0 1 9.44-1.242l.842.84V3.227a.75.75 0 0 1 .75-.75Zm-.911 7.5A.75.75 0 0 1 13.199 11a6 6 0 0 1-9.44 1.241l-.84-.84v1.371a.75.75 0 0 1-1.5 0V9.591a.75.75 0 0 1 .75-.75H5.35a.75.75 0 0 1 0 1.5H3.98l.841.841a4.5 4.5 0 0 0 7.08-.932.75.75 0 0 1 1.025-.273Z"
-							clip-rule="evenodd"
-						/>
-					</svg> -->
+				<Tooltip content={
+					$i18n.t('Understand that updating or changing your embedding model requires reset of the vector database and re-import of all documents. You have been warned!')
+				}>
 
-					{#if loading1}
-						<div class="ml-3 self-center">
-							<svg
-								class=" w-3 h-3"
-								viewBox="0 0 24 24"
-								fill="currentColor"
-								xmlns="http://www.w3.org/2000/svg"
-								><style>
-									.spinner_ajPY {
-										transform-origin: center;
-										animation: spinner_AtaB 0.75s infinite linear;
-									}
-									@keyframes spinner_AtaB {
-										100% {
-											transform: rotate(360deg);
+					<button
+						class=" self-center text-xs p-1 px-3 bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 rounded flex flex-row space-x-1 items-center {loading1
+							? ' cursor-not-allowed'
+							: ''}"
+						on:click={() => {
+							embeddingModelUpdateHandler(embeddingModel);
+						}}
+						type="button"
+						disabled={loading1}
+					>
+						<div class="self-center font-medium">{$i18n.t('Update')}</div>
+
+						{#if loading1}
+							<div class="ml-3 self-center">
+								<svg
+									class=" w-3 h-3"
+									viewBox="0 0 24 24"
+									fill="currentColor"
+									xmlns="http://www.w3.org/2000/svg"
+									><style>
+										.spinner_ajPY {
+											transform-origin: center;
+											animation: spinner_AtaB 0.75s infinite linear;
 										}
-									}
-								</style><path
-									d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
-									opacity=".25"
-								/><path
-									d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
-									class="spinner_ajPY"
-								/></svg
-							>
-						</div>
-					{/if}
-				</button>
+										@keyframes spinner_AtaB {
+											100% {
+												transform: rotate(360deg);
+											}
+										}
+									</style><path
+										d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
+										opacity=".25"
+									/><path
+										d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
+										class="spinner_ajPY"
+									/></svg
+								>
+							</div>
+						{/if}
+					</button>
+				</Tooltip>
 			</div>
 		</div>
 

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

@@ -120,6 +120,7 @@
 	"Edit Doc": "",
 	"Edit User": "",
 	"Email": "",
+	"Embedding model: {{embedding_model}}": "",
 	"Enable Chat History": "",
 	"Enable New Sign Ups": "",
 	"Enabled": "",
@@ -193,8 +194,11 @@
 	"MMMM DD, YYYY": "",
 	"Model '{{modelName}}' has been successfully downloaded.": "",
 	"Model '{{modelTag}}' is already in queue for downloading.": "",
+	"Model {{embedding_model}} update complete!": "",
+	"Model {{embedding_model}} update failed or not required!": "",
 	"Model {{modelId}} not found": "",
 	"Model {{modelName}} already exists.": "",
+	"Model filesystem path detected. Model shortname is required for update, cannot continue.": "",
 	"Model Name": "",
 	"Model not selected": "",
 	"Model Tag Name": "",
@@ -332,7 +336,10 @@
 	"TTS Settings": "",
 	"Type Hugging Face Resolve (Download) URL": "",
 	"Uh-oh! There was an issue connecting to {{provider}}.": "",
+	"Understand that updating or changing your embedding model requires reset of the vector database and re-import of all documents. You have been warned!": "",
 	"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "",
+	"Update": "",
+	"Update embedding model {{embedding_model}}": "",
 	"Update password": "",
 	"Upload a GGUF model": "",
 	"Upload files": "",