From 2c099bbb9505903d4e100d55e5b6b4dcd12f3a10 Mon Sep 17 00:00:00 2001 From: balibabu Date: Wed, 27 May 2026 14:42:53 +0800 Subject: [PATCH] Fix: Uploading TSV format documents to the knowledge base did not generate any error messages. (#15284) ### What problem does this PR solve? Fix: Uploading TSV format documents to the knowledge base did not generate any error messages. ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --- web/src/hooks/use-document-request.ts | 54 ++++--------------- .../pages/dataset/dataset/dataset-table.tsx | 3 -- .../dataset/use-bulk-operate-dataset.tsx | 8 +-- .../dataset/use-dataset-table-columns.tsx | 10 ++-- .../pages/dataset/dataset/use-run-document.ts | 1 + .../dataset/dataset/use-upload-document.ts | 5 +- web/src/services/knowledge-service.ts | 47 +--------------- web/src/utils/next-request.ts | 6 ++- web/src/utils/request.ts | 6 ++- 9 files changed, 32 insertions(+), 108 deletions(-) diff --git a/web/src/hooks/use-document-request.ts b/web/src/hooks/use-document-request.ts index 9727f4b626..81daad4aa3 100644 --- a/web/src/hooks/use-document-request.ts +++ b/web/src/hooks/use-document-request.ts @@ -24,7 +24,6 @@ import kbService, { listDocument, renameDocument, uploadDocument, - webCrawlDocument, } from '@/services/knowledge-service'; import { restAPIv1 } from '@/utils/api'; import { buildChunkHighlights } from '@/utils/document-util'; @@ -56,12 +55,11 @@ export const enum DocumentApiAction { SetDocumentMeta = 'setDocumentMeta', FetchDocumentFilter = 'fetchDocumentFilter', CreateDocument = 'createDocument', - WebCrawl = 'webCrawl', FetchDocumentThumbnails = 'fetchDocumentThumbnails', ParseDocument = 'parseDocument', } -export const useUploadNextDocument = () => { +export const useUploadDocument = () => { const queryClient = useQueryClient(); const { id } = useParams(); @@ -266,17 +264,17 @@ export const useSetDocumentStatus = () => { data, isPending: loading, mutateAsync, - } = useMutation({ - mutationKey: [DocumentApiAction.UpdateDocumentStatus], - mutationFn: async ({ - status, - documentId, - datasetId, - }: { + } = useMutation< + any, + Error, + { status: boolean; documentId: string | string[]; datasetId: string; - }) => { + } + >({ + mutationKey: [DocumentApiAction.UpdateDocumentStatus], + mutationFn: async ({ status, documentId, datasetId }) => { const ids = Array.isArray(documentId) ? documentId : [documentId]; const { data } = await changeDocumentsStatus({ kb_id: datasetId, @@ -551,40 +549,6 @@ export const useGetChunkHighlights = ( return { highlights, setWidthAndHeight }; }; -export const useNextWebCrawl = () => { - const { knowledgeId } = useGetKnowledgeSearchParams(); - - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: [DocumentApiAction.WebCrawl], - mutationFn: async ({ name, url }: { name: string; url: string }) => { - if (!knowledgeId) { - return 500; - } - const formData = new FormData(); - formData.append('name', name); - formData.append('url', url); - - const ret = await webCrawlDocument(knowledgeId, formData); - const code = get(ret, 'code'); - if (code === 0) { - message.success(i18n.t('message.uploaded')); - } - - return code; - }, - }); - - return { - data, - loading, - webCrawl: mutateAsync, - }; -}; - export const useFetchDocumentThumbnailsByIds = () => { const [ids, setDocumentIds] = useState([]); const { data } = useQuery>({ diff --git a/web/src/pages/dataset/dataset/dataset-table.tsx b/web/src/pages/dataset/dataset/dataset-table.tsx index 4e9b61ca08..a9850d0cd1 100644 --- a/web/src/pages/dataset/dataset/dataset-table.tsx +++ b/web/src/pages/dataset/dataset/dataset-table.tsx @@ -28,7 +28,6 @@ import { } from '@/components/ui/table'; import { UseRowSelectionType } from '@/hooks/logic-hooks/use-row-selection'; import { useFetchDocumentList } from '@/hooks/use-document-request'; -import { useKnowledgeBaseContext } from '@/pages/dataset/contexts/knowledge-base-context'; import { getExtension } from '@/utils/document-util'; import { t } from 'i18next'; import { pick } from 'lodash'; @@ -89,14 +88,12 @@ export function DatasetTable({ // metaRecord, // } = useSaveMeta(); const { showLog, logInfo, logVisible, hideLog } = useShowLog(documents); - const { knowledgeBase } = useKnowledgeBaseContext(); const columns = useDatasetTableColumns({ showChangeParserModal, showRenameModal, showManageMetadataModal, showLog, - datasetId: knowledgeBase?.id, }); const currentPagination = useMemo(() => { diff --git a/web/src/pages/dataset/dataset/use-bulk-operate-dataset.tsx b/web/src/pages/dataset/dataset/use-bulk-operate-dataset.tsx index 4d5c139d23..fa02493781 100644 --- a/web/src/pages/dataset/dataset/use-bulk-operate-dataset.tsx +++ b/web/src/pages/dataset/dataset/use-bulk-operate-dataset.tsx @@ -9,7 +9,6 @@ import { useSetDocumentStatus, } from '@/hooks/use-document-request'; import { IDocumentInfo } from '@/interfaces/database/document'; -import { useKnowledgeBaseContext } from '@/pages/dataset/contexts/knowledge-base-context'; import { LucideCircleX, LucideCylinder, @@ -20,6 +19,7 @@ import { } from 'lucide-react'; import { useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; +import { useParams } from 'react-router'; import { toast } from 'sonner'; import { DocumentType, RunningStatus } from './constant'; @@ -35,7 +35,7 @@ export function useBulkOperateDataset({ rowSelection, documents, ); - const { knowledgeBase } = useKnowledgeBaseContext(); + const { id } = useParams(); const { runDocumentByIds } = useRunDocument(); const { setDocumentStatus } = useSetDocumentStatus(); @@ -90,10 +90,10 @@ export function useBulkOperateDataset({ setDocumentStatus({ status: enabled, documentId: selectedRowKeys, - datasetId: knowledgeBase?.id, + datasetId: id!, }); }, - [selectedRowKeys, setDocumentStatus, knowledgeBase], + [selectedRowKeys, setDocumentStatus, id], ); const handleEnableClick = useCallback(() => { diff --git a/web/src/pages/dataset/dataset/use-dataset-table-columns.tsx b/web/src/pages/dataset/dataset/use-dataset-table-columns.tsx index 467a447803..3d31f82e9c 100644 --- a/web/src/pages/dataset/dataset/use-dataset-table-columns.tsx +++ b/web/src/pages/dataset/dataset/use-dataset-table-columns.tsx @@ -15,6 +15,7 @@ import { formatDate } from '@/utils/date'; import { ColumnDef } from '@tanstack/table-core'; import { ArrowUpDown } from 'lucide-react'; import { useTranslation } from 'react-i18next'; +import { useParams } from 'react-router'; import { MetadataType } from '../components/metedata/constant'; import { ShowManageMetadataModalProps } from '../components/metedata/interface'; import { DatasetActionCell } from './dataset-action-cell'; @@ -26,7 +27,6 @@ type UseDatasetTableColumnsType = UseChangeDocumentParserShowType & UseRenameDocumentShowType & { showLog: (record: IDocumentInfo) => void; showManageMetadataModal: (config: ShowManageMetadataModalProps) => void; - datasetId?: string; }; export function useDatasetTableColumns({ @@ -34,7 +34,6 @@ export function useDatasetTableColumns({ showRenameModal, showManageMetadataModal, showLog, - datasetId, }: UseDatasetTableColumnsType) { const { t } = useTranslation('translation', { keyPrefix: 'knowledgeDetails', @@ -42,6 +41,7 @@ export function useDatasetTableColumns({ // const { dataSourceInfo } = useDataSourceInfo(); const { navigateToChunkParsedResult } = useNavigatePage(); const { setDocumentStatus } = useSetDocumentStatus(); + const { id: datasetId } = useParams(); const columns: ColumnDef[] = [ { @@ -171,7 +171,11 @@ export function useDatasetTableColumns({ { - setDocumentStatus({ status: e, documentId: id, datasetId }); + setDocumentStatus({ + status: e, + documentId: id, + datasetId: datasetId!, + }); }} /> ); diff --git a/web/src/pages/dataset/dataset/use-run-document.ts b/web/src/pages/dataset/dataset/use-run-document.ts index e0053b2618..8494f78565 100644 --- a/web/src/pages/dataset/dataset/use-run-document.ts +++ b/web/src/pages/dataset/dataset/use-run-document.ts @@ -24,6 +24,7 @@ export const useHandleRunDocumentByIds = (id: string) => { }); setCurrentId(''); } catch (error) { + console.warn(error); setCurrentId(''); } hideModal(); diff --git a/web/src/pages/dataset/dataset/use-upload-document.ts b/web/src/pages/dataset/dataset/use-upload-document.ts index 0722582109..f96c1a8dbe 100644 --- a/web/src/pages/dataset/dataset/use-upload-document.ts +++ b/web/src/pages/dataset/dataset/use-upload-document.ts @@ -2,7 +2,7 @@ import { UploadFormSchemaType } from '@/components/file-upload-dialog'; import { useSetModalState } from '@/hooks/common-hooks'; import { useRunDocument, - useUploadNextDocument, + useUploadDocument, } from '@/hooks/use-document-request'; import { getUnSupportedFilesCount } from '@/utils/document-util'; import { useCallback } from 'react'; @@ -13,7 +13,7 @@ export const useHandleUploadDocument = () => { hideModal: hideDocumentUploadModal, showModal: showDocumentUploadModal, } = useSetModalState(); - const { uploadDocument, loading } = useUploadNextDocument(); + const { uploadDocument, loading } = useUploadDocument(); const { runDocumentByIds } = useRunDocument(); const onDocumentUploadOk = useCallback( @@ -51,7 +51,6 @@ export const useHandleUploadDocument = () => { runDocumentByIds({ documentIds: ret.data.map((x: any) => x.id), run: 1, - shouldDelete: false, }); } diff --git a/web/src/services/knowledge-service.ts b/web/src/services/knowledge-service.ts index 6160c4364f..7c72b1d2c3 100644 --- a/web/src/services/knowledge-service.ts +++ b/web/src/services/knowledge-service.ts @@ -1,4 +1,3 @@ -import { Authorization } from '@/constants/authorization'; import { IRenameTag } from '@/interfaces/database/dataset'; import { IFetchDocumentListRequestBody, @@ -6,21 +5,15 @@ import { } from '@/interfaces/request/knowledge'; import { ProcessingType } from '@/pages/dataset/dataset-overview/dataset-common'; import api from '@/utils/api'; -import { getAuthorization } from '@/utils/authorization-util'; import registerServer from '@/utils/register-server'; import request from '@/utils/request'; -import axios from 'axios'; const { createKb, rmKb, kbList, - documentChangeStatus, - documentChangeParser, documentThumbnails, documentIngest, - documentUpload, - webCrawl, listTagByKnowledgeIds, setMeta, getMeta, @@ -41,31 +34,14 @@ const methods = { url: kbList, method: 'get', }, - // document manager - documentChangeStatus: { - url: documentChangeStatus, - method: 'post', - }, documentIngest: { url: documentIngest, method: 'post', }, - documentChangeParser: { - url: documentChangeParser, - method: 'post', - }, documentThumbnails: { url: documentThumbnails, method: 'get', }, - documentUpload: { - url: documentUpload, - method: 'post', - }, - webCrawl: { - url: webCrawl, - method: 'post', - }, setMeta: { url: setMeta, method: 'post', @@ -74,10 +50,6 @@ const methods = { url: listTagByKnowledgeIds, method: 'get', }, - documentFilter: { - url: api.getDatasetFilter, - method: 'get', - }, getMeta: { url: getMeta, method: 'get', @@ -317,14 +289,9 @@ export const listDocument = ( export const documentFilter = (kb_id: string) => request.get(api.getDatasetFilter(kb_id), { params: {} }); -// Custom upload function that handles dynamic URL using axios directly export const uploadDocument = async (datasetId: string, formData: FormData) => { const url = api.documentUpload(datasetId); - const response = await axios.post(url, formData, { - headers: { - [Authorization]: getAuthorization(), - }, - }); + const response = await request.post(url, { data: formData }); return response.data; }; @@ -335,18 +302,6 @@ export const createDocument = async (datasetId: string, name: string) => { return response.data; }; -export const webCrawlDocument = async ( - datasetId: string, - formData: FormData, -) => { - const response = await axios.post(api.webCrawl(datasetId), formData, { - headers: { - [Authorization]: getAuthorization(), - }, - }); - return response.data; -}; - export const renameDocument = ( datasetId: string, documentId: string, diff --git a/web/src/utils/next-request.ts b/web/src/utils/next-request.ts index c804400a34..63bc2fefe4 100644 --- a/web/src/utils/next-request.ts +++ b/web/src/utils/next-request.ts @@ -7,7 +7,7 @@ import authorizationUtil, { } from '@/utils/authorization-util'; import notification from '@/utils/notification'; import axios from 'axios'; -import { convertTheKeysOfTheObjectToSnake } from './common-util'; +import { convertTheKeysOfTheObjectToSnake, isFormData } from './common-util'; import { setCachedLlmList } from './llm-cache'; import { addTenantParams } from './llm-util'; @@ -88,7 +88,9 @@ request.interceptors.request.use( const params = convertTheKeysOfTheObjectToSnake(config.params); // Add tenant parameters to data - const dataWithTenantParams = addTenantParams(data, config.url); + const dataWithTenantParams = isFormData(data) + ? data + : addTenantParams(data, config.url); const newConfig = { ...config, data: dataWithTenantParams, params }; diff --git a/web/src/utils/request.ts b/web/src/utils/request.ts index f5fd411586..9949bcf074 100644 --- a/web/src/utils/request.ts +++ b/web/src/utils/request.ts @@ -12,7 +12,7 @@ import authorizationUtil, { } from '@/utils/authorization-util'; import notification from '@/utils/notification'; import { RequestMethod, extend } from 'umi-request'; -import { convertTheKeysOfTheObjectToSnake } from './common-util'; +import { convertTheKeysOfTheObjectToSnake, isFormData } from './common-util'; import { setCachedLlmList } from './llm-cache'; import { addTenantParams } from './llm-util'; @@ -92,7 +92,9 @@ request.interceptors.request.use((url: string, options: any) => { const params = convertTheKeysOfTheObjectToSnake(options.params); // Add tenant parameters to data - const dataWithTenantParams = addTenantParams(data, url); + const dataWithTenantParams = isFormData(data) + ? data + : addTenantParams(data, url); return { url,