Revert: Agent chat umbrella hook refactoring due to streaming issue on thread switch (#15621)
## Summary Reverts commits afc518a, ae22e64, and 800b5b5 that refactored `useAgentChat` to address umbrella hook pattern feedback. ## Issues Introduced by Refactoring The refactoring broke several critical functionalities: 1. **Streaming fails on thread switch** - Messages don't stream properly when switching between threads 2. **Messages lost on tab close** - When the Ask AI tab is closed, the request is lost instead of continuing in the background 3. **Blank chat requiring force-reload** - Chats often appear blank and require switching to another chat to force a reload (closes [#1771](https://github.com/twentyhq/core-team-issues/issues/1771)) ## Root Cause After extensive debugging, it appears **multiple instances of `useChat` don't work well together**. The refactored architecture inadvertently created scenarios where multiple `useChat` instances interfere with each other. ## Resolution Reverting to restore functionality. The umbrella hook pattern optimization needs a different architectural approach that doesn't rely on multiple `useChat` instances. ## Follow-up While the umbrella hook feedback is valid, we need to rethink the implementation strategy: - Find an alternative to multiple `useChat` instances - Possibly consolidate chat state management differently
This commit is contained in:
@@ -1,13 +1,8 @@
|
||||
import { AI_CHAT_INPUT_ID } from '@/ai/constants/AiChatInputId';
|
||||
import { useAgentChat } from '@/ai/hooks/useAgentChat';
|
||||
import { useAgentChatContextOrThrow } from '@/ai/hooks/useAgentChatContextOrThrow';
|
||||
import { useAgentChatRequestBody } from '@/ai/hooks/useAgentChatRequestBody';
|
||||
import { agentChatUploadedFilesState } from '@/ai/states/agentChatUploadedFilesState';
|
||||
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { useHotkeysOnFocusedElement } from '@/ui/utilities/hotkey/hooks/useHotkeysOnFocusedElement';
|
||||
import { useChat } from '@ai-sdk/react';
|
||||
import { t } from '@lingui/core/macro';
|
||||
import { useRecoilState } from 'recoil';
|
||||
import { Key } from 'ts-key-enum';
|
||||
import { Button } from 'twenty-ui/input';
|
||||
|
||||
@@ -16,40 +11,14 @@ export const SendMessageButton = ({
|
||||
}: {
|
||||
records?: ObjectRecord[];
|
||||
}) => {
|
||||
const { input, isLoading, handleInputChange } = useAgentChat();
|
||||
const { chat } = useAgentChatContextOrThrow();
|
||||
const { buildRequestBody } = useAgentChatRequestBody();
|
||||
const { sendMessage } = useChat({ chat });
|
||||
|
||||
const [agentChatUploadedFiles, setAgentChatUploadedFiles] = useRecoilState(
|
||||
agentChatUploadedFilesState,
|
||||
);
|
||||
|
||||
const handleSendMessage = () => {
|
||||
if (input.trim() === '' || isLoading) {
|
||||
return;
|
||||
}
|
||||
|
||||
sendMessage(
|
||||
{
|
||||
text: input,
|
||||
files: agentChatUploadedFiles,
|
||||
},
|
||||
{
|
||||
body: buildRequestBody(records),
|
||||
},
|
||||
);
|
||||
|
||||
handleInputChange('');
|
||||
setAgentChatUploadedFiles([]);
|
||||
};
|
||||
const { handleSendMessage, isLoading, input } = useAgentChatContextOrThrow();
|
||||
|
||||
useHotkeysOnFocusedElement({
|
||||
keys: [Key.Enter],
|
||||
callback: (event: KeyboardEvent) => {
|
||||
if (!event.ctrlKey && !event.metaKey) {
|
||||
event.preventDefault();
|
||||
handleSendMessage();
|
||||
handleSendMessage(records);
|
||||
}
|
||||
},
|
||||
focusId: AI_CHAT_INPUT_ID,
|
||||
@@ -62,7 +31,7 @@ export const SendMessageButton = ({
|
||||
return (
|
||||
<Button
|
||||
hotkeys={input && !isLoading ? ['⏎'] : undefined}
|
||||
onClick={handleSendMessage}
|
||||
onClick={() => handleSendMessage(records)}
|
||||
disabled={!input || isLoading}
|
||||
variant="primary"
|
||||
accent="blue"
|
||||
|
||||
Reference in New Issue
Block a user