import MyModal from '@fastgpt/web/components/common/MyModal'; import { useTranslation } from 'next-i18next'; import { strIsLink } from '@fastgpt/global/common/string/tools'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { useForm } from 'react-hook-form'; import { getDocPath } from '@/web/common/system/doc'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useMyStep } from '@fastgpt/web/hooks/useStep'; import MyDivider from '@fastgpt/web/components/common/MyDivider'; import React from 'react'; import { Box, Link, Input, Button, ModalBody, ModalFooter, Stack } from '@chakra-ui/react'; import { DataChunkSplitModeEnum, DatasetCollectionDataProcessModeEnum } from '@fastgpt/global/core/dataset/constants'; import { ChunkSettingModeEnum } from '@fastgpt/global/core/dataset/constants'; import { Prompt_AgentQA } from '@fastgpt/global/core/ai/prompt/agent'; import { useContextSelector } from 'use-context-selector'; import { DatasetPageContext } from '@/web/core/dataset/context/datasetPageContext'; import CollectionChunkForm, { collectionChunkForm2StoreChunkData, type CollectionChunkFormType } from '../Form/CollectionChunkForm'; import { getAutoIndexSize, getLLMDefaultChunkSize } from '@fastgpt/global/core/dataset/training/utils'; import { type ChunkSettingsType } from '@fastgpt/global/core/dataset/type'; import PopoverConfirm from '@fastgpt/web/components/common/MyPopover/PopoverConfirm'; import { defaultFormData } from '../Import/Context'; export type WebsiteConfigFormType = { websiteConfig: { url: string; selector: string; }; chunkSettings: ChunkSettingsType; }; const WebsiteConfigModal = ({ onClose, onSuccess }: { onClose: () => void; onSuccess: (data: WebsiteConfigFormType) => void; }) => { const { t } = useTranslation(); const { feConfigs } = useSystemStore(); const { toast } = useToast(); const steps = [ { title: t('dataset:website_info') }, { title: t('dataset:params_config') } ]; const datasetDetail = useContextSelector(DatasetPageContext, (v) => v.datasetDetail); const websiteConfig = datasetDetail.websiteConfig; const chunkSettings = datasetDetail.chunkSettings; const { register: websiteInfoForm, handleSubmit: websiteInfoHandleSubmit, getValues: websiteInfoGetValues } = useForm({ defaultValues: { url: websiteConfig?.url || '', selector: websiteConfig?.selector || '' } }); const isEdit = !!websiteConfig?.url; const { activeStep, goToPrevious, goToNext, MyStep } = useMyStep({ defaultStep: 0, steps }); const form = useForm({ defaultValues: { trainingType: chunkSettings?.trainingType, chunkTriggerType: chunkSettings?.chunkTriggerType || defaultFormData.chunkTriggerType, chunkTriggerMinSize: chunkSettings?.chunkTriggerMinSize || defaultFormData.chunkTriggerMinSize, dataEnhanceCollectionName: chunkSettings?.dataEnhanceCollectionName || defaultFormData.dataEnhanceCollectionName, imageIndex: chunkSettings?.imageIndex || defaultFormData.imageIndex, autoIndexes: chunkSettings?.autoIndexes || defaultFormData.autoIndexes, chunkSettingMode: chunkSettings?.chunkSettingMode || defaultFormData.chunkSettingMode, chunkSplitMode: chunkSettings?.chunkSplitMode || defaultFormData.chunkSplitMode, paragraphChunkAIMode: chunkSettings?.paragraphChunkAIMode || defaultFormData.paragraphChunkAIMode, paragraphChunkDeep: chunkSettings?.paragraphChunkDeep || defaultFormData.paragraphChunkDeep, paragraphChunkMinSize: chunkSettings?.paragraphChunkMinSize || defaultFormData.paragraphChunkMinSize, chunkSize: chunkSettings?.chunkSize || defaultFormData.chunkSize, chunkSplitter: chunkSettings?.chunkSplitter || defaultFormData.chunkSplitter, indexSize: chunkSettings?.indexSize || defaultFormData.indexSize, qaPrompt: chunkSettings?.qaPrompt || Prompt_AgentQA.description } }); return ( {activeStep == 0 && ( <> {t('common:core.dataset.website.Config Description')} {feConfigs?.docUrl && ( {t('common:read_course')} )} {t('common:core.dataset.website.Base Url')} {t('common:core.dataset.website.Selector')}({t('common:choosable')}) )} {activeStep == 1 && } {activeStep == 0 && ( <> )} {activeStep == 1 && ( <> {t('common:core.dataset.website.Start Sync')}} content={ isEdit ? t('common:core.dataset.website.Confirm Update Tips') : t('common:core.dataset.website.Confirm Create Tips') } onConfirm={() => form.handleSubmit((data) => onSuccess({ websiteConfig: websiteInfoGetValues(), chunkSettings: collectionChunkForm2StoreChunkData({ ...data, agentModel: datasetDetail.agentModel, vectorModel: datasetDetail.vectorModel }) }) )() } /> )} ); }; export default WebsiteConfigModal;