import { useStreamContext } from "@/providers/Stream"; import { Checkpoint, 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"; import { cn } from "@/lib/utils"; 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, handleRegenerate, }: { message: Message; isLoading: boolean; handleRegenerate: (parentCheckpoint: Checkpoint | null | undefined) => void; }) { const contentString = getContentString(message.content); const thread = useStreamContext(); const meta = thread.getMessagesMetadata(message); const parentCheckpoint = meta?.firstSeenState?.parent_checkpoint; return (
A
{contentString.length > 0 && (
{contentString}
)}
thread.setBranch(branch)} isLoading={isLoading} /> handleRegenerate(parentCheckpoint)} />
); } export function AssistantMessageLoading() { return (
A
); }