import React, { useState } from 'react'; import { Card, Flex, Box, Button, ModalBody, ModalHeader, ModalFooter, useTheme, Textarea } from '@chakra-ui/react'; import Avatar from '@/components/Avatar'; import { KbListItemType } from '@/types/plugin'; import { useForm } from 'react-hook-form'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; import type { SelectedKbType } from '@/types/plugin'; import { useGlobalStore } from '@/store/global'; import { useToast } from '@/hooks/useToast'; import MySlider from '@/components/Slider'; import MyTooltip from '@/components/MyTooltip'; import MyModal from '@/components/MyModal'; import MyIcon from '@/components/Icon'; export type KbParamsType = { searchSimilarity: number; searchLimit: number; searchEmptyText: string; }; export const KBSelectModal = ({ kbList, activeKbs = [], onChange, onClose }: { kbList: KbListItemType[]; activeKbs: SelectedKbType; onChange: (e: SelectedKbType) => void; onClose: () => void; }) => { const theme = useTheme(); const [selectedKbList, setSelectedKbList] = useState(activeKbs); const { isPc } = useGlobalStore(); const { toast } = useToast(); return ( 关联的知识库({selectedKbList.length}) 仅能选择同一个索引模型的知识库 {kbList.map((item) => (() => { const selected = !!selectedKbList.find((kb) => kb.kbId === item._id); const active = !!activeKbs.find((kb) => kb.kbId === item._id); return ( { if (selected) { setSelectedKbList((state) => state.filter((kb) => kb.kbId !== item._id)); } else { const vectorModel = selectedKbList[0]?.vectorModel?.model; if (vectorModel && vectorModel !== item.vectorModel.model) { return toast({ status: 'warning', title: '仅能选择同一个索引模型的知识库' }); } setSelectedKbList((state) => [ ...state, { kbId: item._id, vectorModel: item.vectorModel } ]); } }} > {item.name} {item.vectorModel.name} ); })() )} ); }; export const KbParamsModal = ({ searchEmptyText, searchLimit, searchSimilarity, onClose, onChange }: KbParamsType & { onClose: () => void; onChange: (e: KbParamsType) => void }) => { const [refresh, setRefresh] = useState(false); const { register, setValue, getValues, handleSubmit } = useForm({ defaultValues: { searchEmptyText, searchLimit, searchSimilarity } }); return ( 相似度 { setValue('searchSimilarity', val); setRefresh(!refresh); }} /> 单次搜索数量 { setValue('searchLimit', val); setRefresh(!refresh); }} /> 空搜索回复 ); }; export default KBSelectModal;