Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

use-knowledge-request.ts 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. import {
  2. IKnowledgeResult,
  3. INextTestingResult,
  4. } from '@/interfaces/database/knowledge';
  5. import { ITestRetrievalRequestBody } from '@/interfaces/request/knowledge';
  6. import i18n from '@/locales/config';
  7. import kbService, { listDataset } from '@/services/knowledge-service';
  8. import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
  9. import { useDebounce } from 'ahooks';
  10. import { message } from 'antd';
  11. import { useCallback, useMemo, useState } from 'react';
  12. import { useParams } from 'umi';
  13. import {
  14. useGetPaginationWithRouter,
  15. useHandleSearchChange,
  16. } from './logic-hooks';
  17. import { useSetPaginationParams } from './route-hook';
  18. export const enum KnowledgeApiAction {
  19. TestRetrieval = 'testRetrieval',
  20. FetchKnowledgeListByPage = 'fetchKnowledgeListByPage',
  21. CreateKnowledge = 'createKnowledge',
  22. DeleteKnowledge = 'deleteKnowledge',
  23. SaveKnowledge = 'saveKnowledge',
  24. }
  25. export const useKnowledgeBaseId = () => {
  26. const { id } = useParams();
  27. return id;
  28. };
  29. export const useTestRetrieval = () => {
  30. const knowledgeBaseId = useKnowledgeBaseId();
  31. const { page, size: pageSize } = useSetPaginationParams();
  32. const [values, setValues] = useState<ITestRetrievalRequestBody>();
  33. const queryParams = useMemo(() => {
  34. return {
  35. ...values,
  36. kb_id: values?.kb_id || knowledgeBaseId,
  37. page,
  38. size: pageSize,
  39. };
  40. }, [knowledgeBaseId, page, pageSize, values]);
  41. const {
  42. data,
  43. isFetching: loading,
  44. refetch,
  45. } = useQuery<INextTestingResult>({
  46. queryKey: [KnowledgeApiAction.TestRetrieval, queryParams],
  47. initialData: {
  48. chunks: [],
  49. doc_aggs: [],
  50. total: 0,
  51. },
  52. enabled: false,
  53. gcTime: 0,
  54. queryFn: async () => {
  55. const { data } = await kbService.retrieval_test(queryParams);
  56. console.log('🚀 ~ queryFn: ~ data:', data);
  57. return data?.data ?? {};
  58. },
  59. });
  60. return { data, loading, setValues, refetch };
  61. };
  62. export const useFetchNextKnowledgeListByPage = () => {
  63. const { searchString, handleInputChange } = useHandleSearchChange();
  64. const { pagination, setPagination } = useGetPaginationWithRouter();
  65. const [ownerIds, setOwnerIds] = useState<string[]>([]);
  66. const debouncedSearchString = useDebounce(searchString, { wait: 500 });
  67. const { data, isFetching: loading } = useQuery<IKnowledgeResult>({
  68. queryKey: [
  69. KnowledgeApiAction.FetchKnowledgeListByPage,
  70. {
  71. debouncedSearchString,
  72. ...pagination,
  73. ownerIds,
  74. },
  75. ],
  76. initialData: {
  77. kbs: [],
  78. total: 0,
  79. },
  80. gcTime: 0,
  81. queryFn: async () => {
  82. const { data } = await listDataset(
  83. {
  84. keywords: debouncedSearchString,
  85. page_size: pagination.pageSize,
  86. page: pagination.current,
  87. },
  88. {
  89. owner_ids: ownerIds,
  90. },
  91. );
  92. return data?.data;
  93. },
  94. });
  95. const onInputChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(
  96. (e) => {
  97. // setPagination({ page: 1 }); // TODO: 这里导致重复请求
  98. handleInputChange(e);
  99. },
  100. [handleInputChange],
  101. );
  102. const handleOwnerIdsChange = useCallback((ids: string[]) => {
  103. // setPagination({ page: 1 }); // TODO: 这里导致重复请求
  104. setOwnerIds(ids);
  105. }, []);
  106. return {
  107. ...data,
  108. searchString,
  109. handleInputChange: onInputChange,
  110. pagination: { ...pagination, total: data?.total },
  111. setPagination,
  112. loading,
  113. setOwnerIds: handleOwnerIdsChange,
  114. ownerIds,
  115. };
  116. };
  117. export const useCreateKnowledge = () => {
  118. const queryClient = useQueryClient();
  119. const {
  120. data,
  121. isPending: loading,
  122. mutateAsync,
  123. } = useMutation({
  124. mutationKey: [KnowledgeApiAction.CreateKnowledge],
  125. mutationFn: async (params: { id?: string; name: string }) => {
  126. const { data = {} } = await kbService.createKb(params);
  127. if (data.code === 0) {
  128. message.success(
  129. i18n.t(`message.${params?.id ? 'modified' : 'created'}`),
  130. );
  131. queryClient.invalidateQueries({ queryKey: ['fetchKnowledgeList'] });
  132. }
  133. return data;
  134. },
  135. });
  136. return { data, loading, createKnowledge: mutateAsync };
  137. };
  138. export const useDeleteKnowledge = () => {
  139. const queryClient = useQueryClient();
  140. const {
  141. data,
  142. isPending: loading,
  143. mutateAsync,
  144. } = useMutation({
  145. mutationKey: [KnowledgeApiAction.DeleteKnowledge],
  146. mutationFn: async (id: string) => {
  147. const { data } = await kbService.rmKb({ kb_id: id });
  148. if (data.code === 0) {
  149. message.success(i18n.t(`message.deleted`));
  150. queryClient.invalidateQueries({
  151. queryKey: [KnowledgeApiAction.FetchKnowledgeListByPage],
  152. });
  153. }
  154. return data?.data ?? [];
  155. },
  156. });
  157. return { data, loading, deleteKnowledge: mutateAsync };
  158. };
  159. export const useUpdateKnowledge = (shouldFetchList = false) => {
  160. const knowledgeBaseId = useKnowledgeBaseId();
  161. const queryClient = useQueryClient();
  162. const {
  163. data,
  164. isPending: loading,
  165. mutateAsync,
  166. } = useMutation({
  167. mutationKey: [KnowledgeApiAction.SaveKnowledge],
  168. mutationFn: async (params: Record<string, any>) => {
  169. const { data = {} } = await kbService.updateKb({
  170. kb_id: params?.kb_id ? params?.kb_id : knowledgeBaseId,
  171. ...params,
  172. });
  173. if (data.code === 0) {
  174. message.success(i18n.t(`message.updated`));
  175. if (shouldFetchList) {
  176. queryClient.invalidateQueries({
  177. queryKey: [KnowledgeApiAction.FetchKnowledgeListByPage],
  178. });
  179. } else {
  180. queryClient.invalidateQueries({ queryKey: ['fetchKnowledgeDetail'] });
  181. }
  182. }
  183. return data;
  184. },
  185. });
  186. return { data, loading, saveKnowledgeConfiguration: mutateAsync };
  187. };