Timothy Jaeryang Baek 3 месяцев назад
Родитель
Сommit
6c583ef9d3

+ 25 - 18
src/lib/components/admin/Settings/Documents.svelte

@@ -212,6 +212,15 @@
 			await embeddingModelUpdateHandler();
 		}
 
+		if (RAGConfig.MINERU_PARAMS) {
+			try {
+				JSON.parse(RAGConfig.MINERU_PARAMS);
+			} catch (e) {
+				toast.error($i18n.t('Invalid JSON format in MinerU Parameters'));
+				return;
+			}
+		}
+
 		const res = await updateRAGConfig(localStorage.token, {
 			...RAGConfig,
 			ALLOWED_FILE_EXTENSIONS: RAGConfig.ALLOWED_FILE_EXTENSIONS.split(',')
@@ -220,7 +229,13 @@
 			DOCLING_PICTURE_DESCRIPTION_LOCAL: JSON.parse(
 				RAGConfig.DOCLING_PICTURE_DESCRIPTION_LOCAL || '{}'
 			),
-			DOCLING_PICTURE_DESCRIPTION_API: JSON.parse(RAGConfig.DOCLING_PICTURE_DESCRIPTION_API || '{}')
+			DOCLING_PICTURE_DESCRIPTION_API: JSON.parse(
+				RAGConfig.DOCLING_PICTURE_DESCRIPTION_API || '{}'
+			),
+			MINERU_PARAMS:
+				typeof RAGConfig.MINERU_PARAMS === 'string' && RAGConfig.MINERU_PARAMS.trim() !== ''
+					? JSON.parse(RAGConfig.MINERU_PARAMS)
+					: {}
 		});
 		dispatch('save');
 	};
@@ -261,6 +276,11 @@
 			2
 		);
 
+		config.MINERU_PARAMS =
+			typeof config.MINERU_PARAMS === 'object'
+				? JSON.stringify(config.MINERU_PARAMS ?? {}, null, 2)
+				: config.MINERU_PARAMS;
+
 		RAGConfig = config;
 	});
 </script>
@@ -802,8 +822,8 @@
 							</div>
 
 							<!-- Parameters -->
-							<div class="flex justify-between w-full mt-2">
-								<div class="self-center text-xs font-medium">
+							<div class="flex flex-col justify-between w-full mt-2">
+								<div class="text-xs font-medium">
 									<Tooltip
 										content={$i18n.t(
 											'Advanced parameters for MinerU parsing (enable_ocr, enable_formula, enable_table, language, model_version, page_ranges)'
@@ -813,22 +833,9 @@
 										{$i18n.t('Parameters')}
 									</Tooltip>
 								</div>
-								<div class="">
+								<div class="mt-1.5">
 									<Textarea
-										value={typeof RAGConfig.MINERU_PARAMS === 'object' &&
-										RAGConfig.MINERU_PARAMS !== null &&
-										Object.keys(RAGConfig.MINERU_PARAMS).length > 0
-											? JSON.stringify(RAGConfig.MINERU_PARAMS, null, 2)
-											: ''}
-										on:input={(e) => {
-											try {
-												const value = e.target.value.trim();
-												RAGConfig.MINERU_PARAMS = value ? JSON.parse(value) : {};
-											} catch (err) {
-												// Keep the string value if JSON is invalid (user is still typing)
-												RAGConfig.MINERU_PARAMS = e.target.value;
-											}
-										}}
+										bind:value={RAGConfig.MINERU_PARAMS}
 										placeholder={`{\n  "enable_ocr": false,\n  "enable_formula": true,\n  "enable_table": true,\n  "language": "en",\n  "model_version": "pipeline",\n  "page_ranges": ""\n}`}
 										minSize={100}
 									/>

+ 4 - 0
src/lib/components/common/Textarea.svelte

@@ -11,7 +11,9 @@
 	export let className =
 		'w-full rounded-lg px-3.5 py-2 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden  h-full';
 
+	export let onInput = () => {};
 	export let onBlur = () => {};
+
 	let textareaElement;
 
 	// Adjust height on mount and after setting the element.
@@ -58,6 +60,8 @@
 	{readonly}
 	on:input={(e) => {
 		resize();
+
+		onInput(e);
 	}}
 	on:focus={() => {
 		resize();