fix(web): regenerate in multi-model chat uses the card's own state and model (#17126)

This commit is contained in:
euvre
2026-07-21 10:40:59 +08:00
committed by GitHub
parent c098c4c296
commit ee8aa03fa0
3 changed files with 33 additions and 14 deletions

View File

@@ -23,8 +23,8 @@ import { SelectWithSearch } from '../originui/select-with-search';
import { AudioButton } from '../ui/audio-button';
export type NextMessageInputOnPressEnterParameter = {
enableThinking: string;
enableInternet: boolean;
enableThinking?: string;
enableInternet?: boolean;
};
interface NextMessageInputProps {

View File

@@ -18,6 +18,7 @@ import {
import { MessageType } from '@/constants/chat';
import {
useHandleMessageInputChange,
useRegenerateMessage,
useScrollToBottom,
} from '@/hooks/logic-hooks';
import {
@@ -27,7 +28,7 @@ import {
} from '@/hooks/use-chat-request';
import { useFindLlmByUuid } from '@/hooks/use-llm-request';
import { useFetchUserInfo } from '@/hooks/use-user-setting-request';
import { IClientConversation } from '@/interfaces/database/chat';
import { IClientConversation, IMessage } from '@/interfaces/database/chat';
import { buildMessageUuidWithRole } from '@/utils/chat';
import { zodResolver } from '@hookform/resolvers/zod';
import { t } from 'i18next';
@@ -50,7 +51,6 @@ import {
} from '../../hooks/use-button-disabled';
import { useCreateConversationBeforeSendMessage } from '../../hooks/use-chat-url';
import { useCreateConversationBeforeUploadDocument } from '../../hooks/use-create-conversation';
import { useSendMessage } from '../../hooks/use-send-chat-message';
import {
HandlePressEnterType,
useSendSingleMessage,
@@ -105,16 +105,20 @@ const ChatCard = forwardRef(function ChatCard(
const { id: dialogId } = useParams();
const { patchChat } = usePatchChat();
const { removeMessageById, derivedMessages, handlePressEnter, sendLoading } =
useSendSingleMessage({
controller,
value,
setValue,
files,
clearFiles,
});
const { regenerateMessage } = useSendMessage(controller);
const {
removeMessageById,
derivedMessages,
handlePressEnter,
sendLoading,
sendMessage,
removeMessagesAfterCurrentMessage,
} = useSendSingleMessage({
controller,
value,
setValue,
files,
clearFiles,
});
const messageContainerRef = useRef<HTMLDivElement>(null);
@@ -131,6 +135,20 @@ const ChatCard = forwardRef(function ChatCard(
const llmId = useWatch({ control: form.control, name: 'llm_id' });
// Regenerate within this card: reuse the card's own message state and
// resend with the card's model settings (llm_id, temperature, ...).
const sendCardMessage = useCallback(
({ message, messages }: { message: IMessage; messages?: IMessage[] }) =>
sendMessage({ message, messages, ...form.getValues() }),
[sendMessage, form],
);
const { regenerateMessage } = useRegenerateMessage({
removeMessagesAfterCurrentMessage,
sendMessage: sendCardMessage,
messages: derivedMessages,
});
const { data: userInfo } = useFetchUserInfo();
const { data: currentDialog } = useFetchChat();
const findLlmByUuid = useFindLlmByUuid();

View File

@@ -157,6 +157,7 @@ export function useSendSingleMessage({
removeMessageById,
removeMessagesAfterCurrentMessage,
handlePressEnter,
sendMessage,
sendLoading: !done,
};
}