2025-05-07 16:02:53 -07:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
|
|
import { useEffect } from 'react';
|
|
|
|
|
import type { UseChatHelpers } from '@ai-sdk/react';
|
2025-07-03 02:26:34 -07:00
|
|
|
import type { ChatMessage } from '@/lib/types';
|
|
|
|
|
import { useDataStream } from '@/components/data-stream-provider';
|
2025-05-07 16:02:53 -07:00
|
|
|
|
|
|
|
|
export interface UseAutoResumeParams {
|
|
|
|
|
autoResume: boolean;
|
2025-07-03 02:26:34 -07:00
|
|
|
initialMessages: ChatMessage[];
|
|
|
|
|
resumeStream: UseChatHelpers<ChatMessage>['resumeStream'];
|
|
|
|
|
setMessages: UseChatHelpers<ChatMessage>['setMessages'];
|
2025-05-07 16:02:53 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function useAutoResume({
|
|
|
|
|
autoResume,
|
|
|
|
|
initialMessages,
|
2025-07-03 02:26:34 -07:00
|
|
|
resumeStream,
|
2025-05-07 16:02:53 -07:00
|
|
|
setMessages,
|
|
|
|
|
}: UseAutoResumeParams) {
|
2025-07-03 02:26:34 -07:00
|
|
|
const { dataStream } = useDataStream();
|
|
|
|
|
|
2025-05-07 16:02:53 -07:00
|
|
|
useEffect(() => {
|
|
|
|
|
if (!autoResume) return;
|
|
|
|
|
|
|
|
|
|
const mostRecentMessage = initialMessages.at(-1);
|
|
|
|
|
|
|
|
|
|
if (mostRecentMessage?.role === 'user') {
|
2025-07-03 02:26:34 -07:00
|
|
|
resumeStream();
|
2025-05-07 16:02:53 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// we intentionally run this once
|
|
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
2025-07-03 02:26:34 -07:00
|
|
|
if (!dataStream) return;
|
|
|
|
|
if (dataStream.length === 0) return;
|
2025-05-07 16:02:53 -07:00
|
|
|
|
2025-07-03 02:26:34 -07:00
|
|
|
const dataPart = dataStream[0];
|
2025-05-07 16:02:53 -07:00
|
|
|
|
2025-07-03 02:26:34 -07:00
|
|
|
if (dataPart.type === 'data-appendMessage') {
|
|
|
|
|
const message = JSON.parse(dataPart.data);
|
2025-05-07 16:02:53 -07:00
|
|
|
setMessages([...initialMessages, message]);
|
|
|
|
|
}
|
2025-07-03 02:26:34 -07:00
|
|
|
}, [dataStream, initialMessages, setMessages]);
|
2025-05-07 16:02:53 -07:00
|
|
|
}
|