import { isHumanMessageSDK } from "@/lib/langchain-messages"; import { UseStream, useStream } from "@langchain/langgraph-sdk/react"; import { AssistantMessage } from "../thread/messages/ai"; import { useEffect } from "react"; interface ActionsRendererProps { graphId: string; threadId: string; setProgrammerThreadId?: (threadId: string) => void; programmerThreadId?: string; } export function ActionsRenderer>({ graphId, threadId, setProgrammerThreadId, programmerThreadId, }: ActionsRendererProps) { const stream = useStream({ apiUrl: process.env.NEXT_PUBLIC_API_URL, assistantId: graphId, reconnectOnMount: true, threadId, }); const nonHumanMessages = stream.messages?.filter( (m) => !isHumanMessageSDK(m), ); // TODO: Need a better way to handle this. Not great like this... useEffect(() => { if ( stream.values?.programmerThreadId && typeof stream.values.programmerThreadId === "string" && !programmerThreadId ) { setProgrammerThreadId?.(stream.values.programmerThreadId as string); } }, [stream.values]); return (
{nonHumanMessages?.map((m) => ( >} message={m} isLoading={false} handleRegenerate={() => {}} /> ))}
); }