| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- import {
- IKnowledgeResult,
- INextTestingResult,
- } from '@/interfaces/database/knowledge';
- import { ITestRetrievalRequestBody } from '@/interfaces/request/knowledge';
- import i18n from '@/locales/config';
- import kbService, { listDataset } from '@/services/knowledge-service';
- import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
- import { useDebounce } from 'ahooks';
- import { message } from 'antd';
- import { useCallback, useMemo, useState } from 'react';
- import { useParams } from 'umi';
- import {
- useGetPaginationWithRouter,
- useHandleSearchChange,
- } from './logic-hooks';
- import { useSetPaginationParams } from './route-hook';
-
- export const enum KnowledgeApiAction {
- TestRetrieval = 'testRetrieval',
- FetchKnowledgeListByPage = 'fetchKnowledgeListByPage',
- CreateKnowledge = 'createKnowledge',
- DeleteKnowledge = 'deleteKnowledge',
- SaveKnowledge = 'saveKnowledge',
- }
-
- export const useKnowledgeBaseId = () => {
- const { id } = useParams();
-
- return id;
- };
-
- export const useTestRetrieval = () => {
- const knowledgeBaseId = useKnowledgeBaseId();
- const { page, size: pageSize } = useSetPaginationParams();
- const [values, setValues] = useState<ITestRetrievalRequestBody>();
-
- const queryParams = useMemo(() => {
- return {
- ...values,
- kb_id: values?.kb_id || knowledgeBaseId,
- page,
- size: pageSize,
- };
- }, [knowledgeBaseId, page, pageSize, values]);
-
- const {
- data,
- isFetching: loading,
- refetch,
- } = useQuery<INextTestingResult>({
- queryKey: [KnowledgeApiAction.TestRetrieval, queryParams],
- initialData: {
- chunks: [],
- doc_aggs: [],
- total: 0,
- },
- enabled: false,
- gcTime: 0,
- queryFn: async () => {
- const { data } = await kbService.retrieval_test(queryParams);
- console.log('🚀 ~ queryFn: ~ data:', data);
- return data?.data ?? {};
- },
- });
-
- return { data, loading, setValues, refetch };
- };
-
- export const useFetchNextKnowledgeListByPage = () => {
- const { searchString, handleInputChange } = useHandleSearchChange();
- const { pagination, setPagination } = useGetPaginationWithRouter();
- const [ownerIds, setOwnerIds] = useState<string[]>([]);
- const debouncedSearchString = useDebounce(searchString, { wait: 500 });
-
- const { data, isFetching: loading } = useQuery<IKnowledgeResult>({
- queryKey: [
- KnowledgeApiAction.FetchKnowledgeListByPage,
- {
- debouncedSearchString,
- ...pagination,
- ownerIds,
- },
- ],
- initialData: {
- kbs: [],
- total: 0,
- },
- gcTime: 0,
- queryFn: async () => {
- const { data } = await listDataset(
- {
- keywords: debouncedSearchString,
- page_size: pagination.pageSize,
- page: pagination.current,
- },
- {
- owner_ids: ownerIds,
- },
- );
-
- return data?.data;
- },
- });
-
- const onInputChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(
- (e) => {
- // setPagination({ page: 1 }); // TODO: 这里导致重复请求
- handleInputChange(e);
- },
- [handleInputChange],
- );
-
- const handleOwnerIdsChange = useCallback((ids: string[]) => {
- // setPagination({ page: 1 }); // TODO: 这里导致重复请求
- setOwnerIds(ids);
- }, []);
-
- return {
- ...data,
- searchString,
- handleInputChange: onInputChange,
- pagination: { ...pagination, total: data?.total },
- setPagination,
- loading,
- setOwnerIds: handleOwnerIdsChange,
- ownerIds,
- };
- };
-
- export const useCreateKnowledge = () => {
- const queryClient = useQueryClient();
- const {
- data,
- isPending: loading,
- mutateAsync,
- } = useMutation({
- mutationKey: [KnowledgeApiAction.CreateKnowledge],
- mutationFn: async (params: { id?: string; name: string }) => {
- const { data = {} } = await kbService.createKb(params);
- if (data.code === 0) {
- message.success(
- i18n.t(`message.${params?.id ? 'modified' : 'created'}`),
- );
- queryClient.invalidateQueries({ queryKey: ['fetchKnowledgeList'] });
- }
- return data;
- },
- });
-
- return { data, loading, createKnowledge: mutateAsync };
- };
-
- export const useDeleteKnowledge = () => {
- const queryClient = useQueryClient();
- const {
- data,
- isPending: loading,
- mutateAsync,
- } = useMutation({
- mutationKey: [KnowledgeApiAction.DeleteKnowledge],
- mutationFn: async (id: string) => {
- const { data } = await kbService.rmKb({ kb_id: id });
- if (data.code === 0) {
- message.success(i18n.t(`message.deleted`));
- queryClient.invalidateQueries({
- queryKey: [KnowledgeApiAction.FetchKnowledgeListByPage],
- });
- }
- return data?.data ?? [];
- },
- });
-
- return { data, loading, deleteKnowledge: mutateAsync };
- };
-
- export const useUpdateKnowledge = (shouldFetchList = false) => {
- const knowledgeBaseId = useKnowledgeBaseId();
- const queryClient = useQueryClient();
- const {
- data,
- isPending: loading,
- mutateAsync,
- } = useMutation({
- mutationKey: [KnowledgeApiAction.SaveKnowledge],
- mutationFn: async (params: Record<string, any>) => {
- const { data = {} } = await kbService.updateKb({
- kb_id: params?.kb_id ? params?.kb_id : knowledgeBaseId,
- ...params,
- });
- if (data.code === 0) {
- message.success(i18n.t(`message.updated`));
- if (shouldFetchList) {
- queryClient.invalidateQueries({
- queryKey: [KnowledgeApiAction.FetchKnowledgeListByPage],
- });
- } else {
- queryClient.invalidateQueries({ queryKey: ['fetchKnowledgeDetail'] });
- }
- }
- return data;
- },
- });
-
- return { data, loading, saveKnowledgeConfiguration: mutateAsync };
- };
|