import React, { useMemo } from 'react'; import { Box, Flex, Button, ModalFooter, ModalBody, Input, HStack } from '@chakra-ui/react'; import { useSelectFile } from '@/web/common/file/hooks/useSelectFile'; import { useForm } from 'react-hook-form'; import { useRouter } from 'next/router'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import Avatar from '@fastgpt/web/components/common/Avatar'; import MyTooltip from '@fastgpt/web/components/common/MyTooltip'; import MyModal from '@fastgpt/web/components/common/MyModal'; import { postCreateDataset } from '@/web/core/dataset/api'; import type { CreateDatasetParams } from '@/global/core/dataset/api.d'; import { useTranslation } from 'next-i18next'; import { DatasetTypeEnum, DatasetTypeMap } from '@fastgpt/global/core/dataset/constants'; import AIModelSelector from '@/components/Select/AIModelSelector'; import { useSystem } from '@fastgpt/web/hooks/useSystem'; import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip'; import ComplianceTip from '@/components/common/ComplianceTip/index'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { getDocPath } from '@/web/common/system/doc'; import ApiDatasetForm from '../ApiDatasetForm'; import { getWebDefaultEmbeddingModel, getWebDefaultLLMModel } from '@/web/common/system/utils'; export type CreateDatasetType = | DatasetTypeEnum.dataset | DatasetTypeEnum.apiDataset | DatasetTypeEnum.websiteDataset | DatasetTypeEnum.feishu | DatasetTypeEnum.yuque; const CreateModal = ({ onClose, parentId, type }: { onClose: () => void; parentId?: string; type: CreateDatasetType; }) => { const { t } = useTranslation(); const router = useRouter(); const { defaultModels, embeddingModelList, datasetModelList, getVlmModelList } = useSystemStore(); const { isPc } = useSystem(); const filterNotHiddenVectorModelList = embeddingModelList.filter((item) => !item.hidden); const vllmModelList = useMemo(() => getVlmModelList(), [getVlmModelList]); const form = useForm({ defaultValues: { parentId, type: type || DatasetTypeEnum.dataset, avatar: DatasetTypeMap[type].avatar, name: '', intro: '', vectorModel: defaultModels.embedding?.model || getWebDefaultEmbeddingModel(embeddingModelList)?.model, agentModel: defaultModels.datasetTextLLM?.model || getWebDefaultLLMModel(datasetModelList)?.model, vlmModel: defaultModels.datasetImageLLM?.model } }); const { register, setValue, handleSubmit, watch } = form; const avatar = watch('avatar'); const vectorModel = watch('vectorModel'); const agentModel = watch('agentModel'); const vlmModel = watch('vlmModel'); const { File, onOpen: onOpenSelectFile, onSelectImage } = useSelectFile({ fileType: 'image/*', multiple: false }); /* create a new kb and router to it */ const { run: onclickCreate, loading: creating } = useRequest2( async (data: CreateDatasetParams) => await postCreateDataset(data), { successToast: t('common:create_success'), errorToast: t('common:create_failed'), onSuccess(id) { router.push(`/dataset/detail?datasetId=${id}`); } } ); return ( {t('common:core.dataset.Create dataset', { name: t(DatasetTypeMap[type].label) })} } isOpen onClose={onClose} isCentered={!isPc} w={'490px'} > {t('common:input_name')} {DatasetTypeMap[type]?.courseUrl && ( window.open(getDocPath(DatasetTypeMap[type].courseUrl!), '_blank')} > {t('common:Instructions')} )} {t('common:core.ai.model.Vector Model')} ({ label: item.name, value: item.model }))} onChange={(e) => { setValue('vectorModel' as const, e); }} /> {t('common:core.ai.model.Dataset Agent Model')} ({ label: item.name, value: item.model }))} onChange={(e) => { setValue('agentModel', e); }} /> {t('dataset:vllm_model')} ({ label: item.name, value: item.model }))} onChange={(e) => { setValue('vlmModel', e); }} /> {/* @ts-ignore */} onSelectImage(e, { maxH: 300, maxW: 300, callback: (e) => setValue('avatar', e) }) } /> ); }; export default CreateModal;