mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-04 01:29:35 +08:00
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)
This commit is contained in:
@@ -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<string[]>([]);
|
||||
const { data } = useQuery<Record<string, string>>({
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
@@ -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<IDocumentInfo>[] = [
|
||||
{
|
||||
@@ -171,7 +171,11 @@ export function useDatasetTableColumns({
|
||||
<Switch
|
||||
checked={row.getValue('status') === '1'}
|
||||
onCheckedChange={(e) => {
|
||||
setDocumentStatus({ status: e, documentId: id, datasetId });
|
||||
setDocumentStatus({
|
||||
status: e,
|
||||
documentId: id,
|
||||
datasetId: datasetId!,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -24,6 +24,7 @@ export const useHandleRunDocumentByIds = (id: string) => {
|
||||
});
|
||||
setCurrentId('');
|
||||
} catch (error) {
|
||||
console.warn(error);
|
||||
setCurrentId('');
|
||||
}
|
||||
hideModal();
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 };
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user