import { useStreamContext } from "@/providers/Stream"; import { Message } from "@langchain/langgraph-sdk"; import { getContentString } from "../utils"; import { BranchSwitcher, CommandBar } from "./shared"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { MarkdownText } from "../markdown-text"; import { LoadExternalComponent } from "@langchain/langgraph-sdk/react-ui/client"; function CustomComponent({ message, thread, }: { message: Message; thread: ReturnType; }) { const meta = thread.getMessagesMetadata(message); const seenState = meta?.firstSeenState; const customComponent = seenState?.values.ui .slice() .reverse() .find( ({ additional_kwargs }) => additional_kwargs.run_id === seenState.metadata?.run_id, ); if (!customComponent) { return null; } return (
{customComponent && ( )}
); } export function AssistantMessage({ message, isLoading, }: { message: Message; isLoading: boolean; }) { const thread = useStreamContext(); const meta = thread.getMessagesMetadata(message); const parentCheckpoint = meta?.firstSeenState?.parent_checkpoint; const contentString = getContentString(message.content); const handleRegenerate = () => { thread.submit(undefined, { checkpoint: parentCheckpoint, streamMode: ["values"] }); }; return (
A
{contentString.length > 0 && (
{contentString}
)}
thread.setBranch(branch)} isLoading={isLoading} />
); } export function AssistantMessageLoading() { return (
A
); }