@assistant-ui/react 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/actions/useCopyMessage.tsx","../src/context/MessageContext.ts","../src/utils/combined/useCombinedStore.ts","../src/utils/combined/createCombinedStore.ts","../src/utils/getMessageText.tsx","../src/actions/useReloadMessage.tsx","../src/context/ThreadContext.ts","../src/actions/useBeginMessageEdit.tsx","../src/actions/useGoToNextBranch.tsx","../src/actions/useGoToPreviousBranch.tsx","../src/primitives/thread/index.ts","../src/primitives/thread/ThreadRoot.tsx","../src/primitives/thread/ThreadIf.tsx","../src/primitives/thread/ThreadEmpty.tsx","../src/primitives/thread/ThreadViewport.tsx","../src/utils/hooks/useOnResizeContent.tsx","../src/utils/hooks/useOnScrollToBottom.tsx","../src/primitives/thread/ThreadMessages.tsx","../src/context/providers/MessageProvider.tsx","../src/context/stores/MessageComposer.ts","../src/context/stores/BaseComposer.ts","../src/context/ComposerContext.ts","../src/primitives/composer/ComposerIf.tsx","../src/primitives/message/MessageIf.tsx","../src/primitives/thread/ThreadScrollToBottom.tsx","../src/primitives/thread/ThreadSuggestion.tsx","../src/primitives/composer/index.ts","../src/primitives/composer/ComposerRoot.tsx","../src/primitives/composer/ComposerInput.tsx","../src/primitives/composer/ComposerSend.tsx","../src/primitives/composer/ComposerCancel.tsx","../src/primitives/message/index.ts","../src/primitives/message/MessageRoot.tsx","../src/primitives/message/MessageContent.tsx","../src/context/AssistantContext.ts","../src/context/ContentPartContext.ts","../src/context/providers/ContentPartProvider.tsx","../src/primitives/contentPart/ContentPartDisplay.tsx","../src/primitives/contentPart/ContentPartInProgressIndicator.tsx","../src/primitives/contentPart/ContentPartText.tsx","../src/primitives/message/MessageInProgress.tsx","../src/primitives/branchPicker/index.ts","../src/utils/createActionButton.tsx","../src/primitives/branchPicker/BranchPickerNext.tsx","../src/primitives/branchPicker/BranchPickerPrevious.tsx","../src/primitives/branchPicker/BranchPickerCount.tsx","../src/primitives/branchPicker/BranchPickerNumber.tsx","../src/primitives/branchPicker/BranchPickerRoot.tsx","../src/primitives/actionBar/index.ts","../src/primitives/actionBar/ActionBarRoot.tsx","../src/primitives/actionBar/ActionBarCopy.tsx","../src/primitives/actionBar/ActionBarReload.tsx","../src/primitives/actionBar/ActionBarEdit.tsx","../src/primitives/contentPart/index.ts","../src/primitives/contentPart/ContentPartImage.tsx","../src/runtime/local/useLocalRuntime.tsx","../src/utils/ModelConfigTypes.ts","../src/runtime/utils/idUtils.tsx","../src/runtime/utils/MessageRepository.tsx","../src/runtime/local/LocalRuntime.tsx","../src/context/providers/AssistantRuntimeProvider.tsx","../src/context/providers/AssistantProvider.tsx","../src/context/stores/AssistantModelConfig.ts","../src/utils/ProxyConfigProvider.ts","../src/context/stores/AssistantToolRenderers.ts","../src/context/providers/ThreadProvider.tsx","../src/context/stores/Composer.ts","../src/context/stores/Thread.ts","../src/context/stores/ThreadViewport.tsx","../src/internal.ts"],"sourcesContent":["export * from \"./actions\";\nexport * from \"./primitives\";\nexport * from \"./runtime\";\n\nexport type {\n ThreadMessage,\n AssistantMessage,\n UserMessage,\n AppendMessage,\n AssistantContentPart,\n UserContentPart,\n AppendContentPart,\n TextContentPart,\n} from \"./utils/AssistantTypes\";\n\nexport { AssistantRuntimeProvider } from \"./context/providers/AssistantRuntimeProvider\";\n\n// utils\nexport type { Unsubscribe } from \"./utils/Unsubscribe\";\n\nexport * as INTERNAL from \"./internal\";\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\nimport { getMessageText } from \"../utils/getMessageText\";\n\nexport const useCopyMessage = ({ copiedDuration = 3000 }) => {\n const { useMessage, useComposer } = useMessageContext();\n\n const hasCopyableContent = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => {\n return c.isEditing || m.message.content.some((c) => c.type === \"text\");\n },\n );\n\n const callback = useCallback(() => {\n const { isEditing, value: composerValue } = useComposer.getState();\n const { message, setIsCopied } = useMessage.getState();\n\n const valueToCopy = isEditing ? composerValue : getMessageText(message);\n\n navigator.clipboard.writeText(valueToCopy);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n }, [useComposer, useMessage, copiedDuration]);\n\n if (!hasCopyableContent) return null;\n return callback;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { MessageState } from \"./stores/Message\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type MessageContextValue = {\n useMessage: UseBoundStore<StoreApi<MessageState>>;\n useComposer: UseBoundStore<StoreApi<EditComposerState>>;\n};\n\nexport const MessageContext = createContext<MessageContextValue | null>(null);\n\nexport const useMessageContext = () => {\n const context = useContext(MessageContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />.\",\n );\n return context;\n};\n","\"use client\";\nimport { useMemo } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport {\n type CombinedSelector,\n createCombinedStore,\n} from \"./createCombinedStore\";\n\nexport const useCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n selector: CombinedSelector<T, R>,\n): R => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: shallow-compare the store array\n const useCombined = useMemo(() => createCombinedStore<T, R>(stores), stores);\n return useCombined(selector);\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type { Unsubscribe } from \"../Unsubscribe\";\n\nexport type CombinedSelector<T extends Array<unknown>, R> = (...args: T) => R;\n\nexport const createCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n) => {\n const subscribe = (callback: () => void): Unsubscribe => {\n const unsubscribes = stores.map((store) => store.subscribe(callback));\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n };\n\n return (selector: CombinedSelector<T, R>): R => {\n const getSnapshot = (): R =>\n selector(...(stores.map((store) => store.getState()) as T));\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n };\n};\n","\"use client\";\nimport type { TextContentPart, ThreadMessage } from \"./AssistantTypes\";\n\nexport const getMessageText = (message: ThreadMessage) => {\n const textParts = message.content.filter(\n (part) => part.type === \"text\",\n ) as TextContentPart[];\n\n return textParts.map((part) => part.text).join(\"\\n\\n\");\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useReloadMessage = () => {\n const { useThread, useViewport } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useThread, useMessage],\n (t, m) => t.isRunning || m.message.role !== \"assistant\",\n );\n\n const callback = useCallback(() => {\n const { parentId } = useMessage.getState();\n useThread.getState().startRun(parentId);\n useViewport.getState().scrollToBottom();\n }, [useMessage, useThread, useViewport]);\n\n if (disabled) return null;\n return callback;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { ThreadState } from \"./stores/Thread\";\nimport type { ThreadViewportState } from \"./stores/ThreadViewport\";\n\nexport type ThreadContextValue = {\n useThread: UseBoundStore<StoreApi<ThreadState>>;\n useComposer: UseBoundStore<StoreApi<ComposerState>>;\n useViewport: UseBoundStore<StoreApi<ThreadViewportState>>;\n};\n\nexport const ThreadContext = createContext<ThreadContextValue | null>(null);\n\nexport const useThreadContext = (): ThreadContextValue => {\n const context = useContext(ThreadContext);\n if (!context)\n throw new Error(\"This component must be used within an AssistantRuntimeProvider.\");\n return context;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useBeginMessageEdit = () => {\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => m.message.role !== \"user\" || c.isEditing,\n );\n\n const callback = useCallback(() => {\n const { edit } = useComposer.getState();\n edit();\n }, [useComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToNextBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) =>\n c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) + 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToPreviousBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) - 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","export { ThreadRoot as Root } from \"./ThreadRoot\";\nexport { ThreadEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadIf as If } from \"./ThreadIf\";\nexport { ThreadViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadSuggestion as Suggestion } from \"./ThreadSuggestion\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ThreadRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadRootProps = PrimitiveDivProps;\n\nexport const ThreadRoot = forwardRef<ThreadRootElement, ThreadRootProps>(\n (props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n },\n);\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n};\n\ntype ThreadIfProps = PropsWithChildren<RequireAtLeastOne<ThreadIfFilters>>;\n\nconst useThreadIf = (props: RequireAtLeastOne<ThreadIfFilters>) => {\n const { useThread } = useThreadContext();\n return useThread((thread) => {\n if (props.empty === true && thread.messages.length !== 0) return false;\n if (props.empty === false && thread.messages.length === 0) return false;\n if (props.running === true && !thread.isRunning) return false;\n if (props.running === false && thread.isRunning) return false;\n\n return true;\n });\n};\n\nexport const ThreadIf: FC<ThreadIfProps> = ({ children, ...query }) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { ThreadIf } from \"./ThreadIf\";\n\ntype ThreadEmptyProps = {\n children: ReactNode;\n};\n\nexport const ThreadEmpty: FC<ThreadEmptyProps> = ({ children }) => {\n return <ThreadIf empty>{children}</ThreadIf>;\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ThreadViewportElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadViewportProps = PrimitiveDivProps & {\n autoScroll?: boolean;\n};\n\nexport const ThreadViewport = forwardRef<\n ThreadViewportElement,\n ThreadViewportProps\n>(({ autoScroll = true, onScroll, children, ...rest }, forwardedRef) => {\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n const divRef = useRef<HTMLDivElement>(null);\n const ref = useComposedRefs(forwardedRef, divRef);\n\n const { useViewport } = useThreadContext();\n\n // TODO find a more elegant implementation for this\n\n const firstRenderRef = useRef(true);\n const isScrollingToBottomRef = useRef(false);\n const lastScrollTop = useRef<number>(0);\n\n const scrollToBottom = () => {\n const div = messagesEndRef.current;\n if (!div || !autoScroll) return;\n\n const behavior = firstRenderRef.current ? \"instant\" : \"auto\";\n firstRenderRef.current = false;\n\n isScrollingToBottomRef.current = true;\n div.scrollIntoView({ behavior });\n };\n\n useOnResizeContent(divRef, () => {\n if (!isScrollingToBottomRef.current && !useViewport.getState().isAtBottom) {\n handleScroll();\n } else {\n scrollToBottom();\n }\n });\n\n useOnScrollToBottom(() => {\n scrollToBottom();\n });\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = useViewport.getState().isAtBottom;\n const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight;\n\n if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {\n // ignore scroll down\n } else if (newIsAtBottom !== isAtBottom) {\n isScrollingToBottomRef.current = false;\n useViewport.setState({ isAtBottom: newIsAtBottom });\n }\n\n lastScrollTop.current = div.scrollTop;\n };\n\n return (\n <Primitive.div\n {...rest}\n onScroll={composeEventHandlers(onScroll, handleScroll)}\n ref={ref}\n >\n {children}\n <div ref={messagesEndRef} />\n </Primitive.div>\n );\n});\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { type MutableRefObject, useEffect } from \"react\";\n\nexport const useOnResizeContent = (\n ref: MutableRefObject<HTMLElement | null>,\n callback: () => void,\n) => {\n const callbackRef = useCallbackRef(callback);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const resizeObserver = new ResizeObserver(() => {\n callbackRef();\n });\n\n const mutationObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n resizeObserver.observe(node);\n }\n }\n\n for (const node of mutation.removedNodes) {\n if (node instanceof Element) {\n resizeObserver.unobserve(node);\n }\n }\n }\n\n callbackRef();\n });\n\n resizeObserver.observe(el);\n mutationObserver.observe(el, { childList: true });\n\n // Observe existing children\n for (const child of el.children) {\n resizeObserver.observe(child);\n }\n\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [ref.current, callbackRef]);\n};\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\nexport const useOnScrollToBottom = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const { useViewport } = useThreadContext();\n useEffect(() => {\n return useViewport.getState().onScrollToBottom(() => {\n callbackRef();\n });\n }, [useViewport, callbackRef]);\n};\n","\"use client\";\n\nimport { type ComponentType, type FC, memo } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { MessageProvider } from \"../../context/providers/MessageProvider\";\nimport { ComposerIf } from \"../composer/ComposerIf\";\nimport { MessageIf } from \"../message/MessageIf\";\n\ntype ThreadMessagesProps = {\n components:\n | {\n Message: ComponentType;\n UserMessage?: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage?: ComponentType;\n }\n | {\n Message?: ComponentType;\n UserMessage: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage: ComponentType;\n };\n};\n\nconst getComponents = (components: ThreadMessagesProps[\"components\"]) => {\n return {\n EditComposer:\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType),\n UserMessage:\n components.UserMessage ?? (components.Message as ComponentType),\n AssistantMessage:\n components.AssistantMessage ?? (components.Message as ComponentType),\n };\n};\n\ntype ThreadMessageProps = {\n messageIndex: number;\n components: ThreadMessagesProps[\"components\"];\n};\n\nconst ThreadMessageImpl: FC<ThreadMessageProps> = ({\n messageIndex,\n components,\n}) => {\n const { UserMessage, EditComposer, AssistantMessage } =\n getComponents(components);\n return (\n <MessageProvider messageIndex={messageIndex}>\n <MessageIf user>\n <ComposerIf editing={false}>\n <UserMessage />\n </ComposerIf>\n <ComposerIf editing>\n <EditComposer />\n </ComposerIf>\n </MessageIf>\n <MessageIf assistant>\n <AssistantMessage />\n </MessageIf>\n </MessageProvider>\n );\n};\n\nconst ThreadMessage = memo(\n ThreadMessageImpl,\n (prev, next) =>\n prev.messageIndex === next.messageIndex &&\n prev.components.UserMessage === next.components.UserMessage &&\n prev.components.EditComposer === next.components.EditComposer &&\n prev.components.AssistantMessage === next.components.AssistantMessage,\n);\n\nexport const ThreadMessages: FC<ThreadMessagesProps> = ({ components }) => {\n const { useThread } = useThreadContext();\n\n const messagesLength = useThread((t) => t.messages.length);\n if (messagesLength === 0) return null;\n\n return new Array(messagesLength).fill(null).map((_, idx) => {\n const messageIndex = idx; // keep the same key when switching branches for better a11y support\n return (\n <ThreadMessage\n key={messageIndex}\n messageIndex={messageIndex}\n components={components}\n />\n );\n });\n};\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport type {\n AppendContentPart,\n ThreadMessage,\n} from \"../../utils/AssistantTypes\";\nimport { getMessageText } from \"../../utils/getMessageText\";\nimport { MessageContext } from \"../MessageContext\";\nimport type { MessageContextValue } from \"../MessageContext\";\nimport { useThreadContext } from \"../ThreadContext\";\nimport type { MessageState } from \"../stores/Message\";\nimport { makeEditComposerStore } from \"../stores/MessageComposer\";\nimport type { ThreadState } from \"../stores/Thread\";\n\ntype MessageProviderProps = PropsWithChildren<{\n messageIndex: number;\n}>;\n\nconst getIsLast = (thread: ThreadState, message: ThreadMessage) => {\n return thread.messages[thread.messages.length - 1]?.id === message.id;\n};\n\nconst syncMessage = (\n thread: ThreadState,\n useMessage: MessageContextValue[\"useMessage\"],\n messageIndex: number,\n) => {\n const parentId = thread.messages[messageIndex - 1]?.id ?? null;\n const message = thread.messages[messageIndex];\n if (!message) return;\n\n const isLast = getIsLast(thread, message);\n const branches = thread.getBranches(message.id);\n\n // if the message is the same, don't update\n const currentState = useMessage.getState();\n if (\n currentState.message === message &&\n currentState.parentId === parentId &&\n currentState.branches === branches &&\n currentState.isLast === isLast\n )\n return;\n\n // sync useMessage\n useMessage.setState({\n message,\n parentId,\n branches,\n isLast,\n });\n};\n\nconst useMessageContext = (messageIndex: number) => {\n const { useThread } = useThreadContext();\n\n const [context] = useState<MessageContextValue>(() => {\n const useMessage = create<MessageState>((set) => ({\n message: null as unknown as ThreadMessage,\n parentId: null,\n branches: [],\n isLast: false,\n inProgressIndicator: null,\n isCopied: false,\n isHovering: false,\n setInProgressIndicator: (value) => {\n set({ inProgressIndicator: value });\n },\n setIsCopied: (value) => {\n set({ isCopied: value });\n },\n setIsHovering: (value) => {\n set({ isHovering: value });\n },\n }));\n\n const useComposer = makeEditComposerStore({\n onEdit: () => {\n const message = useMessage.getState().message;\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const text = getMessageText(message);\n\n return text;\n },\n onSend: (text) => {\n const { message, parentId } = useMessage.getState();\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const nonTextParts = message.content.filter(\n (part): part is AppendContentPart =>\n part.type !== \"text\" && part.type !== \"ui\",\n );\n useThread.getState().append({\n parentId,\n content: [{ type: \"text\", text }, ...nonTextParts],\n });\n },\n });\n\n syncMessage(useThread.getState(), useMessage, messageIndex);\n\n return { useMessage, useComposer };\n });\n\n useEffect(() => {\n return useThread.subscribe((thread) => {\n syncMessage(thread, context.useMessage, messageIndex);\n });\n }, [context, useThread, messageIndex]);\n\n return context;\n};\n\nexport const MessageProvider: FC<MessageProviderProps> = ({\n messageIndex,\n children,\n}) => {\n const context = useMessageContext(messageIndex);\n\n return (\n <MessageContext.Provider value={context}>\n {children}\n </MessageContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\n\nexport type EditComposerState = BaseComposerState &\n Readonly<{\n isEditing: boolean;\n\n edit: () => void;\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeEditComposerStore = ({\n onEdit,\n onSend,\n}: {\n onEdit: () => string;\n onSend: (value: string) => void;\n}): UseBoundStore<StoreApi<EditComposerState>> =>\n create<EditComposerState>()((set, get, store) => ({\n ...makeBaseComposer(set, get, store),\n\n isEditing: false,\n\n edit: () => {\n const value = onEdit();\n set({ isEditing: true, value });\n },\n send: () => {\n const value = get().value;\n set({ isEditing: false });\n onSend(value);\n },\n cancel: () => {\n if (!get().isEditing) return false;\n set({ isEditing: false });\n return true;\n },\n }));\n","import type { StateCreator } from \"zustand\";\n\nexport type BaseComposerState = Readonly<{\n value: string;\n setValue: (value: string) => void;\n}>;\n\nexport const makeBaseComposer: StateCreator<\n BaseComposerState,\n [],\n [],\n BaseComposerState\n> = (set) => ({\n value: \"\",\n setValue: (value) => {\n set({ value });\n },\n});\n","import { useContext, useMemo } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport { MessageContext } from \"./MessageContext\";\nimport { useThreadContext } from \"./ThreadContext\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type ComposerContextValue = {\n useComposer: UseBoundStore<StoreApi<EditComposerState | ComposerState>>;\n type: \"edit\" | \"new\";\n};\n\nexport const useComposerContext = (): ComposerContextValue => {\n const { useComposer } = useThreadContext();\n const { useComposer: useEditComposer } = useContext(MessageContext) ?? {};\n return useMemo(\n () => ({\n useComposer: (useEditComposer ?? useComposer) as UseBoundStore<\n StoreApi<EditComposerState | ComposerState>\n >,\n type: useEditComposer ? (\"edit\" as const) : (\"new\" as const),\n }),\n [useEditComposer, useComposer],\n );\n};\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ComposerIfFilters = {\n editing: boolean | undefined;\n};\n\ntype ComposerIfProps = PropsWithChildren<RequireAtLeastOne<ComposerIfFilters>>;\n\nconst useComposerIf = (props: RequireAtLeastOne<ComposerIfFilters>) => {\n const { useComposer } = useComposerContext();\n return useComposer((composer) => {\n if (props.editing === true && !composer.isEditing) return false;\n if (props.editing === false && composer.isEditing) return false;\n\n return true;\n });\n};\n\nexport const ComposerIf: FC<ComposerIfProps> = ({ children, ...query }) => {\n const result = useComposerIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n};\n\ntype MessageIfProps = RequireAtLeastOne<MessageIfFilters> & {\n children: ReactNode;\n};\n\nexport const useMessageIf = (props: RequireAtLeastOne<MessageIfFilters>) => {\n const { useMessage } = useMessageContext();\n\n return useMessage(({ message, branches, isLast, isCopied, isHovering }) => {\n if (props.hasBranches === true && branches.length < 2) return false;\n\n if (props.user && message.role !== \"user\") return false;\n if (props.assistant && message.role !== \"assistant\") return false;\n\n if (props.lastOrHover === true && !isHovering && !isLast) return false;\n\n if (props.copied === true && !isCopied) return false;\n if (props.copied === false && isCopied) return false;\n\n return true;\n });\n};\n\nexport const MessageIf: FC<MessageIfProps> = ({ children, ...query }) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadScrollToBottomElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadScrollToBottomProps = PrimitiveButtonProps;\n\nexport const ThreadScrollToBottom = forwardRef<\n ThreadScrollToBottomElement,\n ThreadScrollToBottomProps\n>(({ onClick, ...rest }, ref) => {\n const { useViewport } = useThreadContext();\n\n const isAtBottom = useViewport((s) => s.isAtBottom);\n const handleScrollToBottom = () => {\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isAtBottom}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleScrollToBottom)}\n />\n );\n});\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadSuggestionElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadSuggestionProps = PrimitiveButtonProps & {\n prompt: string;\n method: \"replace\";\n autoSend?: boolean;\n};\n\nexport const ThreadSuggestion = forwardRef<\n ThreadSuggestionElement,\n ThreadSuggestionProps\n>(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {\n const { useThread, useComposer } = useThreadContext();\n\n const isDisabled = useThread((t) => t.isRunning);\n const handleApplySuggestion = () => {\n const thread = useThread.getState();\n const composer = useComposer.getState();\n composer.setValue(prompt);\n\n if (send && !thread.isRunning) {\n composer.send();\n }\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isDisabled}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleApplySuggestion)}\n />\n );\n});\n","export { ComposerRoot as Root } from \"./ComposerRoot\";\nexport { ComposerInput as Input } from \"./ComposerInput\";\nexport { ComposerSend as Send } from \"./ComposerSend\";\nexport { ComposerCancel as Cancel } from \"./ComposerCancel\";\nexport { ComposerIf as If } from \"./ComposerIf\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, type FormEvent, forwardRef, useRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ComposerRootElement = ElementRef<typeof Primitive.form>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.form>;\n\ntype ComposerRootProps = PrimitiveFormProps;\n\nexport const ComposerRoot = forwardRef<ComposerRootElement, ComposerRootProps>(\n ({ onSubmit, ...rest }, forwardedRef) => {\n const { useViewport } = useThreadContext();\n const { useComposer } = useComposerContext();\n\n const formRef = useRef<HTMLFormElement>(null);\n const ref = useComposedRefs(forwardedRef, formRef);\n\n const handleSubmit = (e: FormEvent) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n\n e.preventDefault();\n composerState.send();\n\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={ref}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport TextareaAutosize, {\n type TextareaAutosizeProps,\n} from \"react-textarea-autosize\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ComposerInputProps = TextareaAutosizeProps & {\n asChild?: boolean;\n};\n\nexport const ComposerInput = forwardRef<\n HTMLTextAreaElement,\n ComposerInputProps\n>(\n (\n { autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest },\n forwardedRef,\n ) => {\n const { useThread } = useThreadContext();\n const { useComposer, type } = useComposerContext();\n\n const value = useComposer((c) => {\n if (!c.isEditing) return \"\";\n return c.value;\n });\n\n const Component = asChild ? Slot : TextareaAutosize;\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (disabled) return;\n\n if (e.key === \"Escape\") {\n const composer = useComposer.getState();\n if (composer.cancel()) {\n e.preventDefault();\n }\n } else if (e.key === \"Enter\" && e.shiftKey === false) {\n const isRunning = useThread.getState().isRunning;\n if (!isRunning) {\n e.preventDefault();\n\n textareaRef.current?.closest(\"form\")?.requestSubmit();\n }\n }\n };\n\n const autoFocusEnabled = autoFocus && !disabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n console.log(\"focus\");\n textarea.focus();\n textarea.setSelectionRange(\n textareaRef.current.value.length,\n textareaRef.current.value.length,\n );\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnScrollToBottom(() => {\n if (type === \"new\") {\n focus();\n }\n });\n\n return (\n <Component\n value={value}\n {...rest}\n ref={ref}\n autoFocus={autoFocus}\n disabled={disabled}\n onChange={composeEventHandlers(onChange, (e) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n return composerState.setValue(e.target.value);\n })}\n onKeyDown={composeEventHandlers(onKeyDown, handleKeyPress)}\n />\n );\n },\n);\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerSendElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerSendProps = PrimitiveFormProps;\n\nexport const ComposerSend = forwardRef<ComposerSendElement, ComposerSendProps>(\n ({ disabled, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);\n\n return (\n <Primitive.button\n type=\"submit\"\n {...rest}\n ref={ref}\n disabled={disabled || !hasValue}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerCancelElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerCancelProps = PrimitiveFormProps;\n\nexport const ComposerCancel = forwardRef<\n ComposerCancelElement,\n ComposerCancelProps\n>(({ onClick, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n\n const handleCancel = () => {\n useComposer.getState().cancel();\n };\n\n return (\n <Primitive.button\n type=\"button\"\n {...rest}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleCancel)}\n />\n );\n});\n","export { MessageRoot as Root } from \"./MessageRoot\";\nexport { MessageIf as If } from \"./MessageIf\";\nexport { MessageContent as Content } from \"./MessageContent\";\nexport { MessageInProgress as InProgress } from \"./MessageInProgress\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype MessageRootProps = PrimitiveDivProps;\n\nexport const MessageRoot = forwardRef<MessageRootElement, MessageRootProps>(\n ({ onMouseEnter, onMouseLeave, ...rest }, ref) => {\n const { useMessage } = useMessageContext();\n const setIsHovering = useMessage((s) => s.setIsHovering);\n\n const handleMouseEnter = () => {\n setIsHovering(true);\n };\n const handleMouseLeave = () => {\n setIsHovering(false);\n };\n\n return (\n <Primitive.div\n {...rest}\n ref={ref}\n onMouseEnter={composeEventHandlers(onMouseEnter, handleMouseEnter)}\n onMouseLeave={composeEventHandlers(onMouseLeave, handleMouseLeave)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { type ComponentType, type FC, memo } from \"react\";\nimport { useAssistantContext, useContentPartContext } from \"../../context\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { ContentPartProvider } from \"../../context/providers/ContentPartProvider\";\nimport { ContentPartDisplay } from \"../contentPart/ContentPartDisplay\";\nimport { ContentPartInProgressIndicator } from \"../contentPart/ContentPartInProgressIndicator\";\nimport { ContentPartText } from \"../contentPart/ContentPartText\";\nimport type {\n ImageContentPartComponent,\n TextContentPartComponent,\n ToolCallContentPartComponent,\n ToolCallContentPartProps,\n UIContentPartComponent,\n} from \"./ContentPartComponentTypes\";\n\nexport type MessageContentProps = {\n components?: {\n Text?: TextContentPartComponent;\n Image?: ImageContentPartComponent;\n UI?: UIContentPartComponent;\n tools?: {\n by_name?: Record<string, ToolCallContentPartComponent>;\n Fallback?: ComponentType<ToolCallContentPartProps>;\n };\n };\n};\n\nconst defaultComponents = {\n Text: () => (\n <>\n <ContentPartText />\n <ContentPartInProgressIndicator />\n </>\n ),\n Image: () => null,\n UI: () => <ContentPartDisplay />,\n tools: {\n Fallback: (props) => {\n const { useToolRenderers } = useAssistantContext();\n const Render = useToolRenderers((s) =>\n s.getToolRenderer(props.part.toolName),\n );\n if (!Render) return null;\n return <Render {...props} />;\n },\n },\n} satisfies MessageContentProps[\"components\"];\n\ntype MessageContentPartComponentProps = {\n components: MessageContentProps[\"components\"];\n};\n\nconst MessageContentPartComponent: FC<MessageContentPartComponentProps> = ({\n components: {\n Text = defaultComponents.Text,\n Image = defaultComponents.Image,\n UI = defaultComponents.UI,\n tools: { by_name = {}, Fallback = defaultComponents.tools.Fallback } = {},\n } = {},\n}) => {\n const { useContentPart } = useContentPartContext();\n const { part, status } = useContentPart();\n\n const type = part.type;\n switch (type) {\n case \"text\":\n return <Text part={part} status={status} />;\n\n case \"image\":\n return <Image part={part} status={status} />;\n\n case \"ui\":\n return <UI part={part} status={status} />;\n\n case \"tool-call\": {\n const Tool = by_name[part.toolName] || Fallback;\n return <Tool part={part} status={status} />;\n }\n default:\n throw new Error(`Unknown content part type: ${type}`);\n }\n};\n\ntype MessageContentPartProps = {\n partIndex: number;\n components: MessageContentProps[\"components\"];\n};\n\nconst MessageContentPartImpl: FC<MessageContentPartProps> = ({\n partIndex,\n components,\n}) => {\n return (\n <ContentPartProvider partIndex={partIndex}>\n <MessageContentPartComponent components={components} />\n </ContentPartProvider>\n );\n};\n\nconst MessageContentPart = memo(\n MessageContentPartImpl,\n (prev, next) =>\n prev.partIndex === next.partIndex &&\n prev.components?.Text === next.components?.Text &&\n prev.components?.Image === next.components?.Image &&\n prev.components?.UI === next.components?.UI &&\n prev.components?.tools === next.components?.tools,\n);\n\nexport const MessageContent: FC<MessageContentProps> = ({ components }) => {\n const { useMessage } = useMessageContext();\n\n const contentLength = useMessage((s) => s.message.content.length);\n\n return new Array(contentLength).fill(null).map((_, idx) => {\n const partIndex = idx; // use the index as key, as message is generally append only\n return (\n <MessageContentPart\n key={partIndex}\n partIndex={partIndex}\n components={components}\n />\n );\n });\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { AssistantModelConfigState } from \"./stores/AssistantModelConfig\";\nimport type { AssistantToolRenderersState } from \"./stores/AssistantToolRenderers\";\n\nexport type AssistantContextValue = {\n useModelConfig: UseBoundStore<StoreApi<AssistantModelConfigState>>;\n useToolRenderers: UseBoundStore<StoreApi<AssistantToolRenderersState>>;\n};\n\nexport const AssistantContext = createContext<AssistantContextValue | null>(\n null,\n);\n\nexport const useAssistantContext = (): AssistantContextValue => {\n const context = useContext(AssistantContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ContentPartState } from \"./stores/ContentPart\";\n\nexport type ContentPartContextValue = {\n useContentPart: UseBoundStore<StoreApi<ContentPartState>>;\n};\n\nexport const ContentPartContext = createContext<ContentPartContextValue | null>(\n null,\n);\n\nexport const useContentPartContext = (): ContentPartContextValue => {\n const context = useContext(ContentPartContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >.\",\n );\n return context;\n};\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport { ContentPartContext } from \"../ContentPartContext\";\nimport type { ContentPartContextValue } from \"../ContentPartContext\";\nimport { useMessageContext } from \"../MessageContext\";\nimport type { MessageState } from \"../stores\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\n\ntype ContentPartProviderProps = PropsWithChildren<{\n partIndex: number;\n}>;\n\nconst syncContentPart = (\n { message }: MessageState,\n useContentPart: ContentPartContextValue[\"useContentPart\"],\n partIndex: number,\n) => {\n const part = message.content[partIndex];\n if (!part) return;\n\n const messageStatus = message.role === \"assistant\" ? message.status : \"done\";\n const status =\n partIndex === message.content.length - 1 ? messageStatus : \"done\";\n\n // if the content part is the same, don't update\n const currentState = useContentPart.getState();\n if (currentState.part === part && currentState.status === status) return;\n\n // sync useContentPart\n useContentPart.setState({ part, status });\n};\n\nconst useContentPartContext = (partIndex: number) => {\n const { useMessage } = useMessageContext();\n const [context] = useState<ContentPartContextValue>(() => {\n const useContentPart = create<ContentPartState>(() => ({\n part: { type: \"text\", text: \"\" },\n status: \"done\",\n }));\n\n syncContentPart(useMessage.getState(), useContentPart, partIndex);\n\n return { useContentPart };\n });\n\n useEffect(() => {\n return useMessage.subscribe((message) => {\n syncContentPart(message, context.useContentPart, partIndex);\n });\n }, [context, useMessage, partIndex]);\n\n return context;\n};\n\nexport const ContentPartProvider: FC<ContentPartProviderProps> = ({\n partIndex,\n children,\n}) => {\n const context = useContentPartContext(partIndex);\n\n return (\n <ContentPartContext.Provider value={context}>\n {children}\n </ContentPartContext.Provider>\n );\n};\n","import type { FC } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\n\nexport const ContentPartDisplay: FC = () => {\n const { useContentPart } = useContentPartContext();\n\n const display = useContentPart((c) => {\n if (c.part.type !== \"ui\")\n throw new Error(\n \"ContentPartDisplay can only be used inside ui content parts.\",\n );\n\n return c.part.display;\n });\n\n return display ?? null;\n};\n","import type { FC } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const ContentPartInProgressIndicator: FC = () => {\n const { useMessage } = useMessageContext();\n const { useContentPart } = useContentPartContext();\n\n const indicator = useCombinedStore([useMessage, useContentPart], (m, c) =>\n c.status === \"in_progress\" ? m.inProgressIndicator : null,\n );\n return indicator;\n};\n","import {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\n\ntype ContentPartTextElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\ntype ContentPartTextProps = Omit<PrimitiveSpanProps, \"children\">;\n\nexport const ContentPartText = forwardRef<\n ContentPartTextElement,\n ContentPartTextProps\n>((props, forwardedRef) => {\n const { useContentPart } = useContentPartContext();\n\n const text = useContentPart((c) => {\n if (c.part.type !== \"text\")\n throw new Error(\n \"ContentPartText can only be used inside text content parts.\",\n );\n\n return c.part.text;\n });\n\n return (\n <Primitive.span {...props} ref={forwardedRef}>\n {text}\n </Primitive.span>\n );\n});\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useMemo } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageInProgressElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\ntype MessageInProgressProps = PrimitiveSpanProps;\n\nexport const MessageInProgress = forwardRef<\n MessageInProgressElement,\n MessageInProgressProps\n>((props, ref) => {\n const { useMessage } = useMessageContext();\n\n useMemo(() => {\n useMessage\n .getState()\n .setInProgressIndicator(<Primitive.span {...props} ref={ref} />);\n }, [useMessage, props, ref]);\n\n return null;\n});\n","export { BranchPickerNext as Next } from \"./BranchPickerNext\";\nexport { BranchPickerPrevious as Previous } from \"./BranchPickerPrevious\";\nexport { BranchPickerCount as Count } from \"./BranchPickerCount\";\nexport { BranchPickerNumber as Number } from \"./BranchPickerNumber\";\nexport { BranchPickerRoot as Root } from \"./BranchPickerRoot\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);\n\nexport const createActionButton = <TProps,>(\n useActionButton: ActionButtonCallback<TProps>,\n) => {\n type PrimitiveButtonElement = ElementRef<typeof Primitive.button>;\n type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\n return forwardRef<PrimitiveButtonElement, PrimitiveButtonProps & TProps>(\n (props, forwardedRef) => {\n const onClick = useActionButton(props);\n\n return (\n <Primitive.button\n type=\"button\"\n disabled={!onClick}\n {...props}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, onClick ?? undefined)}\n />\n );\n },\n );\n};\n","\"use client\";\n\nimport { useGoToNextBranch } from \"../../actions/useGoToNextBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerNext = createActionButton(useGoToNextBranch);\n","\"use client\";\n\nimport { useGoToPreviousBranch } from \"../../actions/useGoToPreviousBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerPrevious = createActionButton(useGoToPreviousBranch);\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerCount: FC = () => {\n const { useMessage } = useMessageContext();\n const branchCount = useMessage((s) => s.branches.length);\n return <>{branchCount}</>;\n};\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerNumber: FC = () => {\n const { useMessage } = useMessageContext();\n const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));\n return <>{branchIdx + 1}</>;\n};\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { If } from \"../message\";\n\ntype BranchPickerRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype BranchPickerRootProps = PrimitiveDivProps & {\n hideWhenSingleBranch?: boolean;\n};\n\nexport const BranchPickerRoot = forwardRef<\n BranchPickerRootElement,\n BranchPickerRootProps\n>(({ hideWhenSingleBranch, ...rest }, ref) => {\n return (\n <If hasBranches={hideWhenSingleBranch ? true : undefined}>\n <Primitive.div {...rest} ref={ref} />\n </If>\n );\n});\n","export { ActionBarRoot as Root } from \"./ActionBarRoot\";\nexport { ActionBarCopy as Copy } from \"./ActionBarCopy\";\nexport { ActionBarReload as Reload } from \"./ActionBarReload\";\nexport { ActionBarEdit as Edit } from \"./ActionBarEdit\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype ActionBarRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nenum HideAndFloatStatus {\n Hidden = \"hidden\",\n Floating = \"floating\",\n Normal = \"normal\",\n}\n\nexport type ActionBarRootProps = PrimitiveDivProps & {\n hideWhenRunning?: boolean;\n autohide?: \"always\" | \"not-last\" | \"never\";\n autohideFloat?: \"always\" | \"single-branch\" | \"never\";\n};\n\nexport const ActionBarRoot = forwardRef<\n ActionBarRootElement,\n ActionBarRootProps\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const { useThread } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const hideAndfloatStatus = useCombinedStore(\n [useThread, useMessage],\n (t, m) => {\n if (hideWhenRunning && t.isRunning) return HideAndFloatStatus.Hidden;\n\n const autohideEnabled =\n autohide === \"always\" || (autohide === \"not-last\" && !m.isLast);\n\n // normal status\n if (!autohideEnabled) return HideAndFloatStatus.Normal;\n\n // hidden status\n if (!m.isHovering) return HideAndFloatStatus.Hidden;\n\n // floating status\n if (\n autohideFloat === \"always\" ||\n (autohideFloat === \"single-branch\" && m.branches.length <= 1)\n )\n return HideAndFloatStatus.Floating;\n\n return HideAndFloatStatus.Normal;\n },\n );\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <Primitive.div\n {...(hideAndfloatStatus === HideAndFloatStatus.Floating\n ? { \"data-floating\": \"true\" }\n : null)}\n {...rest}\n ref={ref}\n />\n );\n});\n","\"use client\";\n\nimport { useCopyMessage } from \"../../actions/useCopyMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\ntype ActionBarCopyProps = {\n copiedDuration?: number;\n};\n\nexport const ActionBarCopy =\n createActionButton<ActionBarCopyProps>(useCopyMessage);\n","\"use client\";\n\nimport { useReloadMessage } from \"../../actions/useReloadMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarReload = createActionButton(useReloadMessage);\n","\"use client\";\n\nimport { useBeginMessageEdit } from \"../../actions/useBeginMessageEdit\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarEdit = createActionButton(useBeginMessageEdit);\n","export { ContentPartInProgressIndicator as InProgressIndicator } from \"./ContentPartInProgressIndicator\";\nexport { ContentPartText as Text } from \"./ContentPartText\";\nexport { ContentPartImage as Image } from \"./ContentPartImage\";\nexport { ContentPartDisplay as Display } from \"./ContentPartDisplay\";\n","import {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\n\ntype ContentPartImageElement = ElementRef<typeof Primitive.img>;\ntype PrimitiveImageProps = ComponentPropsWithoutRef<typeof Primitive.img>;\n\ntype ContentPartImageProps = PrimitiveImageProps;\n\nexport const ContentPartImage = forwardRef<\n ContentPartImageElement,\n ContentPartImageProps\n>((props, forwardedRef) => {\n const { useContentPart } = useContentPartContext();\n\n const image = useContentPart((c) => {\n if (c.part.type !== \"image\")\n throw new Error(\n \"ContentPartImage can only be used inside image content parts.\",\n );\n\n return c.part.image;\n });\n\n return <Primitive.img src={image} {...props} ref={forwardedRef} />;\n});\n","\"use client\";\n\nimport { useInsertionEffect, useState } from \"react\";\nimport type { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { LocalRuntime } from \"./LocalRuntime\";\n\nexport const useLocalRuntime = (adapter: ChatModelAdapter) => {\n const [runtime] = useState(() => new LocalRuntime(adapter));\n\n useInsertionEffect(() => {\n runtime.adapter = adapter;\n });\n\n return runtime;\n};\n","\"use client\";\nimport type { z } from \"zod\";\n\ntype ToolExecuteFunction<TArgs, TResult> = (\n args: TArgs,\n) => TResult | Promise<TResult>;\n\nexport type Tool<TArgs = unknown, TResult = unknown> = {\n description?: string;\n parameters: z.ZodSchema<TArgs>;\n execute: ToolExecuteFunction<TArgs, TResult>;\n};\n\nexport type ModelConfig = {\n priority?: number;\n system?: string;\n // biome-ignore lint/suspicious/noExplicitAny: intentional any\n tools?: Record<string, Tool<any, any>>;\n};\n\nexport type ModelConfigProvider = () => ModelConfig;\n\nexport const mergeModelConfigs = (\n configSet: Set<ModelConfigProvider>,\n): ModelConfig => {\n const configs = Array.from(configSet)\n .map((c) => c())\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n\n return configs.reduce((acc, config) => {\n if (config.system) {\n if (acc.system) {\n // TODO should the separator be configurable?\n acc.system += `\\n\\n${config.system}`;\n } else {\n acc.system = config.system;\n }\n }\n if (config.tools) {\n for (const [name, tool] of Object.entries(config.tools)) {\n if (acc.tools?.[name]) {\n throw new Error(\n `You tried to define a tool with the name ${name}, but it already exists.`,\n );\n }\n if (!acc.tools) acc.tools = {};\n acc.tools[name] = tool;\n }\n }\n return acc;\n }, {} as ModelConfig);\n};\n","import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n\nconst optimisticPrefix = \"__optimistic__\";\nexport const generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;\nexport const isOptimisticId = (id: string) => id.startsWith(optimisticPrefix);\n","import type { ThreadMessage } from \"../../utils/AssistantTypes\";\nimport { generateOptimisticId } from \"./idUtils\";\n\ntype RepositoryParent = {\n children: string[];\n};\n\ntype RepositoryMessage = RepositoryParent & {\n prev: RepositoryMessage | null;\n current: ThreadMessage;\n next: RepositoryMessage | null;\n level: number;\n};\n\nconst findHead = (message: RepositoryMessage): RepositoryMessage => {\n if (message.next) return findHead(message.next);\n return message;\n};\n\nexport class MessageRepository {\n private messages = new Map<string, RepositoryMessage>(); // message_id -> item\n private head: RepositoryMessage | null = null;\n private root: RepositoryParent = {\n children: [],\n };\n\n private performOp(\n newParent: RepositoryMessage | null,\n child: RepositoryMessage,\n operation: \"cut\" | \"link\" | \"relink\",\n ) {\n const parentOrRoot = child.prev ?? this.root;\n const newParentOrRoot = newParent ?? this.root;\n\n if (operation === \"relink\" && parentOrRoot === newParentOrRoot) return;\n\n // cut\n if (operation !== \"link\") {\n parentOrRoot.children = parentOrRoot.children.filter(\n (m) => m !== child.current.id,\n );\n\n if (child.prev?.next === child) {\n const fallbackId = child.prev.children.at(-1);\n const fallback = fallbackId ? this.messages.get(fallbackId) : null;\n if (fallback === undefined) {\n throw new Error(\n \"MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui.\",\n );\n }\n child.prev.next = fallback;\n }\n }\n\n // link\n if (operation !== \"cut\") {\n newParentOrRoot.children = [\n ...newParentOrRoot.children,\n child.current.id,\n ];\n\n if (\n newParent &&\n (findHead(child) === this.head || newParent.next === null)\n ) {\n newParent.next = child;\n }\n\n child.prev = newParent;\n }\n }\n getMessages() {\n const messages = new Array<ThreadMessage>(this.head?.level ?? 0);\n for (let current = this.head; current; current = current.prev) {\n messages[current.level] = current.current;\n }\n return messages;\n }\n\n addOrUpdateMessage(parentId: string | null, message: ThreadMessage) {\n const existingItem = this.messages.get(message.id);\n const prev = parentId ? this.messages.get(parentId) : null;\n if (prev === undefined)\n throw new Error(\n \"MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n // update existing message\n if (existingItem) {\n existingItem.current = message;\n this.performOp(prev, existingItem, \"relink\");\n return;\n }\n\n // create a new message\n const newItem: RepositoryMessage = {\n prev,\n current: message,\n next: null,\n children: [],\n level: prev ? prev.level + 1 : 0,\n };\n\n this.messages.set(message.id, newItem);\n this.performOp(prev, newItem, \"link\");\n\n if (this.head === prev) {\n this.head = newItem;\n }\n }\n\n appendOptimisticMessage(\n parentId: string | null,\n message: Omit<ThreadMessage, \"id\" | \"createdAt\">,\n ) {\n let optimisticId: string;\n do {\n optimisticId = generateOptimisticId();\n } while (this.messages.has(optimisticId));\n\n this.addOrUpdateMessage(parentId, {\n ...message,\n id: optimisticId,\n createdAt: new Date(),\n ...(message.role === \"assistant\" ? { status: \"in_progress\" } : undefined),\n } as ThreadMessage);\n\n return optimisticId;\n }\n\n deleteMessage(messageId: string, replacementId?: string | null | undefined) {\n const message = this.messages.get(messageId);\n\n if (!message)\n throw new Error(\n \"MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n const replacement =\n replacementId === undefined\n ? message.prev // if no replacementId is provided, use the parent\n : replacementId === null\n ? null\n : this.messages.get(replacementId);\n if (replacement === undefined)\n throw new Error(\n \"MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui.\",\n );\n\n for (const child of message.children) {\n const childMessage = this.messages.get(child);\n if (!childMessage)\n throw new Error(\n \"MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui.\",\n );\n this.performOp(replacement, childMessage, \"relink\");\n }\n\n this.performOp(null, message, \"cut\");\n this.messages.delete(messageId);\n\n if (this.head === message) {\n this.head = replacement ? findHead(replacement) : null;\n }\n }\n\n getBranches(messageId: string) {\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n const { children } = message.prev ?? this.root;\n return children;\n }\n\n switchToBranch(messageId: string) {\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui.\",\n );\n\n if (message.prev) {\n message.prev.next = message;\n }\n\n this.head = findHead(message);\n }\n\n resetHead(messageId: string | null) {\n if (messageId === null) {\n this.head = null;\n return;\n }\n\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui.\",\n );\n\n this.head = message;\n for (\n let current: RepositoryMessage | null = message;\n current;\n current = current.prev\n ) {\n if (current.prev) {\n current.prev.next = current;\n }\n }\n }\n}\n","import type {\n AppendMessage,\n AssistantMessage,\n UserMessage,\n} from \"../../utils/AssistantTypes\";\nimport {\n type ModelConfigProvider,\n mergeModelConfigs,\n} from \"../../utils/ModelConfigTypes\";\nimport type { Unsubscribe } from \"../../utils/Unsubscribe\";\nimport type { AssistantRuntime } from \"../core/AssistantRuntime\";\nimport { MessageRepository } from \"../utils/MessageRepository\";\nimport { generateId } from \"../utils/idUtils\";\nimport type { ChatModelAdapter, ChatModelRunResult } from \"./ChatModelAdapter\";\n\nexport class LocalRuntime implements AssistantRuntime {\n private _subscriptions = new Set<() => void>();\n private _configProviders = new Set<ModelConfigProvider>();\n\n private abortController: AbortController | null = null;\n private repository = new MessageRepository();\n\n public get messages() {\n return this.repository.getMessages();\n }\n public get isRunning() {\n return this.abortController != null;\n }\n\n constructor(public adapter: ChatModelAdapter) {}\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this.notifySubscribers();\n }\n\n public async append(message: AppendMessage): Promise<void> {\n // add user message\n const userMessageId = generateId();\n const userMessage: UserMessage = {\n id: userMessageId,\n role: \"user\",\n content: message.content,\n createdAt: new Date(),\n };\n this.repository.addOrUpdateMessage(message.parentId, userMessage);\n\n await this.startRun(userMessageId);\n }\n\n public async startRun(parentId: string | null): Promise<void> {\n const id = generateId();\n\n this.repository.resetHead(parentId);\n const messages = this.repository.getMessages();\n\n // add assistant message\n const message: AssistantMessage = {\n id,\n role: \"assistant\",\n status: \"in_progress\",\n content: [{ type: \"text\", text: \"\" }],\n createdAt: new Date(),\n };\n this.repository.addOrUpdateMessage(parentId, { ...message });\n\n // abort existing run\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.notifySubscribers();\n\n try {\n const updateHandler = ({ content }: ChatModelRunResult) => {\n message.content = content;\n this.repository.addOrUpdateMessage(parentId, { ...message });\n this.notifySubscribers();\n };\n const result = await this.adapter.run({\n messages,\n abortSignal: this.abortController.signal,\n config: mergeModelConfigs(this._configProviders),\n onUpdate: updateHandler,\n });\n updateHandler(result);\n\n message.status = \"done\";\n this.repository.addOrUpdateMessage(parentId, { ...message });\n } catch (e) {\n message.status = \"error\";\n this.repository.addOrUpdateMessage(parentId, { ...message });\n console.error(e);\n } finally {\n this.abortController = null;\n this.notifySubscribers();\n }\n }\n\n cancelRun(): void {\n if (!this.abortController) return;\n\n this.abortController.abort();\n this.abortController = null;\n this.notifySubscribers();\n }\n\n private notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n this._configProviders.add(provider);\n return () => this._configProviders.delete(provider);\n }\n}\n","import type { FC, PropsWithChildren } from \"react\";\nimport { memo } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime/core/AssistantRuntime\";\nimport { AssistantProvider } from \"./AssistantProvider\";\n\ntype AssistantRuntimeProviderProps = {\n runtime: AssistantRuntime;\n};\n\nconst AssistantRuntimeProviderImpl: FC<\n PropsWithChildren<AssistantRuntimeProviderProps>\n> = ({ children, runtime }) => {\n return <AssistantProvider runtime={runtime}>{children}</AssistantProvider>;\n};\n\nexport const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime\";\nimport { AssistantContext } from \"../AssistantContext\";\nimport { makeAssistantModelConfigStore } from \"../stores/AssistantModelConfig\";\nimport { makeAssistantToolRenderersStore } from \"../stores/AssistantToolRenderers\";\nimport { ThreadProvider } from \"./ThreadProvider\";\n\ntype AssistantProviderProps = {\n runtime: AssistantRuntime;\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<AssistantProviderProps>\n> = ({ children, runtime }) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [context] = useState(() => {\n const useModelConfig = makeAssistantModelConfigStore();\n const useToolRenderers = makeAssistantToolRenderersStore();\n\n return { useModelConfig, useToolRenderers };\n });\n\n const getModelCOnfig = context.useModelConfig((c) => c.getModelConfig);\n useEffect(() => {\n return runtime.registerModelConfigProvider(getModelCOnfig);\n }, [runtime, getModelCOnfig]);\n\n return (\n <AssistantContext.Provider value={context}>\n <ThreadProvider runtime={runtime}>{children}</ThreadProvider>\n </AssistantContext.Provider>\n );\n};\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { ModelConfigProvider } from \"../../utils/ModelConfigTypes\";\nimport { ProxyConfigProvider } from \"../../utils/ProxyConfigProvider\";\n\nexport type AssistantModelConfigState = {\n getModelConfig: ModelConfigProvider;\n registerModelConfigProvider: (provider: ModelConfigProvider) => () => void;\n};\n\nexport const makeAssistantModelConfigStore = () =>\n create<AssistantModelConfigState>(() => {\n const proxy = new ProxyConfigProvider();\n\n return {\n getModelConfig: () => {\n return proxy.getModelConfig();\n },\n registerModelConfigProvider: (provider: ModelConfigProvider) => {\n return proxy.registerModelConfigProvider(provider);\n },\n } satisfies AssistantModelConfigState;\n });\n","\"use client\";\nimport {\n type ModelConfigProvider,\n mergeModelConfigs,\n} from \"./ModelConfigTypes\";\n\nexport class ProxyConfigProvider {\n private _providers = new Set<ModelConfigProvider>();\n\n getModelConfig() {\n return mergeModelConfigs(this._providers);\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n this._providers.add(provider);\n return () => {\n this._providers.delete(provider);\n };\n }\n}\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { ToolCallContentPartComponent } from \"../../primitives/message/ContentPartComponentTypes\";\n\nexport type AssistantToolRenderersState = {\n getToolRenderer: (name: string) => ToolCallContentPartComponent | null;\n setToolRenderer: (\n name: string,\n render: ToolCallContentPartComponent,\n ) => () => void;\n};\n\nexport const makeAssistantToolRenderersStore = () =>\n create<AssistantToolRenderersState>((set) => {\n const renderers = new Map<string, ToolCallContentPartComponent[]>();\n\n return {\n getToolRenderer: (name) => {\n const arr = renderers.get(name);\n const last = arr?.at(-1);\n if (last) return last;\n return null;\n },\n setToolRenderer: (name, render) => {\n let arr = renderers.get(name);\n if (!arr) {\n arr = [];\n renderers.set(name, arr);\n }\n arr.push(render);\n set({}); // notify the store listeners\n\n return () => {\n const index = arr.indexOf(render);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n set({}); // notify the store listeners\n };\n },\n } satisfies AssistantToolRenderersState;\n });\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { ReactThreadRuntime } from \"../../runtime/core/ReactThreadRuntime\";\nimport type { ThreadRuntime } from \"../../runtime/core/ThreadRuntime\";\nimport type { ThreadContextValue } from \"../ThreadContext\";\nimport { ThreadContext } from \"../ThreadContext\";\nimport { makeComposerStore } from \"../stores/Composer\";\nimport { makeThreadStore } from \"../stores/Thread\";\nimport { makeThreadViewportStore } from \"../stores/ThreadViewport\";\n\ntype ThreadProviderProps = {\n runtime: ThreadRuntime;\n};\n\nexport const ThreadProvider: FC<PropsWithChildren<ThreadProviderProps>> = ({\n children,\n runtime,\n}) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [{ context, onRuntimeUpdate }] = useState(() => {\n const { useThread, onRuntimeUpdate } = makeThreadStore(runtimeRef);\n const useViewport = makeThreadViewportStore();\n const useComposer = makeComposerStore(useThread);\n\n return {\n context: {\n useViewport,\n useThread,\n useComposer,\n } satisfies ThreadContextValue,\n onRuntimeUpdate,\n };\n });\n\n useEffect(() => {\n // whenever the runtime changes\n onRuntimeUpdate();\n\n // subscribe to runtime updates\n return runtime.subscribe(onRuntimeUpdate);\n }, [onRuntimeUpdate, runtime]);\n\n const RuntimeSynchronizer = (runtime as ReactThreadRuntime)\n .unstable_synchronizer;\n\n return (\n <ThreadContext.Provider value={context}>\n {RuntimeSynchronizer && <RuntimeSynchronizer />}\n {children}\n </ThreadContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport type { ThreadState } from \"./Thread\";\n\nexport type ComposerState = BaseComposerState &\n Readonly<{\n isEditing: true;\n\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeComposerStore = (\n useThread: StoreApi<ThreadState>,\n): UseBoundStore<StoreApi<ComposerState>> =>\n create<ComposerState>()((set, get, store) => {\n return {\n ...makeBaseComposer(set, get, store),\n\n isEditing: true,\n\n send: () => {\n const { setValue, value } = get();\n setValue(\"\");\n\n useThread.getState().append({\n parentId: useThread.getState().messages.at(-1)?.id ?? null,\n content: [{ type: \"text\", text: value }],\n });\n },\n cancel: () => {\n const thread = useThread.getState();\n if (!thread.isRunning) return false;\n\n useThread.getState().cancelRun();\n return true;\n },\n };\n });\n","import type { MutableRefObject } from \"react\";\nimport { create } from \"zustand\";\nimport type { AppendMessage, ThreadMessage } from \"../../utils/AssistantTypes\";\n\nexport type ThreadState = {\n messages: readonly ThreadMessage[];\n isRunning: boolean;\n\n getBranches: (messageId: string) => readonly string[];\n switchToBranch: (branchId: string) => void;\n\n append: (message: AppendMessage) => void;\n startRun: (parentId: string | null) => void;\n cancelRun: () => void;\n};\n\nexport const makeThreadStore = (runtimeRef: MutableRefObject<ThreadState>) => {\n const useThread = create<ThreadState>(() => ({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n getBranches: (messageId) => runtimeRef.current.getBranches(messageId),\n switchToBranch: (branchId) => runtimeRef.current.switchToBranch(branchId),\n startRun: (parentId) => runtimeRef.current.startRun(parentId),\n append: (message) => runtimeRef.current.append(message),\n cancelRun: () => runtimeRef.current.cancelRun(),\n }));\n\n const onRuntimeUpdate = () => {\n useThread.setState({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n });\n };\n\n return {\n useThread,\n onRuntimeUpdate,\n };\n};\n","\"use client\";\nimport { create } from \"zustand\";\nimport type { Unsubscribe } from \"../../utils/Unsubscribe\";\n\nexport type ThreadViewportState = {\n isAtBottom: boolean;\n scrollToBottom: () => void;\n onScrollToBottom: (callback: () => void) => Unsubscribe;\n};\n\nexport const makeThreadViewportStore = () => {\n const scrollToBottomListeners = new Set<() => void>();\n\n return create<ThreadViewportState>(() => ({\n isAtBottom: true,\n scrollToBottom: () => {\n for (const listener of scrollToBottomListeners) {\n listener();\n }\n },\n onScrollToBottom: (callback) => {\n scrollToBottomListeners.add(callback);\n return () => {\n scrollToBottomListeners.delete(callback);\n };\n },\n }));\n};\n","export { ProxyConfigProvider } from \"./utils/ProxyConfigProvider\";\nexport { MessageRepository } from \"./runtime/utils/MessageRepository\";\n"],"mappings":"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","names":["import_react","import_react","import_react","c","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_react_primitive","import_react","import_react","import_react_use_callback_ref","import_react","import_jsx_runtime","import_react","import_react","import_zustand","import_jsx_runtime","useMessageContext","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_compose_refs","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_compose_refs","import_react","import_jsx_runtime","TextareaAutosize","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_react","import_react","import_react","import_react","import_zustand","import_jsx_runtime","useContentPartContext","import_react_primitive","import_react","import_jsx_runtime","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react","import_react","import_react","import_zustand","import_zustand","import_react","import_zustand","import_zustand","import_zustand","import_jsx_runtime","onRuntimeUpdate","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/actions/useCopyMessage.tsx","../src/context/MessageContext.ts","../src/utils/combined/useCombinedStore.ts","../src/utils/combined/createCombinedStore.ts","../src/utils/getMessageText.tsx","../src/actions/useReloadMessage.tsx","../src/context/ThreadContext.ts","../src/actions/useBeginMessageEdit.tsx","../src/actions/useGoToNextBranch.tsx","../src/actions/useGoToPreviousBranch.tsx","../src/primitives/thread/index.ts","../src/primitives/thread/ThreadRoot.tsx","../src/primitives/thread/ThreadIf.tsx","../src/primitives/thread/ThreadEmpty.tsx","../src/primitives/thread/ThreadViewport.tsx","../src/utils/hooks/useOnResizeContent.tsx","../src/utils/hooks/useOnScrollToBottom.tsx","../src/primitives/thread/ThreadMessages.tsx","../src/context/providers/MessageProvider.tsx","../src/context/stores/MessageComposer.ts","../src/context/stores/BaseComposer.ts","../src/context/ComposerContext.ts","../src/primitives/composer/ComposerIf.tsx","../src/primitives/message/MessageIf.tsx","../src/primitives/thread/ThreadScrollToBottom.tsx","../src/primitives/thread/ThreadSuggestion.tsx","../src/primitives/composer/index.ts","../src/primitives/composer/ComposerRoot.tsx","../src/primitives/composer/ComposerInput.tsx","../src/primitives/composer/ComposerSend.tsx","../src/primitives/composer/ComposerCancel.tsx","../src/primitives/message/index.ts","../src/primitives/message/MessageRoot.tsx","../src/primitives/message/MessageContent.tsx","../src/context/AssistantContext.ts","../src/context/ContentPartContext.ts","../src/context/providers/ContentPartProvider.tsx","../src/primitives/contentPart/ContentPartDisplay.tsx","../src/primitives/contentPart/ContentPartInProgressIndicator.tsx","../src/primitives/contentPart/ContentPartText.tsx","../src/primitives/message/MessageInProgress.tsx","../src/primitives/branchPicker/index.ts","../src/utils/createActionButton.tsx","../src/primitives/branchPicker/BranchPickerNext.tsx","../src/primitives/branchPicker/BranchPickerPrevious.tsx","../src/primitives/branchPicker/BranchPickerCount.tsx","../src/primitives/branchPicker/BranchPickerNumber.tsx","../src/primitives/branchPicker/BranchPickerRoot.tsx","../src/primitives/actionBar/index.ts","../src/primitives/actionBar/ActionBarRoot.tsx","../src/primitives/actionBar/ActionBarCopy.tsx","../src/primitives/actionBar/ActionBarReload.tsx","../src/primitives/actionBar/ActionBarEdit.tsx","../src/primitives/contentPart/index.ts","../src/primitives/contentPart/ContentPartImage.tsx","../src/runtime/local/useLocalRuntime.tsx","../src/utils/ModelConfigTypes.ts","../src/runtime/utils/idUtils.tsx","../src/runtime/utils/MessageRepository.tsx","../src/runtime/local/LocalRuntime.tsx","../src/context/providers/AssistantRuntimeProvider.tsx","../src/context/providers/AssistantProvider.tsx","../src/context/stores/AssistantModelConfig.ts","../src/utils/ProxyConfigProvider.ts","../src/context/stores/AssistantToolRenderers.ts","../src/context/providers/ThreadProvider.tsx","../src/context/stores/Composer.ts","../src/context/stores/Thread.ts","../src/context/stores/ThreadViewport.tsx","../src/internal.ts"],"sourcesContent":["export * from \"./actions\";\nexport * from \"./primitives\";\nexport * from \"./runtime\";\n\nexport type {\n ThreadMessage,\n AssistantMessage,\n UserMessage,\n AppendMessage,\n AssistantContentPart,\n UserContentPart,\n AppendContentPart,\n TextContentPart,\n} from \"./utils/AssistantTypes\";\n\nexport { AssistantRuntimeProvider } from \"./context/providers/AssistantRuntimeProvider\";\n\n// utils\nexport type { Unsubscribe } from \"./utils/Unsubscribe\";\n\nexport * as INTERNAL from \"./internal\";\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\nimport { getMessageText } from \"../utils/getMessageText\";\n\nexport const useCopyMessage = ({ copiedDuration = 3000 }) => {\n const { useMessage, useComposer } = useMessageContext();\n\n const hasCopyableContent = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => {\n return c.isEditing || m.message.content.some((c) => c.type === \"text\");\n },\n );\n\n const callback = useCallback(() => {\n const { isEditing, value: composerValue } = useComposer.getState();\n const { message, setIsCopied } = useMessage.getState();\n\n const valueToCopy = isEditing ? composerValue : getMessageText(message);\n\n navigator.clipboard.writeText(valueToCopy);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n }, [useComposer, useMessage, copiedDuration]);\n\n if (!hasCopyableContent) return null;\n return callback;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { MessageState } from \"./stores/Message\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type MessageContextValue = {\n useMessage: UseBoundStore<StoreApi<MessageState>>;\n useComposer: UseBoundStore<StoreApi<EditComposerState>>;\n};\n\nexport const MessageContext = createContext<MessageContextValue | null>(null);\n\nexport const useMessageContext = () => {\n const context = useContext(MessageContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />.\",\n );\n return context;\n};\n","\"use client\";\nimport { useMemo } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport {\n type CombinedSelector,\n createCombinedStore,\n} from \"./createCombinedStore\";\n\nexport const useCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n selector: CombinedSelector<T, R>,\n): R => {\n // eslint-disable-next-line react-hooks/exhaustive-deps -- shallow-compare the store array\n const useCombined = useMemo(() => createCombinedStore<T, R>(stores), stores);\n return useCombined(selector);\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type { Unsubscribe } from \"../Unsubscribe\";\n\nexport type CombinedSelector<T extends Array<unknown>, R> = (...args: T) => R;\n\nexport const createCombinedStore = <T extends Array<unknown>, R>(stores: {\n [K in keyof T]: StoreApi<T[K]>;\n}) => {\n const subscribe = (callback: () => void): Unsubscribe => {\n const unsubscribes = stores.map((store) => store.subscribe(callback));\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n };\n\n return (selector: CombinedSelector<T, R>): R => {\n const getSnapshot = (): R =>\n selector(...(stores.map((store) => store.getState()) as T));\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n };\n};\n","\"use client\";\nimport type { TextContentPart, ThreadMessage } from \"./AssistantTypes\";\n\nexport const getMessageText = (message: ThreadMessage) => {\n const textParts = message.content.filter(\n (part) => part.type === \"text\",\n ) as TextContentPart[];\n\n return textParts.map((part) => part.text).join(\"\\n\\n\");\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useReloadMessage = () => {\n const { useThread, useViewport } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useThread, useMessage],\n (t, m) => t.isRunning || m.message.role !== \"assistant\",\n );\n\n const callback = useCallback(() => {\n const { parentId } = useMessage.getState();\n useThread.getState().startRun(parentId);\n useViewport.getState().scrollToBottom();\n }, [useMessage, useThread, useViewport]);\n\n if (disabled) return null;\n return callback;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { ThreadState } from \"./stores/Thread\";\nimport type { ThreadViewportState } from \"./stores/ThreadViewport\";\n\nexport type ThreadContextValue = {\n useThread: UseBoundStore<StoreApi<ThreadState>>;\n useComposer: UseBoundStore<StoreApi<ComposerState>>;\n useViewport: UseBoundStore<StoreApi<ThreadViewportState>>;\n};\n\nexport const ThreadContext = createContext<ThreadContextValue | null>(null);\n\nexport const useThreadContext = (): ThreadContextValue => {\n const context = useContext(ThreadContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useBeginMessageEdit = () => {\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => m.message.role !== \"user\" || c.isEditing,\n );\n\n const callback = useCallback(() => {\n const { edit } = useComposer.getState();\n edit();\n }, [useComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToNextBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) =>\n c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) + 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToPreviousBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) - 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","export { ThreadRoot as Root } from \"./ThreadRoot\";\nexport { ThreadEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadIf as If } from \"./ThreadIf\";\nexport { ThreadViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadSuggestion as Suggestion } from \"./ThreadSuggestion\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\n\ntype ThreadRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadRootProps = PrimitiveDivProps;\n\nexport const ThreadRoot = forwardRef<ThreadRootElement, ThreadRootProps>(\n (props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n },\n);\n\nThreadRoot.displayName = \"ThreadRoot\";\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n};\n\ntype ThreadIfProps = PropsWithChildren<RequireAtLeastOne<ThreadIfFilters>>;\n\nconst useThreadIf = (props: RequireAtLeastOne<ThreadIfFilters>) => {\n const { useThread } = useThreadContext();\n return useThread((thread) => {\n if (props.empty === true && thread.messages.length !== 0) return false;\n if (props.empty === false && thread.messages.length === 0) return false;\n if (props.running === true && !thread.isRunning) return false;\n if (props.running === false && thread.isRunning) return false;\n\n return true;\n });\n};\n\nexport const ThreadIf: FC<ThreadIfProps> = ({ children, ...query }) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { ThreadIf } from \"./ThreadIf\";\n\ntype ThreadEmptyProps = {\n children: ReactNode;\n};\n\nexport const ThreadEmpty: FC<ThreadEmptyProps> = ({ children }) => {\n return <ThreadIf empty>{children}</ThreadIf>;\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport {\n type ElementRef,\n forwardRef,\n useRef,\n ComponentPropsWithoutRef,\n} from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ThreadViewportElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadViewportProps = PrimitiveDivProps & {\n autoScroll?: boolean;\n};\n\nexport const ThreadViewport = forwardRef<\n ThreadViewportElement,\n ThreadViewportProps\n>(({ autoScroll = true, onScroll, children, ...rest }, forwardedRef) => {\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n const divRef = useRef<HTMLDivElement>(null);\n const ref = useComposedRefs(forwardedRef, divRef);\n\n const { useViewport } = useThreadContext();\n\n // TODO find a more elegant implementation for this\n\n const firstRenderRef = useRef(true);\n const isScrollingToBottomRef = useRef(false);\n const lastScrollTop = useRef<number>(0);\n\n const scrollToBottom = () => {\n const div = messagesEndRef.current;\n if (!div || !autoScroll) return;\n\n const behavior = firstRenderRef.current ? \"instant\" : \"auto\";\n firstRenderRef.current = false;\n\n isScrollingToBottomRef.current = true;\n div.scrollIntoView({ behavior });\n };\n\n useOnResizeContent(divRef, () => {\n if (!isScrollingToBottomRef.current && !useViewport.getState().isAtBottom) {\n handleScroll();\n } else {\n scrollToBottom();\n }\n });\n\n useOnScrollToBottom(() => {\n scrollToBottom();\n });\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = useViewport.getState().isAtBottom;\n const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight;\n\n if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {\n // ignore scroll down\n } else if (newIsAtBottom !== isAtBottom) {\n isScrollingToBottomRef.current = false;\n useViewport.setState({ isAtBottom: newIsAtBottom });\n }\n\n lastScrollTop.current = div.scrollTop;\n };\n\n return (\n <Primitive.div\n {...rest}\n onScroll={composeEventHandlers(onScroll, handleScroll)}\n ref={ref}\n >\n {children}\n <div ref={messagesEndRef} />\n </Primitive.div>\n );\n});\n\nThreadViewport.displayName = \"ThreadViewport\";\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { type MutableRefObject, useEffect } from \"react\";\n\nexport const useOnResizeContent = (\n ref: MutableRefObject<HTMLElement | null>,\n callback: () => void,\n) => {\n const callbackRef = useCallbackRef(callback);\n const el = ref.current;\n useEffect(() => {\n if (!el) return;\n\n const resizeObserver = new ResizeObserver(() => {\n callbackRef();\n });\n\n const mutationObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n resizeObserver.observe(node);\n }\n }\n\n for (const node of mutation.removedNodes) {\n if (node instanceof Element) {\n resizeObserver.unobserve(node);\n }\n }\n }\n\n callbackRef();\n });\n\n resizeObserver.observe(el);\n mutationObserver.observe(el, { childList: true });\n\n // Observe existing children\n for (const child of el.children) {\n resizeObserver.observe(child);\n }\n\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [el, callbackRef]);\n};\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\nexport const useOnScrollToBottom = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const { useViewport } = useThreadContext();\n useEffect(() => {\n return useViewport.getState().onScrollToBottom(() => {\n callbackRef();\n });\n }, [useViewport, callbackRef]);\n};\n","\"use client\";\n\nimport { type ComponentType, type FC, memo } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { MessageProvider } from \"../../context/providers/MessageProvider\";\nimport { ComposerIf } from \"../composer/ComposerIf\";\nimport { MessageIf } from \"../message/MessageIf\";\n\ntype ThreadMessagesProps = {\n components:\n | {\n Message: ComponentType;\n UserMessage?: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage?: ComponentType;\n }\n | {\n Message?: ComponentType;\n UserMessage: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage: ComponentType;\n };\n};\n\nconst getComponents = (components: ThreadMessagesProps[\"components\"]) => {\n return {\n EditComposer:\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType),\n UserMessage:\n components.UserMessage ?? (components.Message as ComponentType),\n AssistantMessage:\n components.AssistantMessage ?? (components.Message as ComponentType),\n };\n};\n\ntype ThreadMessageProps = {\n messageIndex: number;\n components: ThreadMessagesProps[\"components\"];\n};\n\nconst ThreadMessageImpl: FC<ThreadMessageProps> = ({\n messageIndex,\n components,\n}) => {\n const { UserMessage, EditComposer, AssistantMessage } =\n getComponents(components);\n return (\n <MessageProvider messageIndex={messageIndex}>\n <MessageIf user>\n <ComposerIf editing={false}>\n <UserMessage />\n </ComposerIf>\n <ComposerIf editing>\n <EditComposer />\n </ComposerIf>\n </MessageIf>\n <MessageIf assistant>\n <AssistantMessage />\n </MessageIf>\n </MessageProvider>\n );\n};\n\nconst ThreadMessage = memo(\n ThreadMessageImpl,\n (prev, next) =>\n prev.messageIndex === next.messageIndex &&\n prev.components.UserMessage === next.components.UserMessage &&\n prev.components.EditComposer === next.components.EditComposer &&\n prev.components.AssistantMessage === next.components.AssistantMessage,\n);\n\nexport const ThreadMessages: FC<ThreadMessagesProps> = ({ components }) => {\n const { useThread } = useThreadContext();\n\n const messagesLength = useThread((t) => t.messages.length);\n if (messagesLength === 0) return null;\n\n return new Array(messagesLength).fill(null).map((_, idx) => {\n const messageIndex = idx; // keep the same key when switching branches for better a11y support\n return (\n <ThreadMessage\n key={messageIndex}\n messageIndex={messageIndex}\n components={components}\n />\n );\n });\n};\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport type {\n AppendContentPart,\n ThreadMessage,\n} from \"../../utils/AssistantTypes\";\nimport { getMessageText } from \"../../utils/getMessageText\";\nimport { MessageContext } from \"../MessageContext\";\nimport type { MessageContextValue } from \"../MessageContext\";\nimport { useThreadContext } from \"../ThreadContext\";\nimport type { MessageState } from \"../stores/Message\";\nimport { makeEditComposerStore } from \"../stores/MessageComposer\";\nimport type { ThreadState } from \"../stores/Thread\";\n\ntype MessageProviderProps = PropsWithChildren<{\n messageIndex: number;\n}>;\n\nconst getIsLast = (thread: ThreadState, message: ThreadMessage) => {\n return thread.messages[thread.messages.length - 1]?.id === message.id;\n};\n\nconst syncMessage = (\n thread: ThreadState,\n useMessage: MessageContextValue[\"useMessage\"],\n messageIndex: number,\n) => {\n const parentId = thread.messages[messageIndex - 1]?.id ?? null;\n const message = thread.messages[messageIndex];\n if (!message) return;\n\n const isLast = getIsLast(thread, message);\n const branches = thread.getBranches(message.id);\n\n // if the message is the same, don't update\n const currentState = useMessage.getState();\n if (\n currentState.message === message &&\n currentState.parentId === parentId &&\n currentState.branches === branches &&\n currentState.isLast === isLast\n )\n return;\n\n // sync useMessage\n useMessage.setState({\n message,\n parentId,\n branches,\n isLast,\n });\n};\n\nconst useMessageContext = (messageIndex: number) => {\n const { useThread } = useThreadContext();\n\n const [context] = useState<MessageContextValue>(() => {\n const useMessage = create<MessageState>((set) => ({\n message: null as unknown as ThreadMessage,\n parentId: null,\n branches: [],\n isLast: false,\n inProgressIndicator: null,\n isCopied: false,\n isHovering: false,\n setInProgressIndicator: (value) => {\n set({ inProgressIndicator: value });\n },\n setIsCopied: (value) => {\n set({ isCopied: value });\n },\n setIsHovering: (value) => {\n set({ isHovering: value });\n },\n }));\n\n const useComposer = makeEditComposerStore({\n onEdit: () => {\n const message = useMessage.getState().message;\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const text = getMessageText(message);\n\n return text;\n },\n onSend: (text) => {\n const { message, parentId } = useMessage.getState();\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const nonTextParts = message.content.filter(\n (part): part is AppendContentPart =>\n part.type !== \"text\" && part.type !== \"ui\",\n );\n useThread.getState().append({\n parentId,\n content: [{ type: \"text\", text }, ...nonTextParts],\n });\n },\n });\n\n syncMessage(useThread.getState(), useMessage, messageIndex);\n\n return { useMessage, useComposer };\n });\n\n useEffect(() => {\n return useThread.subscribe((thread) => {\n syncMessage(thread, context.useMessage, messageIndex);\n });\n }, [context, useThread, messageIndex]);\n\n return context;\n};\n\nexport const MessageProvider: FC<MessageProviderProps> = ({\n messageIndex,\n children,\n}) => {\n const context = useMessageContext(messageIndex);\n\n return (\n <MessageContext.Provider value={context}>\n {children}\n </MessageContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\n\nexport type EditComposerState = BaseComposerState &\n Readonly<{\n isEditing: boolean;\n\n edit: () => void;\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeEditComposerStore = ({\n onEdit,\n onSend,\n}: {\n onEdit: () => string;\n onSend: (value: string) => void;\n}): UseBoundStore<StoreApi<EditComposerState>> =>\n create<EditComposerState>()((set, get, store) => ({\n ...makeBaseComposer(set, get, store),\n\n isEditing: false,\n\n edit: () => {\n const value = onEdit();\n set({ isEditing: true, value });\n },\n send: () => {\n const value = get().value;\n set({ isEditing: false });\n onSend(value);\n },\n cancel: () => {\n if (!get().isEditing) return false;\n set({ isEditing: false });\n return true;\n },\n }));\n","import type { StateCreator } from \"zustand\";\n\nexport type BaseComposerState = Readonly<{\n value: string;\n setValue: (value: string) => void;\n}>;\n\nexport const makeBaseComposer: StateCreator<\n BaseComposerState,\n [],\n [],\n BaseComposerState\n> = (set) => ({\n value: \"\",\n setValue: (value) => {\n set({ value });\n },\n});\n","import { useContext, useMemo } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport { MessageContext } from \"./MessageContext\";\nimport { useThreadContext } from \"./ThreadContext\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type ComposerContextValue = {\n useComposer: UseBoundStore<StoreApi<EditComposerState | ComposerState>>;\n type: \"edit\" | \"new\";\n};\n\nexport const useComposerContext = (): ComposerContextValue => {\n const { useComposer } = useThreadContext();\n const { useComposer: useEditComposer } = useContext(MessageContext) ?? {};\n return useMemo(\n () => ({\n useComposer: (useEditComposer ?? useComposer) as UseBoundStore<\n StoreApi<EditComposerState | ComposerState>\n >,\n type: useEditComposer ? (\"edit\" as const) : (\"new\" as const),\n }),\n [useEditComposer, useComposer],\n );\n};\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ComposerIfFilters = {\n editing: boolean | undefined;\n};\n\ntype ComposerIfProps = PropsWithChildren<RequireAtLeastOne<ComposerIfFilters>>;\n\nconst useComposerIf = (props: RequireAtLeastOne<ComposerIfFilters>) => {\n const { useComposer } = useComposerContext();\n return useComposer((composer) => {\n if (props.editing === true && !composer.isEditing) return false;\n if (props.editing === false && composer.isEditing) return false;\n\n return true;\n });\n};\n\nexport const ComposerIf: FC<ComposerIfProps> = ({ children, ...query }) => {\n const result = useComposerIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n};\n\ntype MessageIfProps = RequireAtLeastOne<MessageIfFilters> & {\n children: ReactNode;\n};\n\nexport const useMessageIf = (props: RequireAtLeastOne<MessageIfFilters>) => {\n const { useMessage } = useMessageContext();\n\n return useMessage(({ message, branches, isLast, isCopied, isHovering }) => {\n if (props.hasBranches === true && branches.length < 2) return false;\n\n if (props.user && message.role !== \"user\") return false;\n if (props.assistant && message.role !== \"assistant\") return false;\n\n if (props.lastOrHover === true && !isHovering && !isLast) return false;\n\n if (props.copied === true && !isCopied) return false;\n if (props.copied === false && isCopied) return false;\n\n return true;\n });\n};\n\nexport const MessageIf: FC<MessageIfProps> = ({ children, ...query }) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadScrollToBottomElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadScrollToBottomProps = PrimitiveButtonProps;\n\nexport const ThreadScrollToBottom = forwardRef<\n ThreadScrollToBottomElement,\n ThreadScrollToBottomProps\n>(({ onClick, ...rest }, ref) => {\n const { useViewport } = useThreadContext();\n\n const isAtBottom = useViewport((s) => s.isAtBottom);\n const handleScrollToBottom = () => {\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isAtBottom}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleScrollToBottom)}\n />\n );\n});\n\nThreadScrollToBottom.displayName = \"ThreadScrollToBottom\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadSuggestionElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadSuggestionProps = PrimitiveButtonProps & {\n prompt: string;\n method: \"replace\";\n autoSend?: boolean;\n};\n\nexport const ThreadSuggestion = forwardRef<\n ThreadSuggestionElement,\n ThreadSuggestionProps\n>(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {\n const { useThread, useComposer } = useThreadContext();\n\n const isDisabled = useThread((t) => t.isRunning);\n const handleApplySuggestion = () => {\n const thread = useThread.getState();\n const composer = useComposer.getState();\n composer.setValue(prompt);\n\n if (send && !thread.isRunning) {\n composer.send();\n }\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isDisabled}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleApplySuggestion)}\n />\n );\n});\n\nThreadSuggestion.displayName = \"ThreadSuggestion\";\n","export { ComposerRoot as Root } from \"./ComposerRoot\";\nexport { ComposerInput as Input } from \"./ComposerInput\";\nexport { ComposerSend as Send } from \"./ComposerSend\";\nexport { ComposerCancel as Cancel } from \"./ComposerCancel\";\nexport { ComposerIf as If } from \"./ComposerIf\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport {\n type ElementRef,\n type FormEvent,\n forwardRef,\n useRef,\n ComponentPropsWithoutRef,\n} from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ComposerRootElement = ElementRef<typeof Primitive.form>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.form>;\n\ntype ComposerRootProps = PrimitiveFormProps;\n\nexport const ComposerRoot = forwardRef<ComposerRootElement, ComposerRootProps>(\n ({ onSubmit, ...rest }, forwardedRef) => {\n const { useViewport } = useThreadContext();\n const { useComposer } = useComposerContext();\n\n const formRef = useRef<HTMLFormElement>(null);\n const ref = useComposedRefs(forwardedRef, formRef);\n\n const handleSubmit = (e: FormEvent) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n\n e.preventDefault();\n composerState.send();\n\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={ref}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n },\n);\n\nComposerRoot.displayName = \"ComposerRoot\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport TextareaAutosize, {\n type TextareaAutosizeProps,\n} from \"react-textarea-autosize\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ComposerInputProps = TextareaAutosizeProps & {\n asChild?: boolean;\n};\n\nexport const ComposerInput = forwardRef<\n HTMLTextAreaElement,\n ComposerInputProps\n>(\n (\n { autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest },\n forwardedRef,\n ) => {\n const { useThread } = useThreadContext();\n const { useComposer, type } = useComposerContext();\n\n const value = useComposer((c) => {\n if (!c.isEditing) return \"\";\n return c.value;\n });\n\n const Component = asChild ? Slot : TextareaAutosize;\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (disabled) return;\n\n if (e.key === \"Escape\") {\n const composer = useComposer.getState();\n if (composer.cancel()) {\n e.preventDefault();\n }\n } else if (e.key === \"Enter\" && e.shiftKey === false) {\n const isRunning = useThread.getState().isRunning;\n if (!isRunning) {\n e.preventDefault();\n\n textareaRef.current?.closest(\"form\")?.requestSubmit();\n }\n }\n };\n\n const autoFocusEnabled = autoFocus && !disabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n console.log(\"focus\");\n textarea.focus();\n textarea.setSelectionRange(\n textareaRef.current.value.length,\n textareaRef.current.value.length,\n );\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnScrollToBottom(() => {\n if (type === \"new\") {\n focus();\n }\n });\n\n return (\n <Component\n value={value}\n {...rest}\n ref={ref}\n autoFocus={autoFocus}\n disabled={disabled}\n onChange={composeEventHandlers(onChange, (e) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n return composerState.setValue(e.target.value);\n })}\n onKeyDown={composeEventHandlers(onKeyDown, handleKeyPress)}\n />\n );\n },\n);\n\nComposerInput.displayName = \"ComposerInput\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerSendElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerSendProps = PrimitiveFormProps;\n\nexport const ComposerSend = forwardRef<ComposerSendElement, ComposerSendProps>(\n ({ disabled, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);\n\n return (\n <Primitive.button\n type=\"submit\"\n {...rest}\n ref={ref}\n disabled={disabled || !hasValue}\n />\n );\n },\n);\n\nComposerSend.displayName = \"ComposerSend\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerCancelElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerCancelProps = PrimitiveFormProps;\n\nexport const ComposerCancel = forwardRef<\n ComposerCancelElement,\n ComposerCancelProps\n>(({ onClick, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n\n const handleCancel = () => {\n useComposer.getState().cancel();\n };\n\n return (\n <Primitive.button\n type=\"button\"\n {...rest}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleCancel)}\n />\n );\n});\n\nComposerCancel.displayName = \"ComposerCancel\";\n","export { MessageRoot as Root } from \"./MessageRoot\";\nexport { MessageIf as If } from \"./MessageIf\";\nexport { MessageContent as Content } from \"./MessageContent\";\nexport { MessageInProgress as InProgress } from \"./MessageInProgress\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype MessageRootProps = PrimitiveDivProps;\n\nexport const MessageRoot = forwardRef<MessageRootElement, MessageRootProps>(\n ({ onMouseEnter, onMouseLeave, ...rest }, ref) => {\n const { useMessage } = useMessageContext();\n const setIsHovering = useMessage((s) => s.setIsHovering);\n\n const handleMouseEnter = () => {\n setIsHovering(true);\n };\n const handleMouseLeave = () => {\n setIsHovering(false);\n };\n\n return (\n <Primitive.div\n {...rest}\n ref={ref}\n onMouseEnter={composeEventHandlers(onMouseEnter, handleMouseEnter)}\n onMouseLeave={composeEventHandlers(onMouseLeave, handleMouseLeave)}\n />\n );\n },\n);\n\nMessageRoot.displayName = \"MessageRoot\";\n","\"use client\";\n\nimport { type ComponentType, type FC, memo } from \"react\";\nimport { useAssistantContext, useContentPartContext } from \"../../context\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { ContentPartProvider } from \"../../context/providers/ContentPartProvider\";\nimport { ContentPartDisplay } from \"../contentPart/ContentPartDisplay\";\nimport { ContentPartInProgressIndicator } from \"../contentPart/ContentPartInProgressIndicator\";\nimport { ContentPartText } from \"../contentPart/ContentPartText\";\nimport type {\n ImageContentPartComponent,\n TextContentPartComponent,\n ToolCallContentPartComponent,\n ToolCallContentPartProps,\n UIContentPartComponent,\n} from \"./ContentPartComponentTypes\";\n\nexport type MessageContentProps = {\n components?: {\n Text?: TextContentPartComponent;\n Image?: ImageContentPartComponent;\n UI?: UIContentPartComponent;\n tools?: {\n by_name?: Record<string, ToolCallContentPartComponent>;\n Fallback?: ComponentType<ToolCallContentPartProps>;\n };\n };\n};\n\nconst defaultComponents = {\n Text: () => (\n <>\n <ContentPartText />\n <ContentPartInProgressIndicator />\n </>\n ),\n Image: () => null,\n UI: () => <ContentPartDisplay />,\n tools: {\n Fallback: (props) => {\n const { useToolRenderers } = useAssistantContext();\n const Render = useToolRenderers((s) =>\n s.getToolRenderer(props.part.toolName),\n );\n if (!Render) return null;\n return <Render {...props} />;\n },\n },\n} satisfies MessageContentProps[\"components\"];\n\ntype MessageContentPartComponentProps = {\n components: MessageContentProps[\"components\"];\n};\n\nconst MessageContentPartComponent: FC<MessageContentPartComponentProps> = ({\n components: {\n Text = defaultComponents.Text,\n Image = defaultComponents.Image,\n UI = defaultComponents.UI,\n tools: { by_name = {}, Fallback = defaultComponents.tools.Fallback } = {},\n } = {},\n}) => {\n const { useContentPart } = useContentPartContext();\n const { part, status } = useContentPart();\n\n const type = part.type;\n switch (type) {\n case \"text\":\n return <Text part={part} status={status} />;\n\n case \"image\":\n // eslint-disable-next-line jsx-a11y/alt-text -- not a real image\n return <Image part={part} status={status} />;\n\n case \"ui\":\n return <UI part={part} status={status} />;\n\n case \"tool-call\": {\n const Tool = by_name[part.toolName] || Fallback;\n return <Tool part={part} status={status} />;\n }\n default:\n throw new Error(`Unknown content part type: ${type}`);\n }\n};\n\ntype MessageContentPartProps = {\n partIndex: number;\n components: MessageContentProps[\"components\"];\n};\n\nconst MessageContentPartImpl: FC<MessageContentPartProps> = ({\n partIndex,\n components,\n}) => {\n return (\n <ContentPartProvider partIndex={partIndex}>\n <MessageContentPartComponent components={components} />\n </ContentPartProvider>\n );\n};\n\nconst MessageContentPart = memo(\n MessageContentPartImpl,\n (prev, next) =>\n prev.partIndex === next.partIndex &&\n prev.components?.Text === next.components?.Text &&\n prev.components?.Image === next.components?.Image &&\n prev.components?.UI === next.components?.UI &&\n prev.components?.tools === next.components?.tools,\n);\n\nexport const MessageContent: FC<MessageContentProps> = ({ components }) => {\n const { useMessage } = useMessageContext();\n\n const contentLength = useMessage((s) => s.message.content.length);\n\n return new Array(contentLength).fill(null).map((_, idx) => {\n const partIndex = idx; // use the index as key, as message is generally append only\n return (\n <MessageContentPart\n key={partIndex}\n partIndex={partIndex}\n components={components}\n />\n );\n });\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { AssistantModelConfigState } from \"./stores/AssistantModelConfig\";\nimport type { AssistantToolRenderersState } from \"./stores/AssistantToolRenderers\";\n\nexport type AssistantContextValue = {\n useModelConfig: UseBoundStore<StoreApi<AssistantModelConfigState>>;\n useToolRenderers: UseBoundStore<StoreApi<AssistantToolRenderersState>>;\n};\n\nexport const AssistantContext = createContext<AssistantContextValue | null>(\n null,\n);\n\nexport const useAssistantContext = (): AssistantContextValue => {\n const context = useContext(AssistantContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ContentPartState } from \"./stores/ContentPart\";\n\nexport type ContentPartContextValue = {\n useContentPart: UseBoundStore<StoreApi<ContentPartState>>;\n};\n\nexport const ContentPartContext = createContext<ContentPartContextValue | null>(\n null,\n);\n\nexport const useContentPartContext = (): ContentPartContextValue => {\n const context = useContext(ContentPartContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >.\",\n );\n return context;\n};\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport { ContentPartContext } from \"../ContentPartContext\";\nimport type { ContentPartContextValue } from \"../ContentPartContext\";\nimport { useMessageContext } from \"../MessageContext\";\nimport type { MessageState } from \"../stores\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\n\ntype ContentPartProviderProps = PropsWithChildren<{\n partIndex: number;\n}>;\n\nconst syncContentPart = (\n { message }: MessageState,\n useContentPart: ContentPartContextValue[\"useContentPart\"],\n partIndex: number,\n) => {\n const part = message.content[partIndex];\n if (!part) return;\n\n const messageStatus = message.role === \"assistant\" ? message.status : \"done\";\n const status =\n partIndex === message.content.length - 1 ? messageStatus : \"done\";\n\n // if the content part is the same, don't update\n const currentState = useContentPart.getState();\n if (currentState.part === part && currentState.status === status) return;\n\n // sync useContentPart\n useContentPart.setState({ part, status });\n};\n\nconst useContentPartContext = (partIndex: number) => {\n const { useMessage } = useMessageContext();\n const [context] = useState<ContentPartContextValue>(() => {\n const useContentPart = create<ContentPartState>(() => ({\n part: { type: \"text\", text: \"\" },\n status: \"done\",\n }));\n\n syncContentPart(useMessage.getState(), useContentPart, partIndex);\n\n return { useContentPart };\n });\n\n useEffect(() => {\n return useMessage.subscribe((message) => {\n syncContentPart(message, context.useContentPart, partIndex);\n });\n }, [context, useMessage, partIndex]);\n\n return context;\n};\n\nexport const ContentPartProvider: FC<ContentPartProviderProps> = ({\n partIndex,\n children,\n}) => {\n const context = useContentPartContext(partIndex);\n\n return (\n <ContentPartContext.Provider value={context}>\n {children}\n </ContentPartContext.Provider>\n );\n};\n","import type { FC } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\n\nexport const ContentPartDisplay: FC = () => {\n const { useContentPart } = useContentPartContext();\n\n const display = useContentPart((c) => {\n if (c.part.type !== \"ui\")\n throw new Error(\n \"ContentPartDisplay can only be used inside ui content parts.\",\n );\n\n return c.part.display;\n });\n\n return display ?? null;\n};\n","import type { FC } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const ContentPartInProgressIndicator: FC = () => {\n const { useMessage } = useMessageContext();\n const { useContentPart } = useContentPartContext();\n\n const indicator = useCombinedStore([useMessage, useContentPart], (m, c) =>\n c.status === \"in_progress\" ? m.inProgressIndicator : null,\n );\n return indicator;\n};\n","import { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\n\ntype ContentPartTextElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\ntype ContentPartTextProps = Omit<PrimitiveSpanProps, \"children\">;\n\nexport const ContentPartText = forwardRef<\n ContentPartTextElement,\n ContentPartTextProps\n>((props, forwardedRef) => {\n const { useContentPart } = useContentPartContext();\n\n const text = useContentPart((c) => {\n if (c.part.type !== \"text\")\n throw new Error(\n \"ContentPartText can only be used inside text content parts.\",\n );\n\n return c.part.text;\n });\n\n return (\n <Primitive.span {...props} ref={forwardedRef}>\n {text}\n </Primitive.span>\n );\n});\n\nContentPartText.displayName = \"ContentPartText\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport {\n type ElementRef,\n forwardRef,\n useMemo,\n ComponentPropsWithoutRef,\n} from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageInProgressElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\ntype MessageInProgressProps = PrimitiveSpanProps;\n\nexport const MessageInProgress = forwardRef<\n MessageInProgressElement,\n MessageInProgressProps\n>((props, ref) => {\n const { useMessage } = useMessageContext();\n\n useMemo(() => {\n useMessage\n .getState()\n .setInProgressIndicator(<Primitive.span {...props} ref={ref} />);\n }, [useMessage, props, ref]);\n\n return null;\n});\n\nMessageInProgress.displayName = \"MessageInProgress\";\n","export { BranchPickerNext as Next } from \"./BranchPickerNext\";\nexport { BranchPickerPrevious as Previous } from \"./BranchPickerPrevious\";\nexport { BranchPickerCount as Count } from \"./BranchPickerCount\";\nexport { BranchPickerNumber as Number } from \"./BranchPickerNumber\";\nexport { BranchPickerRoot as Root } from \"./BranchPickerRoot\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\n\ntype ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);\n\nexport const createActionButton = <TProps,>(\n useActionButton: ActionButtonCallback<TProps>,\n) => {\n type PrimitiveButtonElement = ElementRef<typeof Primitive.button>;\n type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\n const ActionButton = forwardRef<\n PrimitiveButtonElement,\n PrimitiveButtonProps & TProps\n >((props, forwardedRef) => {\n const onClick = useActionButton(props);\n\n return (\n <Primitive.button\n type=\"button\"\n disabled={!onClick}\n {...props}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, onClick ?? undefined)}\n />\n );\n });\n\n ActionButton.displayName = \"ActionButton\";\n\n return ActionButton;\n};\n","\"use client\";\n\nimport { useGoToNextBranch } from \"../../actions/useGoToNextBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerNext = createActionButton(useGoToNextBranch);\n","\"use client\";\n\nimport { useGoToPreviousBranch } from \"../../actions/useGoToPreviousBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerPrevious = createActionButton(useGoToPreviousBranch);\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerCount: FC = () => {\n const { useMessage } = useMessageContext();\n const branchCount = useMessage((s) => s.branches.length);\n return <>{branchCount}</>;\n};\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerNumber: FC = () => {\n const { useMessage } = useMessageContext();\n const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));\n return <>{branchIdx + 1}</>;\n};\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { If } from \"../message\";\n\ntype BranchPickerRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype BranchPickerRootProps = PrimitiveDivProps & {\n hideWhenSingleBranch?: boolean;\n};\n\nexport const BranchPickerRoot = forwardRef<\n BranchPickerRootElement,\n BranchPickerRootProps\n>(({ hideWhenSingleBranch, ...rest }, ref) => {\n return (\n <If hasBranches={hideWhenSingleBranch ? true : undefined}>\n <Primitive.div {...rest} ref={ref} />\n </If>\n );\n});\n\nBranchPickerRoot.displayName = \"BranchPickerRoot\";\n","export { ActionBarRoot as Root } from \"./ActionBarRoot\";\nexport { ActionBarCopy as Copy } from \"./ActionBarCopy\";\nexport { ActionBarReload as Reload } from \"./ActionBarReload\";\nexport { ActionBarEdit as Edit } from \"./ActionBarEdit\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype ActionBarRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nenum HideAndFloatStatus {\n Hidden = \"hidden\",\n Floating = \"floating\",\n Normal = \"normal\",\n}\n\nexport type ActionBarRootProps = PrimitiveDivProps & {\n hideWhenRunning?: boolean;\n autohide?: \"always\" | \"not-last\" | \"never\";\n autohideFloat?: \"always\" | \"single-branch\" | \"never\";\n};\n\nexport const ActionBarRoot = forwardRef<\n ActionBarRootElement,\n ActionBarRootProps\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const { useThread } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const hideAndfloatStatus = useCombinedStore(\n [useThread, useMessage],\n (t, m) => {\n if (hideWhenRunning && t.isRunning) return HideAndFloatStatus.Hidden;\n\n const autohideEnabled =\n autohide === \"always\" || (autohide === \"not-last\" && !m.isLast);\n\n // normal status\n if (!autohideEnabled) return HideAndFloatStatus.Normal;\n\n // hidden status\n if (!m.isHovering) return HideAndFloatStatus.Hidden;\n\n // floating status\n if (\n autohideFloat === \"always\" ||\n (autohideFloat === \"single-branch\" && m.branches.length <= 1)\n )\n return HideAndFloatStatus.Floating;\n\n return HideAndFloatStatus.Normal;\n },\n );\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <Primitive.div\n {...(hideAndfloatStatus === HideAndFloatStatus.Floating\n ? { \"data-floating\": \"true\" }\n : null)}\n {...rest}\n ref={ref}\n />\n );\n});\n\nActionBarRoot.displayName = \"ActionBarRoot\";\n","\"use client\";\n\nimport { useCopyMessage } from \"../../actions/useCopyMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\ntype ActionBarCopyProps = {\n copiedDuration?: number;\n};\n\nexport const ActionBarCopy =\n createActionButton<ActionBarCopyProps>(useCopyMessage);\n","\"use client\";\n\nimport { useReloadMessage } from \"../../actions/useReloadMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarReload = createActionButton(useReloadMessage);\n","\"use client\";\n\nimport { useBeginMessageEdit } from \"../../actions/useBeginMessageEdit\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarEdit = createActionButton(useBeginMessageEdit);\n","export { ContentPartInProgressIndicator as InProgressIndicator } from \"./ContentPartInProgressIndicator\";\nexport { ContentPartText as Text } from \"./ContentPartText\";\nexport { ContentPartImage as Image } from \"./ContentPartImage\";\nexport { ContentPartDisplay as Display } from \"./ContentPartDisplay\";\n","import { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\n\ntype ContentPartImageElement = ElementRef<typeof Primitive.img>;\ntype PrimitiveImageProps = ComponentPropsWithoutRef<typeof Primitive.img>;\n\ntype ContentPartImageProps = PrimitiveImageProps;\n\nexport const ContentPartImage = forwardRef<\n ContentPartImageElement,\n ContentPartImageProps\n>((props, forwardedRef) => {\n const { useContentPart } = useContentPartContext();\n\n const image = useContentPart((c) => {\n if (c.part.type !== \"image\")\n throw new Error(\n \"ContentPartImage can only be used inside image content parts.\",\n );\n\n return c.part.image;\n });\n\n return <Primitive.img src={image} {...props} ref={forwardedRef} />;\n});\n\nContentPartImage.displayName = \"ContentPartImage\";\n","\"use client\";\n\nimport { useInsertionEffect, useState } from \"react\";\nimport type { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { LocalRuntime } from \"./LocalRuntime\";\n\nexport const useLocalRuntime = (adapter: ChatModelAdapter) => {\n const [runtime] = useState(() => new LocalRuntime(adapter));\n\n useInsertionEffect(() => {\n runtime.adapter = adapter;\n });\n\n return runtime;\n};\n","\"use client\";\nimport type { z } from \"zod\";\n\ntype ToolExecuteFunction<TArgs, TResult> = (\n args: TArgs,\n) => TResult | Promise<TResult>;\n\nexport type Tool<TArgs = unknown, TResult = unknown> = {\n description?: string;\n parameters: z.ZodSchema<TArgs>;\n execute: ToolExecuteFunction<TArgs, TResult>;\n};\n\nexport type ModelConfig = {\n priority?: number;\n system?: string;\n tools?: Record<string, Tool<any, any>>;\n};\n\nexport type ModelConfigProvider = () => ModelConfig;\n\nexport const mergeModelConfigs = (\n configSet: Set<ModelConfigProvider>,\n): ModelConfig => {\n const configs = Array.from(configSet)\n .map((c) => c())\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n\n return configs.reduce((acc, config) => {\n if (config.system) {\n if (acc.system) {\n // TODO should the separator be configurable?\n acc.system += `\\n\\n${config.system}`;\n } else {\n acc.system = config.system;\n }\n }\n if (config.tools) {\n for (const [name, tool] of Object.entries(config.tools)) {\n if (acc.tools?.[name]) {\n throw new Error(\n `You tried to define a tool with the name ${name}, but it already exists.`,\n );\n }\n if (!acc.tools) acc.tools = {};\n acc.tools[name] = tool;\n }\n }\n return acc;\n }, {} as ModelConfig);\n};\n","import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n\nconst optimisticPrefix = \"__optimistic__\";\nexport const generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;\nexport const isOptimisticId = (id: string) => id.startsWith(optimisticPrefix);\n","import type { ThreadMessage } from \"../../utils/AssistantTypes\";\nimport { generateOptimisticId } from \"./idUtils\";\n\ntype RepositoryParent = {\n children: string[];\n};\n\ntype RepositoryMessage = RepositoryParent & {\n prev: RepositoryMessage | null;\n current: ThreadMessage;\n next: RepositoryMessage | null;\n level: number;\n};\n\nconst findHead = (message: RepositoryMessage): RepositoryMessage => {\n if (message.next) return findHead(message.next);\n return message;\n};\n\nexport class MessageRepository {\n private messages = new Map<string, RepositoryMessage>(); // message_id -> item\n private head: RepositoryMessage | null = null;\n private root: RepositoryParent = {\n children: [],\n };\n\n private performOp(\n newParent: RepositoryMessage | null,\n child: RepositoryMessage,\n operation: \"cut\" | \"link\" | \"relink\",\n ) {\n const parentOrRoot = child.prev ?? this.root;\n const newParentOrRoot = newParent ?? this.root;\n\n if (operation === \"relink\" && parentOrRoot === newParentOrRoot) return;\n\n // cut\n if (operation !== \"link\") {\n parentOrRoot.children = parentOrRoot.children.filter(\n (m) => m !== child.current.id,\n );\n\n if (child.prev?.next === child) {\n const fallbackId = child.prev.children.at(-1);\n const fallback = fallbackId ? this.messages.get(fallbackId) : null;\n if (fallback === undefined) {\n throw new Error(\n \"MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui.\",\n );\n }\n child.prev.next = fallback;\n }\n }\n\n // link\n if (operation !== \"cut\") {\n newParentOrRoot.children = [\n ...newParentOrRoot.children,\n child.current.id,\n ];\n\n if (\n newParent &&\n (findHead(child) === this.head || newParent.next === null)\n ) {\n newParent.next = child;\n }\n\n child.prev = newParent;\n }\n }\n getMessages() {\n const messages = new Array<ThreadMessage>(this.head?.level ?? 0);\n for (let current = this.head; current; current = current.prev) {\n messages[current.level] = current.current;\n }\n return messages;\n }\n\n addOrUpdateMessage(parentId: string | null, message: ThreadMessage) {\n const existingItem = this.messages.get(message.id);\n const prev = parentId ? this.messages.get(parentId) : null;\n if (prev === undefined)\n throw new Error(\n \"MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n // update existing message\n if (existingItem) {\n existingItem.current = message;\n this.performOp(prev, existingItem, \"relink\");\n return;\n }\n\n // create a new message\n const newItem: RepositoryMessage = {\n prev,\n current: message,\n next: null,\n children: [],\n level: prev ? prev.level + 1 : 0,\n };\n\n this.messages.set(message.id, newItem);\n this.performOp(prev, newItem, \"link\");\n\n if (this.head === prev) {\n this.head = newItem;\n }\n }\n\n appendOptimisticMessage(\n parentId: string | null,\n message: Omit<ThreadMessage, \"id\" | \"createdAt\">,\n ) {\n let optimisticId: string;\n do {\n optimisticId = generateOptimisticId();\n } while (this.messages.has(optimisticId));\n\n this.addOrUpdateMessage(parentId, {\n ...message,\n id: optimisticId,\n createdAt: new Date(),\n ...(message.role === \"assistant\" ? { status: \"in_progress\" } : undefined),\n } as ThreadMessage);\n\n return optimisticId;\n }\n\n deleteMessage(messageId: string, replacementId?: string | null | undefined) {\n const message = this.messages.get(messageId);\n\n if (!message)\n throw new Error(\n \"MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n const replacement =\n replacementId === undefined\n ? message.prev // if no replacementId is provided, use the parent\n : replacementId === null\n ? null\n : this.messages.get(replacementId);\n if (replacement === undefined)\n throw new Error(\n \"MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui.\",\n );\n\n for (const child of message.children) {\n const childMessage = this.messages.get(child);\n if (!childMessage)\n throw new Error(\n \"MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui.\",\n );\n this.performOp(replacement, childMessage, \"relink\");\n }\n\n this.performOp(null, message, \"cut\");\n this.messages.delete(messageId);\n\n if (this.head === message) {\n this.head = replacement ? findHead(replacement) : null;\n }\n }\n\n getBranches(messageId: string) {\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n const { children } = message.prev ?? this.root;\n return children;\n }\n\n switchToBranch(messageId: string) {\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui.\",\n );\n\n if (message.prev) {\n message.prev.next = message;\n }\n\n this.head = findHead(message);\n }\n\n resetHead(messageId: string | null) {\n if (messageId === null) {\n this.head = null;\n return;\n }\n\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui.\",\n );\n\n this.head = message;\n for (\n let current: RepositoryMessage | null = message;\n current;\n current = current.prev\n ) {\n if (current.prev) {\n current.prev.next = current;\n }\n }\n }\n}\n","import type {\n AppendMessage,\n AssistantMessage,\n UserMessage,\n} from \"../../utils/AssistantTypes\";\nimport {\n type ModelConfigProvider,\n mergeModelConfigs,\n} from \"../../utils/ModelConfigTypes\";\nimport type { Unsubscribe } from \"../../utils/Unsubscribe\";\nimport type { AssistantRuntime } from \"../core/AssistantRuntime\";\nimport { MessageRepository } from \"../utils/MessageRepository\";\nimport { generateId } from \"../utils/idUtils\";\nimport type { ChatModelAdapter, ChatModelRunResult } from \"./ChatModelAdapter\";\n\nexport class LocalRuntime implements AssistantRuntime {\n private _subscriptions = new Set<() => void>();\n private _configProviders = new Set<ModelConfigProvider>();\n\n private abortController: AbortController | null = null;\n private repository = new MessageRepository();\n\n public get messages() {\n return this.repository.getMessages();\n }\n public get isRunning() {\n return this.abortController != null;\n }\n\n constructor(public adapter: ChatModelAdapter) {}\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this.notifySubscribers();\n }\n\n public async append(message: AppendMessage): Promise<void> {\n // add user message\n const userMessageId = generateId();\n const userMessage: UserMessage = {\n id: userMessageId,\n role: \"user\",\n content: message.content,\n createdAt: new Date(),\n };\n this.repository.addOrUpdateMessage(message.parentId, userMessage);\n\n await this.startRun(userMessageId);\n }\n\n public async startRun(parentId: string | null): Promise<void> {\n const id = generateId();\n\n this.repository.resetHead(parentId);\n const messages = this.repository.getMessages();\n\n // add assistant message\n const message: AssistantMessage = {\n id,\n role: \"assistant\",\n status: \"in_progress\",\n content: [{ type: \"text\", text: \"\" }],\n createdAt: new Date(),\n };\n this.repository.addOrUpdateMessage(parentId, { ...message });\n\n // abort existing run\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.notifySubscribers();\n\n try {\n const updateHandler = ({ content }: ChatModelRunResult) => {\n message.content = content;\n this.repository.addOrUpdateMessage(parentId, { ...message });\n this.notifySubscribers();\n };\n const result = await this.adapter.run({\n messages,\n abortSignal: this.abortController.signal,\n config: mergeModelConfigs(this._configProviders),\n onUpdate: updateHandler,\n });\n updateHandler(result);\n\n message.status = \"done\";\n this.repository.addOrUpdateMessage(parentId, { ...message });\n } catch (e) {\n message.status = \"error\";\n this.repository.addOrUpdateMessage(parentId, { ...message });\n console.error(e);\n } finally {\n this.abortController = null;\n this.notifySubscribers();\n }\n }\n\n cancelRun(): void {\n if (!this.abortController) return;\n\n this.abortController.abort();\n this.abortController = null;\n this.notifySubscribers();\n }\n\n private notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n this._configProviders.add(provider);\n return () => this._configProviders.delete(provider);\n }\n}\n","import type { FC, PropsWithChildren } from \"react\";\nimport { memo } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime/core/AssistantRuntime\";\nimport { AssistantProvider } from \"./AssistantProvider\";\n\ntype AssistantRuntimeProviderProps = {\n runtime: AssistantRuntime;\n};\n\nconst AssistantRuntimeProviderImpl: FC<\n PropsWithChildren<AssistantRuntimeProviderProps>\n> = ({ children, runtime }) => {\n return <AssistantProvider runtime={runtime}>{children}</AssistantProvider>;\n};\n\nexport const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime\";\nimport { AssistantContext } from \"../AssistantContext\";\nimport { makeAssistantModelConfigStore } from \"../stores/AssistantModelConfig\";\nimport { makeAssistantToolRenderersStore } from \"../stores/AssistantToolRenderers\";\nimport { ThreadProvider } from \"./ThreadProvider\";\n\ntype AssistantProviderProps = {\n runtime: AssistantRuntime;\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<AssistantProviderProps>\n> = ({ children, runtime }) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [context] = useState(() => {\n const useModelConfig = makeAssistantModelConfigStore();\n const useToolRenderers = makeAssistantToolRenderersStore();\n\n return { useModelConfig, useToolRenderers };\n });\n\n const getModelCOnfig = context.useModelConfig((c) => c.getModelConfig);\n useEffect(() => {\n return runtime.registerModelConfigProvider(getModelCOnfig);\n }, [runtime, getModelCOnfig]);\n\n return (\n <AssistantContext.Provider value={context}>\n <ThreadProvider runtime={runtime}>{children}</ThreadProvider>\n </AssistantContext.Provider>\n );\n};\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { ModelConfigProvider } from \"../../utils/ModelConfigTypes\";\nimport { ProxyConfigProvider } from \"../../utils/ProxyConfigProvider\";\n\nexport type AssistantModelConfigState = {\n getModelConfig: ModelConfigProvider;\n registerModelConfigProvider: (provider: ModelConfigProvider) => () => void;\n};\n\nexport const makeAssistantModelConfigStore = () =>\n create<AssistantModelConfigState>(() => {\n const proxy = new ProxyConfigProvider();\n\n return {\n getModelConfig: () => {\n return proxy.getModelConfig();\n },\n registerModelConfigProvider: (provider: ModelConfigProvider) => {\n return proxy.registerModelConfigProvider(provider);\n },\n } satisfies AssistantModelConfigState;\n });\n","\"use client\";\nimport {\n type ModelConfigProvider,\n mergeModelConfigs,\n} from \"./ModelConfigTypes\";\n\nexport class ProxyConfigProvider {\n private _providers = new Set<ModelConfigProvider>();\n\n getModelConfig() {\n return mergeModelConfigs(this._providers);\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n this._providers.add(provider);\n return () => {\n this._providers.delete(provider);\n };\n }\n}\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { ToolCallContentPartComponent } from \"../../primitives/message/ContentPartComponentTypes\";\n\nexport type AssistantToolRenderersState = {\n getToolRenderer: (name: string) => ToolCallContentPartComponent | null;\n setToolRenderer: (\n name: string,\n render: ToolCallContentPartComponent,\n ) => () => void;\n};\n\nexport const makeAssistantToolRenderersStore = () =>\n create<AssistantToolRenderersState>((set) => {\n const renderers = new Map<string, ToolCallContentPartComponent[]>();\n\n return {\n getToolRenderer: (name) => {\n const arr = renderers.get(name);\n const last = arr?.at(-1);\n if (last) return last;\n return null;\n },\n setToolRenderer: (name, render) => {\n let arr = renderers.get(name);\n if (!arr) {\n arr = [];\n renderers.set(name, arr);\n }\n arr.push(render);\n set({}); // notify the store listeners\n\n return () => {\n const index = arr.indexOf(render);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n set({}); // notify the store listeners\n };\n },\n } satisfies AssistantToolRenderersState;\n });\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { ReactThreadRuntime } from \"../../runtime/core/ReactThreadRuntime\";\nimport type { ThreadRuntime } from \"../../runtime/core/ThreadRuntime\";\nimport type { ThreadContextValue } from \"../ThreadContext\";\nimport { ThreadContext } from \"../ThreadContext\";\nimport { makeComposerStore } from \"../stores/Composer\";\nimport { makeThreadStore } from \"../stores/Thread\";\nimport { makeThreadViewportStore } from \"../stores/ThreadViewport\";\n\ntype ThreadProviderProps = {\n runtime: ThreadRuntime;\n};\n\nexport const ThreadProvider: FC<PropsWithChildren<ThreadProviderProps>> = ({\n children,\n runtime,\n}) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [{ context, onRuntimeUpdate }] = useState(() => {\n const { useThread, onRuntimeUpdate } = makeThreadStore(runtimeRef);\n const useViewport = makeThreadViewportStore();\n const useComposer = makeComposerStore(useThread);\n\n return {\n context: {\n useViewport,\n useThread,\n useComposer,\n } satisfies ThreadContextValue,\n onRuntimeUpdate,\n };\n });\n\n useEffect(() => {\n // whenever the runtime changes\n onRuntimeUpdate();\n\n // subscribe to runtime updates\n return runtime.subscribe(onRuntimeUpdate);\n }, [onRuntimeUpdate, runtime]);\n\n const RuntimeSynchronizer = (runtime as ReactThreadRuntime)\n .unstable_synchronizer;\n\n return (\n <ThreadContext.Provider value={context}>\n {RuntimeSynchronizer && <RuntimeSynchronizer />}\n {children}\n </ThreadContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport type { ThreadState } from \"./Thread\";\n\nexport type ComposerState = BaseComposerState &\n Readonly<{\n isEditing: true;\n\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeComposerStore = (\n useThread: StoreApi<ThreadState>,\n): UseBoundStore<StoreApi<ComposerState>> =>\n create<ComposerState>()((set, get, store) => {\n return {\n ...makeBaseComposer(set, get, store),\n\n isEditing: true,\n\n send: () => {\n const { setValue, value } = get();\n setValue(\"\");\n\n useThread.getState().append({\n parentId: useThread.getState().messages.at(-1)?.id ?? null,\n content: [{ type: \"text\", text: value }],\n });\n },\n cancel: () => {\n const thread = useThread.getState();\n if (!thread.isRunning) return false;\n\n useThread.getState().cancelRun();\n return true;\n },\n };\n });\n","import type { MutableRefObject } from \"react\";\nimport { create } from \"zustand\";\nimport type { AppendMessage, ThreadMessage } from \"../../utils/AssistantTypes\";\n\nexport type ThreadState = {\n messages: readonly ThreadMessage[];\n isRunning: boolean;\n\n getBranches: (messageId: string) => readonly string[];\n switchToBranch: (branchId: string) => void;\n\n append: (message: AppendMessage) => void;\n startRun: (parentId: string | null) => void;\n cancelRun: () => void;\n};\n\nexport const makeThreadStore = (runtimeRef: MutableRefObject<ThreadState>) => {\n const useThread = create<ThreadState>(() => ({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n getBranches: (messageId) => runtimeRef.current.getBranches(messageId),\n switchToBranch: (branchId) => runtimeRef.current.switchToBranch(branchId),\n startRun: (parentId) => runtimeRef.current.startRun(parentId),\n append: (message) => runtimeRef.current.append(message),\n cancelRun: () => runtimeRef.current.cancelRun(),\n }));\n\n const onRuntimeUpdate = () => {\n useThread.setState({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n });\n };\n\n return {\n useThread,\n onRuntimeUpdate,\n };\n};\n","\"use client\";\nimport { create } from \"zustand\";\nimport type { Unsubscribe } from \"../../utils/Unsubscribe\";\n\nexport type ThreadViewportState = {\n isAtBottom: boolean;\n scrollToBottom: () => void;\n onScrollToBottom: (callback: () => void) => Unsubscribe;\n};\n\nexport const makeThreadViewportStore = () => {\n const scrollToBottomListeners = new Set<() => void>();\n\n return create<ThreadViewportState>(() => ({\n isAtBottom: true,\n scrollToBottom: () => {\n for (const listener of scrollToBottomListeners) {\n listener();\n }\n },\n onScrollToBottom: (callback) => {\n scrollToBottomListeners.add(callback);\n return () => {\n scrollToBottomListeners.delete(callback);\n };\n },\n }));\n};\n","export { ProxyConfigProvider } from \"./utils/ProxyConfigProvider\";\nexport { MessageRepository } from \"./runtime/utils/MessageRepository\";\n"],"mappings":"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","names":["import_react","import_react","import_react","c","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_react_primitive","import_react","import_react","import_react_use_callback_ref","import_react","import_jsx_runtime","import_react","import_react","import_zustand","import_jsx_runtime","useMessageContext","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_compose_refs","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_compose_refs","import_react","import_jsx_runtime","TextareaAutosize","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_react","import_react","import_react","import_react","import_zustand","import_jsx_runtime","useContentPartContext","import_react_primitive","import_react","import_jsx_runtime","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react","import_react","import_react","import_zustand","import_zustand","import_react","import_zustand","import_zustand","import_zustand","import_jsx_runtime","onRuntimeUpdate","import_jsx_runtime","import_jsx_runtime"]}