Skip to content

Commit 64bb075

Browse files
committed
🐛 Bugfix: knowledge base shows unknown embedding model when process is not done yet
1 parent 6fe37cc commit 64bb075

File tree

5 files changed

+80
-32
lines changed

5 files changed

+80
-32
lines changed

frontend/app/[locale]/knowledges/KnowledgeBaseConfiguration.tsx

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ function DataConfig({ isActive }: DataConfigProps) {
155155
const [hasClickedUpload, setHasClickedUpload] = useState(false);
156156
const [showEmbeddingWarning, setShowEmbeddingWarning] = useState(false);
157157
const [showAutoDeselectModal, setShowAutoDeselectModal] = useState(false);
158+
const [newlyCreatedKbId, setNewlyCreatedKbId] = useState<string | null>(null); // Track newly created KB waiting for documents
158159
const contentRef = useRef<HTMLDivElement | null>(null);
159160

160161
// Open warning modal when single Embedding model is not configured (ignore multi-embedding)
@@ -411,9 +412,13 @@ function DataConfig({ isActive }: DataConfigProps) {
411412
const isChangingKB =
412413
!kbState.activeKnowledgeBase || kb.id !== kbState.activeKnowledgeBase.id;
413414

414-
// If switching knowledge base, update active state
415+
// If switching knowledge base, update active state and clear newly created flag
415416
if (isChangingKB) {
416417
setActiveKnowledgeBase(kb);
418+
// Clear newly created flag when switching to a different knowledge base
419+
if (newlyCreatedKbId !== null && newlyCreatedKbId !== kb.id) {
420+
setNewlyCreatedKbId(null);
421+
}
417422
}
418423

419424
// Set active knowledge base ID to polling service
@@ -606,6 +611,7 @@ function DataConfig({ isActive }: DataConfigProps) {
606611
setActiveKnowledgeBase(newKB);
607612
knowledgeBasePollingService.setActiveKnowledgeBase(newKB.id);
608613
setHasClickedUpload(false);
614+
setNewlyCreatedKbId(newKB.id); // Mark this KB as newly created
609615

610616
await uploadDocuments(newKB.id, filesToUpload);
611617
setUploadFiles([]);
@@ -618,10 +624,14 @@ function DataConfig({ isActive }: DataConfigProps) {
618624
(populatedKB) => {
619625
setActiveKnowledgeBase(populatedKB);
620626
knowledgeBasePollingService.triggerKnowledgeBaseListUpdate(true);
627+
// Clear the newly created flag when documents are ready
628+
setNewlyCreatedKbId(null);
621629
}
622630
)
623631
.catch((pollingError) => {
624632
log.error("Knowledge base creation polling failed:", pollingError);
633+
// Clear the flag even on error to avoid stuck loading state
634+
setNewlyCreatedKbId(null);
625635
});
626636
} catch (error) {
627637
log.error(t("knowledgeBase.error.createUpload"), error);
@@ -684,13 +694,26 @@ function DataConfig({ isActive }: DataConfigProps) {
684694
const viewingKbName =
685695
kbState.activeKnowledgeBase?.name || (isCreatingMode ? newKbName : "");
686696

697+
// Check if current knowledge base is newly created and waiting for documents
698+
const isNewlyCreatedAndWaiting =
699+
newlyCreatedKbId !== null &&
700+
kbState.activeKnowledgeBase?.id === newlyCreatedKbId &&
701+
viewingDocuments.length === 0;
702+
687703
// As long as any document upload succeeds, immediately switch creation mode to false
688704
useEffect(() => {
689705
if (isCreatingMode && viewingDocuments.length > 0) {
690706
setIsCreatingMode(false);
691707
}
692708
}, [isCreatingMode, viewingDocuments.length]);
693709

710+
// Clear newly created flag when documents arrive
711+
useEffect(() => {
712+
if (newlyCreatedKbId !== null && viewingDocuments.length > 0) {
713+
setNewlyCreatedKbId(null);
714+
}
715+
}, [newlyCreatedKbId, viewingDocuments.length]);
716+
694717
// Handle knowledge base selection
695718
const handleSelectKnowledgeBase = (id: string) => {
696719
hasUserInteractedRef.current = true; // Mark user interaction
@@ -900,6 +923,7 @@ function DataConfig({ isActive }: DataConfigProps) {
900923
}
901924
containerHeight={SETUP_PAGE_CONTAINER.MAIN_CONTENT_HEIGHT}
902925
hasDocuments={viewingDocuments.length > 0}
926+
isNewlyCreatedAndWaiting={isNewlyCreatedAndWaiting}
903927
// Upload related props
904928
isDragging={uiState.isDragging}
905929
onDragOver={handleDragOver}

frontend/app/[locale]/knowledges/components/document/DocumentList.tsx

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ interface DocumentListProps {
5656
isCreatingMode?: boolean;
5757
onNameChange?: (name: string) => void;
5858
hasDocuments?: boolean;
59+
isNewlyCreatedAndWaiting?: boolean; // New prop to track newly created KB waiting for documents
5960

6061
// Upload related props
6162
isDragging?: boolean;
@@ -85,6 +86,7 @@ const DocumentListContainer = forwardRef<DocumentListRef, DocumentListProps>(
8586
isCreatingMode = false,
8687
onNameChange,
8788
hasDocuments = false,
89+
isNewlyCreatedAndWaiting = false, // New prop
8890

8991
// Upload related props
9092
isDragging = false,
@@ -511,29 +513,42 @@ const DocumentListContainer = forwardRef<DocumentListRef, DocumentListProps>(
511513
</Button>
512514
</div>
513515
</div>
514-
) : docState.isLoadingDocuments ? (
516+
) : docState.isLoadingDocuments || isNewlyCreatedAndWaiting ? (
515517
<div className="flex items-center justify-center h-full border border-gray-200 rounded-md">
516518
<div className="text-center">
517519
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500 mx-auto mb-2"></div>
518520
<p className="text-sm text-gray-600">
519-
{t("document.status.loadingList")}
521+
{isNewlyCreatedAndWaiting
522+
? t("document.status.waitingForTask")
523+
: t("document.status.loadingList")}
520524
</p>
521525
</div>
522526
</div>
523527
) : isCreatingMode ? (
524-
<div className="flex items-center justify-center border border-gray-200 rounded-md h-full">
525-
<div className="text-center p-6">
526-
<div className="mb-4 text-blue-600 text-[36px]">
527-
<InfoCircleFilled />
528+
(hasDocuments || isUploading || docState.isLoadingDocuments) ? (
529+
<div className="flex items-center justify-center border border-gray-200 rounded-md h-full">
530+
<div className="text-center">
531+
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500 mx-auto mb-2"></div>
532+
<p className="text-sm text-gray-600">
533+
{t("document.status.waitingForTask")}
534+
</p>
528535
</div>
529-
<h3 className="text-lg font-medium text-gray-800 mb-2">
530-
{t("document.title.createNew")}
531-
</h3>
532-
<p className="text-gray-500 text-sm max-w-md">
533-
{t("document.hint.uploadToCreate")}
534-
</p>
535536
</div>
536-
</div>
537+
) : (
538+
<div className="flex items-center justify-center border border-gray-200 rounded-md h-full">
539+
<div className="text-center p-6">
540+
<div className="mb-4 text-blue-600 text-[36px]">
541+
<InfoCircleFilled />
542+
</div>
543+
<h3 className="text-lg font-medium text-gray-800 mb-2">
544+
{t("document.title.createNew")}
545+
</h3>
546+
<p className="text-gray-500 text-sm max-w-md">
547+
{t("document.hint.uploadToCreate")}
548+
</p>
549+
</div>
550+
</div>
551+
)
537552
) : sortedDocuments.length > 0 ? (
538553
<div className="overflow-y-auto border border-gray-200 rounded-md h-full">
539554
<table className="min-w-full bg-white">

frontend/app/[locale]/knowledges/components/knowledge/KnowledgeBaseList.tsx

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -284,27 +284,34 @@ const KnowledgeBaseList: React.FC<KnowledgeBaseListProps> = ({
284284
{t('knowledgeBase.tag.chunks', { count: kb.chunkCount || 0 })}
285285
</span>
286286

287-
{/* Knowledge base source tag */}
288-
<span className={`inline-flex items-center ${KB_LAYOUT.TAG_PADDING} ${KB_LAYOUT.TAG_ROUNDED} ${KB_LAYOUT.TAG_TEXT} bg-gray-200 text-gray-800 border border-gray-200 mr-1`}>
289-
{t('knowledgeBase.tag.source', { source: kb.source })}
290-
</span>
287+
{/* Only show source, creation date, and model tags when there are valid documents or chunks */}
288+
{((kb.documentCount || 0) > 0 || (kb.chunkCount || 0) > 0) && (
289+
<>
290+
{/* Knowledge base source tag */}
291+
<span className={`inline-flex items-center ${KB_LAYOUT.TAG_PADDING} ${KB_LAYOUT.TAG_ROUNDED} ${KB_LAYOUT.TAG_TEXT} bg-gray-200 text-gray-800 border border-gray-200 mr-1`}>
292+
{t('knowledgeBase.tag.source', { source: kb.source })}
293+
</span>
291294

292-
{/* Creation date tag - only show date */}
293-
<span className={`inline-flex items-center ${KB_LAYOUT.TAG_PADDING} ${KB_LAYOUT.TAG_ROUNDED} ${KB_LAYOUT.TAG_TEXT} bg-gray-200 text-gray-800 border border-gray-200 mr-1`}>
294-
{t('knowledgeBase.tag.createdAt', { date: formatDate(kb.createdAt) })}
295-
</span>
295+
{/* Creation date tag - only show date */}
296+
<span className={`inline-flex items-center ${KB_LAYOUT.TAG_PADDING} ${KB_LAYOUT.TAG_ROUNDED} ${KB_LAYOUT.TAG_TEXT} bg-gray-200 text-gray-800 border border-gray-200 mr-1`}>
297+
{t('knowledgeBase.tag.createdAt', { date: formatDate(kb.createdAt) })}
298+
</span>
296299

297-
{/* Force line break */}
298-
<div className={`w-full ${KB_LAYOUT.TAG_BREAK_HEIGHT}`}></div>
300+
{/* Force line break */}
301+
<div className={`w-full ${KB_LAYOUT.TAG_BREAK_HEIGHT}`}></div>
299302

300-
{/* Model tag - show normal or mismatch */}
301-
<span className={`inline-flex items-center ${KB_LAYOUT.TAG_PADDING} ${KB_LAYOUT.TAG_ROUNDED} ${KB_LAYOUT.TAG_TEXT} ${KB_LAYOUT.SECOND_ROW_TAG_MARGIN} bg-green-100 text-green-800 border border-green-200 mr-1`}>
302-
{t('knowledgeBase.tag.model', { model: getModelDisplayName(kb.embeddingModel) })}
303-
</span>
304-
{kb.embeddingModel !== "unknown" && kb.embeddingModel !== currentEmbeddingModel && (
305-
<span className={`inline-flex items-center ${KB_LAYOUT.TAG_PADDING} ${KB_LAYOUT.TAG_ROUNDED} ${KB_LAYOUT.TAG_TEXT} ${KB_LAYOUT.SECOND_ROW_TAG_MARGIN} bg-yellow-100 text-yellow-800 border border-yellow-200 mr-1`}>
306-
{t('knowledgeBase.tag.modelMismatch')}
307-
</span>
303+
{/* Model tag - only show when model is not "unknown" */}
304+
{kb.embeddingModel !== "unknown" && (
305+
<span className={`inline-flex items-center ${KB_LAYOUT.TAG_PADDING} ${KB_LAYOUT.TAG_ROUNDED} ${KB_LAYOUT.TAG_TEXT} ${KB_LAYOUT.SECOND_ROW_TAG_MARGIN} bg-green-100 text-green-800 border border-green-200 mr-1`}>
306+
{t('knowledgeBase.tag.model', { model: getModelDisplayName(kb.embeddingModel) })}
307+
</span>
308+
)}
309+
{kb.embeddingModel !== "unknown" && kb.embeddingModel !== currentEmbeddingModel && (
310+
<span className={`inline-flex items-center ${KB_LAYOUT.TAG_PADDING} ${KB_LAYOUT.TAG_ROUNDED} ${KB_LAYOUT.TAG_TEXT} ${KB_LAYOUT.SECOND_ROW_TAG_MARGIN} bg-yellow-100 text-yellow-800 border border-yellow-200 mr-1`}>
311+
{t('knowledgeBase.tag.modelMismatch')}
312+
</span>
313+
)}
314+
</>
308315
)}
309316
</div>
310317
</div>

frontend/public/locales/en/common.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,7 @@
502502
"document.summary.modelPlaceholder": "Select Model",
503503
"document.status.creating": "Creating...",
504504
"document.status.loadingList": "Loading document list...",
505+
"document.status.waitingForTask": "Waiting for task creation...",
505506
"document.input.knowledgeBaseName": "Please enter knowledge base name",
506507
"document.button.details": "Details",
507508
"document.button.overview": "Overview",

frontend/public/locales/zh/common.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@
503503
"document.summary.modelPlaceholder": "选择模型",
504504
"document.status.creating": "创建中...",
505505
"document.status.loadingList": "正在加载文档列表...",
506+
"document.status.waitingForTask": "正在等待任务创建...",
506507
"document.input.knowledgeBaseName": "请输入知识库名称",
507508
"document.button.details": "详细内容",
508509
"document.button.overview": "概览",

0 commit comments

Comments
 (0)