import { LargeModelFormFieldWithoutFilter } from '@/components/large-model-form-field'; import { LlmSettingSchema } from '@/components/llm-setting-items/next'; import { NextMessageInput } from '@/components/message-input/next'; import MessageItem from '@/components/message-item'; import PdfDrawer from '@/components/pdf-drawer'; import { useClickDrawer } from '@/components/pdf-drawer/hooks'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Form } from '@/components/ui/form'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; import { MessageType } from '@/constants/chat'; import { useScrollToBottom } from '@/hooks/logic-hooks'; import { useFetchConversation, useFetchDialog, useGetChatSearchParams, useSetDialog, } from '@/hooks/use-chat-request'; import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; import { buildMessageUuidWithRole } from '@/utils/chat'; import { zodResolver } from '@hookform/resolvers/zod'; import { isEmpty, omit } from 'lodash'; import { ListCheck, Plus, Trash2 } from 'lucide-react'; import { forwardRef, useCallback, useImperativeHandle, useRef } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { useParams } from 'umi'; import { z } from 'zod'; import { useGetSendButtonDisabled, useSendButtonDisabled, } from '../../hooks/use-button-disabled'; import { useCreateConversationBeforeUploadDocument } from '../../hooks/use-create-conversation'; import { useSendMessage } from '../../hooks/use-send-chat-message'; import { useSendMultipleChatMessage } from '../../hooks/use-send-multiple-message'; import { buildMessageItemReference } from '../../utils'; import { IMessage } from '../interface'; import { useAddChatBox } from '../use-add-box'; type MultipleChatBoxProps = { controller: AbortController; chatBoxIds: string[]; } & Pick< ReturnType, 'removeChatBox' | 'addChatBox' | 'chatBoxIds' >; type ChatCardProps = { id: string; idx: number; derivedMessages: IMessage[]; sendLoading: boolean; } & Pick< MultipleChatBoxProps, 'controller' | 'removeChatBox' | 'addChatBox' | 'chatBoxIds' > & Pick, 'clickDocumentButton'>; const ChatCard = forwardRef(function ChatCard( { controller, removeChatBox, id, idx, addChatBox, chatBoxIds, derivedMessages, sendLoading, clickDocumentButton, }: ChatCardProps, ref, ) { const { id: dialogId } = useParams(); const { setDialog } = useSetDialog(); const { regenerateMessage, removeMessageById } = useSendMessage(controller); const messageContainerRef = useRef(null); const { scrollRef } = useScrollToBottom(derivedMessages, messageContainerRef); const FormSchema = z.object(LlmSettingSchema); const form = useForm>({ resolver: zodResolver(FormSchema), defaultValues: { llm_id: '', }, }); const llmId = useWatch({ control: form.control, name: 'llm_id' }); const { data: userInfo } = useFetchUserInfo(); const { data: currentDialog } = useFetchDialog(); const { data: conversation } = useFetchConversation(); const isLatestChat = idx === chatBoxIds.length - 1; const handleRemoveChatBox = useCallback(() => { removeChatBox(id); }, [id, removeChatBox]); const handleApplyConfig = useCallback(() => { const values = form.getValues(); setDialog({ ...currentDialog, llm_id: values.llm_id, llm_setting: omit(values, 'llm_id'), dialog_id: dialogId, }); }, [currentDialog, dialogId, form, setDialog]); useImperativeHandle(ref, () => ({ getFormData: () => form.getValues(), })); return (
{idx + 1}

Apply model configs

{!isLatestChat || chatBoxIds.length === 3 ? ( ) : ( )}
{derivedMessages?.map((message, i) => { return ( ); })}
); }); export function MultipleChatBox({ controller, chatBoxIds, removeChatBox, addChatBox, }: MultipleChatBoxProps) { const { value, sendLoading, messageRecord, handleInputChange, handlePressEnter, stopOutputMessage, setFormRef, handleUploadFile, } = useSendMultipleChatMessage(controller, chatBoxIds); const { createConversationBeforeUploadDocument } = useCreateConversationBeforeUploadDocument(); const { conversationId } = useGetChatSearchParams(); const disabled = useGetSendButtonDisabled(); const sendDisabled = useSendButtonDisabled(value); const { visible, hideModal, documentId, selectedChunk, clickDocumentButton } = useClickDrawer(); return (
{chatBoxIds.map((id, idx) => ( ))}
{visible && ( )}
); }