cc7343a8f2
## 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
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import { AgentChatContext } from '@/ai/contexts/AgentChatContext';
|
|
import { useAgentChat } from '@/ai/hooks/useAgentChat';
|
|
import { useAgentChatData } from '@/ai/hooks/useAgentChatData';
|
|
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
|
|
import { Suspense } from 'react';
|
|
import { FeatureFlagKey } from '~/generated/graphql';
|
|
|
|
const AgentChatProviderContent = ({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) => {
|
|
const { uiMessages, isLoading } = useAgentChatData();
|
|
const chatState = useAgentChat(uiMessages);
|
|
const combinedIsLoading = chatState.isLoading || isLoading;
|
|
|
|
return (
|
|
<AgentChatContext.Provider
|
|
value={{
|
|
...chatState,
|
|
isLoading: combinedIsLoading,
|
|
}}
|
|
>
|
|
{children}
|
|
</AgentChatContext.Provider>
|
|
);
|
|
};
|
|
|
|
export const AgentChatProvider = ({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) => {
|
|
const isAiEnabled = useIsFeatureEnabled(FeatureFlagKey.IS_AI_ENABLED);
|
|
|
|
if (!isAiEnabled) {
|
|
return (
|
|
<AgentChatContext.Provider value={null}>
|
|
{children}
|
|
</AgentChatContext.Provider>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<Suspense fallback={null}>
|
|
<AgentChatProviderContent>{children}</AgentChatProviderContent>
|
|
</Suspense>
|
|
);
|
|
};
|