From 9c9be4f714a4f4c70a6218168d343fe6535ca94e Mon Sep 17 00:00:00 2001 From: Sergey Shakhmatov Date: Sat, 24 Aug 2024 12:35:05 +0200 Subject: [PATCH] fix e2e --- .../hooks/useChatViewConversationHandlers.ts | 94 +++++++++++++++--- .../ChatView/hooks/useConversationActions.ts | 96 +------------------ 2 files changed, 83 insertions(+), 107 deletions(-) diff --git a/apps/chat/src/components/Chat/ChatView/hooks/useChatViewConversationHandlers.ts b/apps/chat/src/components/Chat/ChatView/hooks/useChatViewConversationHandlers.ts index 1e6c181952..e838030c16 100644 --- a/apps/chat/src/components/Chat/ChatView/hooks/useChatViewConversationHandlers.ts +++ b/apps/chat/src/components/Chat/ChatView/hooks/useChatViewConversationHandlers.ts @@ -1,5 +1,7 @@ import { MutableRefObject, useCallback } from 'react'; +import { clearStateForMessages } from '@/src/utils/app/clear-messages-state'; + import { Conversation, ConversationInfo, @@ -7,10 +9,15 @@ import { LikeState, MergedMessages, Message, + Replay, Role, } from '@/src/types/chat'; +import { EntityType } from '@/src/types/common'; import { DialAIEntityAddon, ModelsMap } from '@/src/types/models'; +import { REPLAY_AS_IS_MODEL } from '@/src/constants/chat'; +import { DEFAULT_ASSISTANT_SUBMODEL_ID } from '@/src/constants/default-ui-settings'; + import { useConversationActions } from './useConversationActions'; export const useChatViewConversationHandlers = ( @@ -23,7 +30,6 @@ export const useChatViewConversationHandlers = ( >, ) => { const { - applyChatSettings, cancelPlayback, deleteMessage, rateMessage, @@ -32,17 +38,77 @@ export const useChatViewConversationHandlers = ( stopStreamMessage, unselectConversations, updateConversation, - } = useConversationActions(modelsMap, addonsMap); + } = useConversationActions(); + + const applySelectedModel = useCallback( + ( + conversation: Conversation, + modelId: string | undefined, + ): Partial => { + if (modelId === REPLAY_AS_IS_MODEL && conversation.replay) { + return { + replay: { + ...conversation.replay, + replayAsIs: true, + }, + }; + } + const newAiEntity = modelId ? modelsMap[modelId] : undefined; + if (!modelId || !newAiEntity) { + return {}; + } + + const updatedReplay: Replay | undefined = !conversation.replay?.isReplay + ? conversation.replay + : { + ...conversation.replay, + replayAsIs: false, + }; + const updatedAddons = + conversation.replay && + conversation.replay.isReplay && + conversation.replay.replayAsIs && + !updatedReplay?.replayAsIs + ? conversation.selectedAddons.filter((addonId) => addonsMap[addonId]) + : conversation.selectedAddons; + + return { + model: { id: newAiEntity.reference }, + assistantModelId: + newAiEntity.type === EntityType.Assistant + ? DEFAULT_ASSISTANT_SUBMODEL_ID + : undefined, + replay: updatedReplay, + selectedAddons: updatedAddons, + }; + }, + [modelsMap, addonsMap], + ); const handleApplySettings = useCallback(() => { - applyChatSettings( - selectedConversations, - selectedConversationsTemporarySettings.current, - ); + selectedConversations.forEach((conversation) => { + const temporarySettings = + selectedConversationsTemporarySettings.current[conversation.id]; + if (temporarySettings) { + updateConversation(conversation.id, { + messages: clearStateForMessages(conversation.messages), + ...applySelectedModel(conversation, temporarySettings.modelId), + prompt: temporarySettings.prompt, + temperature: temporarySettings.temperature, + assistantModelId: temporarySettings.currentAssistentModelId, + selectedAddons: temporarySettings.addonsIds.filter( + (addonId) => addonsMap[addonId], + ), + isShared: temporarySettings.isShared, + }); + } + }); }, [ - applyChatSettings, + addonsMap, + applySelectedModel, selectedConversations, selectedConversationsTemporarySettings, + updateConversation, ]); const handleLike = useCallback( @@ -73,13 +139,17 @@ export const useChatViewConversationHandlers = ( const handleSelectModel = useCallback( (conversation: Conversation, modelId: string) => { - const modelValues: Partial = modelsMap[modelId] - ? { model: { id: modelId } } - : {}; // handle undefined modelId lookup + const newAiEntity = modelsMap[modelId]; + if (!newAiEntity && modelId !== REPLAY_AS_IS_MODEL) { + return; + } - updateConversation(conversation.id, modelValues); + updateConversation( + conversation.id, + applySelectedModel(conversation, modelId), + ); }, - [updateConversation, modelsMap], + [modelsMap, updateConversation, applySelectedModel], ); const handleSelectAssistantSubModel = useCallback( diff --git a/apps/chat/src/components/Chat/ChatView/hooks/useConversationActions.ts b/apps/chat/src/components/Chat/ChatView/hooks/useConversationActions.ts index 1eecdf88e3..995ad640d1 100644 --- a/apps/chat/src/components/Chat/ChatView/hooks/useConversationActions.ts +++ b/apps/chat/src/components/Chat/ChatView/hooks/useConversationActions.ts @@ -1,36 +1,20 @@ import { useCallback } from 'react'; import { useDispatch } from 'react-redux'; -import { clearStateForMessages } from '@/src/utils/app/clear-messages-state'; - import { Conversation, ConversationInfo, - ConversationsTemporarySettings, LikeState, Message, - Replay, } from '@/src/types/chat'; -import { EntityType } from '@/src/types/common'; -import { DialAIEntityModel } from '@/src/types/models'; import { ConversationsActions } from '@/src/store/conversations/conversations.reducers'; -import { REPLAY_AS_IS_MODEL } from '@/src/constants/chat'; -import { DEFAULT_ASSISTANT_SUBMODEL_ID } from '@/src/constants/default-ui-settings'; - interface UseConversationActionsReturnType { updateConversation: ( conversationId: string, values: Partial, ) => void; - applyChatSettings: ( - selectedConversations: Conversation[], - selectedConversationsTemporarySettings: Record< - string, - ConversationsTemporarySettings - >, - ) => void; rateMessage: ( conversationId: string, messageIndex: number, @@ -49,57 +33,9 @@ interface UseConversationActionsReturnType { cancelPlayback: () => void; } -export function useConversationActions( - modelsMap: Partial>, - addonsMap: Record, -): UseConversationActionsReturnType { +export function useConversationActions(): UseConversationActionsReturnType { const dispatch = useDispatch(); - const applySelectedModel = useCallback( - ( - conversation: Conversation, - modelId: string | undefined, - ): Partial => { - if (modelId === REPLAY_AS_IS_MODEL && conversation.replay) { - return { - replay: { - ...conversation.replay, - replayAsIs: true, - }, - }; - } - const newAiEntity = modelId ? modelsMap[modelId] : undefined; - if (!modelId || !newAiEntity) { - return {}; - } - - const updatedReplay: Replay | undefined = !conversation.replay?.isReplay - ? conversation.replay - : { - ...conversation.replay, - replayAsIs: false, - }; - const updatedAddons = - conversation.replay && - conversation.replay.isReplay && - conversation.replay.replayAsIs && - !updatedReplay?.replayAsIs - ? conversation.selectedAddons.filter((addonId) => addonsMap[addonId]) - : conversation.selectedAddons; - - return { - model: { id: newAiEntity.reference }, - assistantModelId: - newAiEntity.type === EntityType.Assistant - ? DEFAULT_ASSISTANT_SUBMODEL_ID - : undefined, - replay: updatedReplay, - selectedAddons: updatedAddons, - }; - }, - [modelsMap, addonsMap], - ); - const updateConversation = useCallback( (conversationId: string, values: Partial) => { dispatch( @@ -109,35 +45,6 @@ export function useConversationActions( [dispatch], ); - const applyChatSettings = useCallback( - ( - selectedConversations: Conversation[], - selectedConversationsTemporarySettings: Record< - string, - ConversationsTemporarySettings - >, - ) => { - selectedConversations.forEach((conversation) => { - const temporarySettings = - selectedConversationsTemporarySettings[conversation.id]; - if (temporarySettings) { - updateConversation(conversation.id, { - messages: clearStateForMessages(conversation.messages), - ...applySelectedModel(conversation, temporarySettings.modelId), - prompt: temporarySettings.prompt, - temperature: temporarySettings.temperature, - assistantModelId: temporarySettings.currentAssistentModelId, - selectedAddons: temporarySettings.addonsIds.filter( - (addonId) => addonsMap[addonId], - ), - isShared: temporarySettings.isShared, - }); - } - }); - }, - [updateConversation, applySelectedModel, addonsMap], - ); - const rateMessage = useCallback( (conversationId: string, messageIndex: number, rate: LikeState) => { dispatch( @@ -200,7 +107,6 @@ export function useConversationActions( }, [dispatch]); return { - applyChatSettings, cancelPlayback, deleteMessage, rateMessage,