You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

hooks.ts 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import {
  2. useFetchKnowledgeBaseConfiguration,
  3. useUpdateKnowledge,
  4. } from '@/hooks/knowledge-hooks';
  5. import { useFetchLlmList, useSelectLlmOptions } from '@/hooks/llm-hooks';
  6. import { useNavigateToDataset } from '@/hooks/route-hook';
  7. import {
  8. useFetchTenantInfo,
  9. useSelectParserList,
  10. } from '@/hooks/user-setting-hooks';
  11. import {
  12. getBase64FromUploadFileList,
  13. getUploadFileListFromBase64,
  14. } from '@/utils/file-util';
  15. import { useIsFetching } from '@tanstack/react-query';
  16. import { Form, UploadFile } from 'antd';
  17. import { FormInstance } from 'antd/lib';
  18. import pick from 'lodash/pick';
  19. import { useCallback, useEffect } from 'react';
  20. import { LlmModelType } from '../../constant';
  21. export const useSubmitKnowledgeConfiguration = (form: FormInstance) => {
  22. const { saveKnowledgeConfiguration, loading } = useUpdateKnowledge();
  23. const navigateToDataset = useNavigateToDataset();
  24. const submitKnowledgeConfiguration = useCallback(async () => {
  25. const values = await form.validateFields();
  26. const avatar = await getBase64FromUploadFileList(values.avatar);
  27. saveKnowledgeConfiguration({
  28. ...values,
  29. avatar,
  30. });
  31. navigateToDataset();
  32. }, [saveKnowledgeConfiguration, form, navigateToDataset]);
  33. return {
  34. submitKnowledgeConfiguration,
  35. submitLoading: loading,
  36. navigateToDataset,
  37. };
  38. };
  39. export const useFetchKnowledgeConfigurationOnMount = (form: FormInstance) => {
  40. const parserList = useSelectParserList();
  41. const embeddingModelOptions = useSelectLlmOptions();
  42. useFetchTenantInfo();
  43. const { data: knowledgeDetails } = useFetchKnowledgeBaseConfiguration();
  44. useFetchLlmList(LlmModelType.Embedding);
  45. useEffect(() => {
  46. const fileList: UploadFile[] = getUploadFileListFromBase64(
  47. knowledgeDetails.avatar,
  48. );
  49. form.setFieldsValue({
  50. ...pick(knowledgeDetails, [
  51. 'description',
  52. 'name',
  53. 'permission',
  54. 'embd_id',
  55. 'parser_id',
  56. 'language',
  57. 'parser_config',
  58. ]),
  59. avatar: fileList,
  60. });
  61. }, [form, knowledgeDetails]);
  62. return {
  63. parserList,
  64. embeddingModelOptions,
  65. disabled: knowledgeDetails.chunk_num > 0,
  66. };
  67. };
  68. export const useSelectKnowledgeDetailsLoading = () =>
  69. useIsFetching({ queryKey: ['fetchKnowledgeDetail'] }) > 0;
  70. export const useHandleChunkMethodChange = () => {
  71. const [form] = Form.useForm();
  72. const chunkMethod = Form.useWatch('parser_id', form);
  73. return { form, chunkMethod };
  74. };