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 { 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, } from '@/hooks/use-chat-request'; import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; import { buildMessageUuidWithRole } from '@/utils/chat'; import { zodResolver } from '@hookform/resolvers/zod'; import { ListCheck, Plus, Trash2 } from 'lucide-react'; import { forwardRef, useCallback, useImperativeHandle, useRef } from 'react'; import { useForm } from 'react-hook-form'; 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[]; } & Pick< MultipleChatBoxProps, 'controller' | 'removeChatBox' | 'addChatBox' | 'chatBoxIds' >; const ChatCard = forwardRef(function ChatCard( { controller, removeChatBox, id, idx, addChatBox, chatBoxIds, derivedMessages, }: ChatCardProps, ref, ) { const { sendLoading, 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 { data: userInfo } = useFetchUserInfo(); const { data: currentDialog } = useFetchDialog(); const { data: conversation } = useFetchConversation(); const isLatestChat = idx === chatBoxIds.length - 1; const handleRemoveChatBox = useCallback(() => { removeChatBox(id); }, [id, removeChatBox]); 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, } = useSendMultipleChatMessage(controller, chatBoxIds); const { createConversationBeforeUploadDocument } = useCreateConversationBeforeUploadDocument(); const { conversationId } = useGetChatSearchParams(); const disabled = useGetSendButtonDisabled(); const sendDisabled = useSendButtonDisabled(value); return (
{chatBoxIds.map((id, idx) => ( ))}
); }