@superinterface/react 2.24.5 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/core/SuperinterfaceProvider/index.tsx","../src/lib/misc/merge/index.ts","../src/lib/misc/merge/customizer.ts","../src/contexts/core/SuperinterfaceContext/index.tsx","../src/lib/superinterfaceCloud/baseUrl.ts","../src/lib/threadIdCookies/options/get.ts","../src/lib/threadIdCookies/key.ts","../src/lib/threadIdCookies/options/set.ts","../src/lib/threadIdCookies/options/index.ts","../src/hooks/core/useSuperinterfaceContext/index.ts","../src/components/threads/Thread/Messages/index.tsx","../src/components/threads/Thread/Messages/Content/index.tsx","../src/hooks/messages/useMessages/index.tsx","../src/lib/threads/queryOptions/index.ts","../src/lib/threads/queryOptions/variableParams.ts","../src/lib/messages/messagesQueryOptions.ts","../src/hooks/messageGroups/useMessageGroups/index.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts","../src/lib/messages/order.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/newGroupItem.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/index.ts","../src/components/skeletons/MessagesSkeleton/index.tsx","../src/components/messageGroups/MessageGroupBase/index.tsx","../src/components/messageGroups/MessageGroupBase/Name.tsx","../src/hooks/toasts/useToasts/index.ts","../src/contexts/toasts/ToastsContext/index.ts","../src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx","../src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx","../src/contexts/assistants/AssistantAvatarContext/index.tsx","../src/contexts/assistants/AssistantNameContext/index.tsx","../src/components/messageGroups/MessageGroupBase/UserAvatar.tsx","../src/contexts/users/UserAvatarContext/index.tsx","../src/components/threads/Thread/Messages/Content/MessageGroup/Content/index.tsx","../src/components/threads/Thread/Message/index.tsx","../src/components/skeletons/StartingContentSkeleton/index.tsx","../src/components/runSteps/RunSteps/index.tsx","../src/contexts/components/ComponentsContext/index.tsx","../src/components/runSteps/RunStep/ToolCalls/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx","../src/contexts/functions/FunctionComponentsContext/index.tsx","../src/components/functions/FunctionBase/index.tsx","../src/components/toolCalls/ToolCallBase/index.tsx","../src/components/toolCalls/ToolCallBase/ToolCallTitle.tsx","../src/components/toolCalls/ToolCallBase/ToolCallIcon.tsx","../src/components/functions/FunctionBase/Content/index.tsx","../src/components/functions/FunctionBase/Content/lib/formattedJsonOrRaw.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/lib/title.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/Content.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/FileSearch.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fallback.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx","../src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx","../src/components/runSteps/RunStep/index.tsx","../src/hooks/messages/useIsMutatingMessage/index.ts","../src/contexts/messages/MessageContext/index.ts","../src/components/threads/Thread/Message/Provider.tsx","../src/components/threads/Thread/Message/TextContent.tsx","../src/hooks/markdown/useMarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/lib/components/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Link.tsx","../src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/OrderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/ListItem.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Code.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isVideoSrc.ts","../src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isAudioSrc.ts","../src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx","../src/components/media/PlayButton.tsx","../src/components/media/VolumeButton.tsx","../src/components/media/Time.tsx","../src/components/media/MediaContainer.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/Video/FullscreenButton.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/Audio/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/ImageComponent.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/AnnotationBase.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/FilePathAnnotation.tsx","../src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts","../src/lib/remark/remarkAnnotation.ts","../src/components/threads/Thread/Message/Attachments/index.tsx","../src/components/threads/Thread/Messages/Progress/index.tsx","../src/components/skeletons/StartingSkeleton/index.tsx","../src/hooks/messages/useLatestMessage/index.ts","../src/lib/optimistic/isOptimistic.ts","../src/components/threads/Thread/Messages/Root/index.tsx","../src/hooks/misc/useInfiniteScroll/index.tsx","../src/hooks/misc/useThrottledEffect/index.tsx","../src/components/threads/Thread/Messages/NextPageSkeleton.tsx","../src/components/threads/Thread/MessageForm/Submit/index.tsx","../src/hooks/messages/useMessageFormContext/index.ts","../src/contexts/messages/MessageFormContext/index.ts","../src/components/threads/Thread/MessageForm/Root/index.tsx","../src/hooks/messages/useCreateMessage/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts","../src/lib/optimistic/optimisticId.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/extendMessage.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageDelta.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCompleted.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunFailed.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepDelta.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCompleted.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunRequiresAction.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/body.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/index.ts","../src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts","../src/lib/errors/createMessageDefaultOnError.ts","../src/components/threads/Thread/MessageForm/Field/index.tsx","../src/components/threads/Thread/MessageForm/Field/Control.tsx","../src/hooks/misc/usePrevious.ts","../src/components/textareas/TextareaBase/index.tsx","../src/components/threads/Thread/MessageForm/Field/Files/Preview.tsx","../src/components/threads/Thread/MessageForm/Field/Files/Control.tsx","../src/hooks/files/useCreateFile/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/formData.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/index.ts","../src/components/threads/Thread/MessageForm/Field/Files/index.tsx","../src/components/threads/Thread/MessageForm/index.tsx","../src/components/threads/Thread/Root/index.tsx","../src/components/threads/Thread/Provider/index.tsx","../src/components/toasts/ToastsProvider/index.tsx","../src/components/toasts/ToastsProvider/CustomToast.tsx","../src/components/threads/Thread/index.tsx","../src/hooks/messages/useMessageContext/index.ts","../src/hooks/assistants/useAssistant/index.ts","../src/hooks/assistants/useAssistant/lib/queryOptions/index.ts","../src/hooks/assistants/useAssistant/lib/queryOptions/queryFn.ts","../src/components/threads/ThreadDialog/Provider/index.tsx","../src/contexts/threads/ThreadDialogContext/index.ts","../src/hooks/threads/useThreadDialogContext/index.ts","../src/components/threads/ThreadDialog/Root/index.tsx","../src/components/threads/ThreadDialog/Trigger/index.tsx","../src/components/threads/ThreadDialog/Trigger/Button.tsx","../src/components/threads/ThreadDialog/Content/index.tsx","../src/components/threads/ThreadDialog/Close/index.tsx","../src/components/threads/ThreadDialog/index.tsx","../src/components/threads/AudioThread/Root/index.tsx","../src/contexts/threads/AudioThreadContext/index.ts","../src/hooks/misc/usePermission/index.ts","../src/hooks/misc/usePermission/util.ts","../src/components/threads/AudioThread/Root/lib/blobToData.ts","../src/hooks/audioThreads/useStatus/index.ts","../src/hooks/audioThreads/useRecorder/index.ts","../src/hooks/misc/useInterval.ts","../src/hooks/audioThreads/useMessageAudio/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/input.ts","../src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts","../src/components/threads/AudioThread/Visualization/index.tsx","../src/hooks/threads/useAudioThreadContext/index.ts","../src/components/threads/AudioThread/BarsVisualizer/index.tsx","../src/components/threads/AudioThread/Status/StatusMessages.tsx","../src/components/threads/AudioThread/Status/index.tsx","../src/components/threads/AudioThread/Form/index.tsx","../src/components/threads/AudioThread/Form/MicIcon.tsx","../src/components/threads/AudioThread/Form/ActionButton/index.tsx","../src/components/threads/AudioThread/index.tsx","../src/components/threads/AudioThreadDialog/index.tsx","../src/components/suggestions/Suggestions/index.tsx","../src/components/suggestions/Suggestions/Content.tsx","../src/components/suggestions/Suggestions/Item.tsx","../src/components/markdown/MarkdownProvider/index.tsx","../src/components/avatars/Avatar.tsx","../src/components/imageAvatars/ImageAvatar/index.tsx","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/path.ts","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/host.ts","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/index.ts","../src/components/iconAvatars/IconAvatar.tsx","../src/lib/iconAvatars/iconAvatarComponents.ts","../src/components/components/ComponentsProvider.tsx","../src/hooks/components/useComponents.ts","../src/components/assistants/AssistantProvider/index.tsx","../src/components/assistants/AssistantProvider/Code.tsx"],"names":["Avatar","import_react","import_lodash","_","Cookies","import_js_cookie","baseUrl","import_themes","import_react_query","path","queryKey","import_radash","messages","import_jsx_runtime","MessageGroupBase","MessagesSkeleton","import_react_icons","title","Content","RadixLink","RadixStrong","Code","RadixCode","videoExtensions","VidstackPlayButton","value","VidstackFullscreenButton","import_base","flatMap","remarkGfm","getRemarkPlugins","Markdown","laterRunSteps","olderRunSteps","messageGroups","Root","Button","dayjs","key","import_zod","data","import_react_hook_form","TextareaBase","TextareaAutosize","import_dayjs","body","mutationFn","mutationOptions","Control","RadixContainer","Provider","Toast","queryOptions","tanstackQueryOptions","Messages","silenceStart","noiseStart","import_react_use_audio_player","input","nlp","visualizationAnalyser","RadixAvatar","components"],"mappings":"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","sourcesContent":["export { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nexport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport { Thread } from '@/components/threads/Thread'\nexport { useThreadContext } from '@/hooks/threads/useThreadContext'\nexport { useMessages } from '@/hooks/messages/useMessages'\nexport { useMessageContext } from '@/hooks/messages/useMessageContext'\nexport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nexport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nexport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\n\nexport { useAssistant } from '@/hooks/assistants/useAssistant'\n\nexport { ThreadDialog } from '@/components/threads/ThreadDialog'\nexport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nexport { AudioThreadDialog } from '@/components/threads/AudioThreadDialog'\nexport { AudioThread } from '@/components/threads/AudioThread'\nexport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nexport { MarkdownProvider } from '@/components/markdown/MarkdownProvider'\nexport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\nexport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nexport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\nexport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\nexport { Avatar } from '@/components/avatars/Avatar'\n\nexport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nexport { FunctionBase } from '@/components/functions/FunctionBase'\n\nexport { ComponentsProvider } from '@/components/components/ComponentsProvider'\nexport { useComponents } from '@/hooks/components/useComponents'\n\nexport { RunStep } from '@/components/runSteps/RunStep'\nexport { AssistantProvider } from '@/components/assistants/AssistantProvider'\n","'use client'\nimport { useRef } from 'react'\nimport { MessagesPage } from '@/types'\nimport {\n InfiniteData,\n UseInfiniteQueryOptions,\n UseMutationOptions,\n} from '@tanstack/react-query'\nimport { merge } from '@/lib/misc/merge'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { options } from '@/lib/threadIdCookies/options'\n\nexport type Args = {\n children: React.ReactNode\n baseUrl?: string\n variables?: {\n [key: string]: any\n }\n defaultOptions?: {\n queries?: UseInfiniteQueryOptions<InfiniteData<MessagesPage>>\n mutations?: UseMutationOptions\n }\n threadIdCookieOptions?: typeof options | null\n}\n\nexport const SuperinterfaceProvider = ({\n children,\n baseUrl,\n variables,\n defaultOptions,\n threadIdCookieOptions,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const createMessageAbortControllerRef = useRef<AbortController | null>(null)\n\n const value = merge(\n superinterfaceContext,\n {\n ...(baseUrl ? { baseUrl } : {}),\n ...(variables ? { variables } : {}),\n ...(defaultOptions ? { defaultOptions } : {}),\n ...(threadIdCookieOptions ? { threadIdCookieOptions } : {}),\n createMessageAbortControllerRef,\n }\n )\n\n return (\n <SuperinterfaceContext.Provider\n value={value}\n >\n {children}\n </SuperinterfaceContext.Provider>\n )\n}\n","import _ from 'lodash'\nimport { customizer } from './customizer'\n\n// @ts-ignore-next-line\nexport const merge = (obj, ...sources) =>\n _.mergeWith(_.cloneDeep(obj), ...sources, customizer)\n","import _ from 'lodash'\n\n// @ts-ignore-next-line\nexport const customizer = (objectValue, srcValue) => {\n if (!_.isArray(objectValue)) return\n\n return srcValue\n}\n","'use client'\nimport { createContext } from 'react'\nimport { baseUrl } from '@/lib/superinterfaceCloud/baseUrl'\nimport { options } from '@/lib/threadIdCookies/options'\n\nexport const SuperinterfaceContext = createContext<{\n baseUrl: string | null\n variables: Record<string, any>\n defaultOptions: {\n queries: Record<string, any>\n mutations: Record<string, any>\n }\n threadIdCookieOptions: typeof options | null\n createMessageAbortControllerRef: React.MutableRefObject<AbortController | null>\n}>({\n baseUrl,\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {},\n },\n threadIdCookieOptions: options,\n createMessageAbortControllerRef: { current: null },\n})\n","export const baseUrl = 'https://superinterface.ai/api/cloud'\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdCookies/key'\n\nexport const get = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n Cookies.get(key({ assistantId }))\n)\n","export const key = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n `superinterface-${assistantId}-threadId`\n)\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdCookies/key'\n\nexport const set = ({\n assistantId,\n threadId,\n}: {\n assistantId: string\n threadId: string\n}) => (\n Cookies.set(key({ assistantId }), threadId, {\n expires: 7,\n })\n)\n","import { get } from './get'\nimport { set } from './set'\n\nexport const options = {\n get,\n set,\n}\n","'use client'\nimport { useContext } from 'react'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\n\nexport const useSuperinterfaceContext = () => (\n useContext(SuperinterfaceContext)\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Content } from './Content'\nimport { Progress } from './Progress'\nimport { Root } from './Root'\nimport { NextPageSkeleton } from './NextPageSkeleton'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n children?: React.ReactNode\n style?: React.CSSProperties\n}\n\nexport const Messages = ({\n children,\n style = {},\n}: Args) => (\n <Root style={style}>\n <Flex\n flexShrink=\"0\"\n height=\"var(--space-3)\"\n />\n\n <Progress />\n\n {children}\n\n <Content />\n\n <NextPageSkeleton />\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n minHeight=\"var(--space-5)\"\n />\n </Root>\n)\n\nMessages.Root = Root\nMessages.Message = Message\nMessages.NextPageSkeleton = NextPageSkeleton\n","'use client'\nimport { useEffect } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useMessageGroups } from '@/hooks/messageGroups/useMessageGroups'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { MessageGroup } from './MessageGroup'\n\nexport const Content = () => {\n const {\n messages,\n isLoading,\n isLoadingError,\n } = useMessages()\n\n const { addToast } = useToasts()\n\n const { messageGroups } = useMessageGroups({\n messages,\n })\n\n useEffect(() => {\n if (isLoadingError) {\n addToast({ type: 'error', message: 'Could not load messages. Please try again.' })\n }\n }, [isLoadingError, addToast])\n\n if (isLoading || isLoadingError) {\n return (\n <MessagesSkeleton />\n )\n }\n\n return (\n <>\n {messageGroups.map((messageGroup: MessageGroupType) => (\n <MessageGroup\n key={messageGroup.id}\n messageGroup={messageGroup}\n />\n ))}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport {\n InfiniteData,\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { SerializedMessage, MessagesPage } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { messagesQueryOptions } from '@/lib/messages/messagesQueryOptions'\n\nconst messages = ({\n props,\n}: {\n props: {\n data: InfiniteData<MessagesPage> | undefined\n },\n}) => {\n if (!props.data) return []\n\n return props.data.pages.reduce<SerializedMessage[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n\n\nexport const useMessages = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props }),\n }), [props])\n}\n","import {\n useQueryClient,\n infiniteQueryOptions,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { MessagesPage } from '@/types'\nimport { variableParams } from './variableParams'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<[string, { [key: string]: any }]>\n pageParam?: string\n}\n\nexport const queryOptions = ({\n queryKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables]\n\n return infiniteQueryOptions<MessagesPage>({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey,\n }: QueryFunctionArgs) => {\n const [_key, variables] = queryKey\n const params = new URLSearchParams({\n ...(pageParam ? { pageParam } : {}),\n ...variableParams({ variables, superinterfaceContext }),\n })\n\n return fetch(`${superinterfaceContext.baseUrl}${path}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<MessagesPage>\n })\n },\n initialPageParam: undefined,\n getNextPageParam: (lastPage: MessagesPage) => {\n if (!lastPage.hasNextPage) return null\n\n return lastPage.lastId\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const variableParams = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdCookieOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdCookieOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['messages'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { useMemo } from 'react'\nimport { messageGroups as getMessageGroups } from './lib/messageGroups'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const useMessageGroups = ({\n messages,\n}: Args) => (\n useMemo(\n () => ({\n messageGroups: getMessageGroups({ messages }),\n }),\n [messages]\n )\n)\n","import _ from 'lodash'\nimport { last } from 'radash'\nimport { SerializedMessage, MessageGroup } from '@/types'\nimport { order } from '@/lib/messages/order'\nimport { newGroup } from './newGroup'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const messageGroups = ({\n messages,\n}: Args) =>\n _.reduce(\n order({ messages }),\n (groups: MessageGroup[], message: SerializedMessage) => {\n const group = last(groups)\n\n if (!group) return newGroup({ groups, message })\n\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message,\n })\n }\n\n return [\n ..._.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message],\n },\n ]\n },\n []\n )\n","import { sort } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const order = ({ messages }: Args) =>\n sort(messages, m => m.created_at, true)\n","import { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const newGroupItem = ({ message }: Args) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message],\n})\n","import { SerializedMessage, MessageGroup } from '@/types'\nimport { newGroupItem } from './newGroupItem'\n\ntype Args = {\n groups: MessageGroup[]\n message: SerializedMessage\n}\n\nexport const newGroup = ({ groups, message }: Args) => [\n ...groups,\n newGroupItem({\n message,\n }),\n]\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Avatar,\n Box,\n Skeleton,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\n\nexport const MessagesSkeleton = forwardRef(function MessagesSkeleton(_props, ref) {\n return (\n <MessageGroupBase ref={ref}>\n <Skeleton loading>\n <Avatar\n fallback={<Flex />}\n size=\"1\"\n />\n </Skeleton>\n\n <Box\n pb=\"3\"\n >\n <Name>\n <Skeleton\n loading\n style={{\n width: '128px',\n }}\n />\n </Name>\n\n <Skeleton\n loading\n style={{\n width: '256px',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n </Box>\n </MessageGroupBase>\n )\n})\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Container,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const MessageGroupBase = forwardRef(function MessageGroupBase({\n children,\n}: Args, ref: React.Ref<HTMLDivElement>) {\n return (\n <Container\n ref={ref}\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n flexShrink=\"0\"\n gap=\"3\"\n >\n {children}\n </Flex>\n </Container>\n )\n})\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Name = ({\n children,\n}: Args) => (\n <Flex\n align=\"center\"\n height=\"var(--space-5)\"\n >\n <Text\n size=\"2\"\n weight=\"bold\"\n >\n {children}\n </Text>\n </Flex>\n)\n","import { useContext } from 'react'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\n\nexport const useToasts = () => (\n useContext(ToastsContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { Toast } from '@/types'\n\nexport const ToastsContext = createContext<{\n toasts: Toast[]\n addToast: (toast: Toast) => void\n}>({\n toasts: [],\n addToast: () => {},\n})\n","'use client'\nimport { useContext } from 'react'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { UserAvatar } from '@/components/messageGroups/MessageGroupBase/UserAvatar'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { Content } from './Content'\n\ntype Args = {\n messageGroup: MessageGroupType\n}\n\nexport const MessageGroup = ({\n messageGroup,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n {messageGroup.role === 'user' ? (\n <UserAvatar />\n ) : (\n <AssistantAvatar />\n )}\n\n <Box flexGrow=\"1\">\n <Name>\n {messageGroup.role === 'user' ? 'You' : assistantNameContext}\n </Name>\n\n <Content\n messageGroup={messageGroup}\n />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\n\nexport const AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext(AssistantAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {AssistantAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n LightningBoltIcon,\n} from '@radix-ui/react-icons'\n\nexport const AssistantAvatarContext = createContext(\n <Avatar\n fallback={<LightningBoltIcon />}\n size=\"1\"\n />\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const AssistantNameContext = createContext('Assistant')\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\n\nexport const UserAvatar = () => {\n const UserAvatarContextValue = useContext(UserAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {UserAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n PersonIcon,\n} from '@radix-ui/react-icons'\n\nexport const UserAvatarContext = createContext(\n <Avatar\n fallback={<PersonIcon />}\n size=\"1\"\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { MessageGroup } from '@/types'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n messageGroup: MessageGroup\n}\n\nexport const Content = ({\n messageGroup,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {messageGroup.messages.map((message) => (\n <Message\n key={message.id}\n message={message}\n />\n ))}\n </Flex>\n)\n","import _ from 'lodash'\nimport { useMemo, Fragment } from 'react'\nimport { isEmpty } from 'radash'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { SerializedMessage } from '@/types'\nimport { RunSteps } from '@/components/runSteps/RunSteps'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { Provider } from './Provider'\nimport { TextContent } from './TextContent'\nimport { Attachments } from './Attachments'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const Message = ({\n message,\n}: Args) => {\n const [olderRunSteps, laterRunSteps] = useMemo(() => {\n if (!message.runSteps.length) return [[], []]\n\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== 'message_creation') return\n\n return runStep.step_details.message_creation.message_id === message.id\n })\n\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0\n }\n const laterRunSteps = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex)\n\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n\n let olderRunSteps\n\n if (prevRunStepIndex === -1) {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1)\n } else {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex)\n }\n\n return [olderRunSteps, laterRunSteps]\n }, [message])\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isInProgress = useMemo(() => {\n if (!isMutatingMessage) return false\n if (message.status === 'in_progress') return true\n\n return message.runSteps.some((rs) => rs.status === 'in_progress')\n }, [message])\n\n return (\n <Provider value={{ message }}>\n <Box>\n <RunSteps\n runSteps={olderRunSteps}\n />\n\n <Box>\n <Attachments\n message={message}\n />\n\n {message.content.map((content, index) => (\n <Fragment\n key={index}\n >\n {content.type === 'text' && (\n <TextContent\n content={content}\n />\n )}\n </Fragment>\n ))}\n\n {isInProgress && isEmpty(laterRunSteps) && (\n <StartingContentSkeleton />\n )}\n </Box>\n\n <RunSteps\n runSteps={laterRunSteps}\n />\n\n {isInProgress && !isEmpty(laterRunSteps) && (\n <Box>\n <StartingContentSkeleton />\n </Box>\n )}\n </Box>\n </Provider>\n )\n}\n","import {\n Skeleton,\n} from '@radix-ui/themes'\n\nexport const StartingContentSkeleton = () => (\n <Skeleton\n loading\n mt=\"1\"\n height=\"var(--space-4)\"\n width=\"var(--space-4)\"\n style={{\n borderRadius: 'var(--radius-6)',\n flexShrink: 0,\n }}\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { useContext } from 'react'\nimport type { SerializedRunStep } from '@/types'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\ntype Args = {\n runSteps: SerializedRunStep[]\n}\n\nexport const RunSteps = ({\n runSteps,\n}: Args) => {\n const componentsContext = useContext(ComponentsContext)\n const Component = componentsContext.components.RunStep\n\n return (\n <Flex\n direction=\"column-reverse\"\n >\n {runSteps.map((runStep) => (\n <Component\n key={runStep.id}\n runStep={runStep}\n />\n ))}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport { RunStep } from '@/components/runSteps/RunStep'\n\nexport const ComponentsContext = createContext({\n components: {\n RunStep,\n },\n})\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { SerializedRunStep } from '@/types'\nimport { ToolCall } from './ToolCall'\nimport { Starting } from './Starting'\n\ntype Args = {\n stepDetails: OpenAI.Beta.Threads.Runs.ToolCallsStepDetails\n runStep: SerializedRunStep\n}\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n direction=\"column\"\n >\n {children}\n </Flex>\n)\n\nexport const ToolCalls = ({\n stepDetails,\n runStep,\n}: Args) => (\n <Root>\n {!stepDetails.tool_calls.length && (\n <Starting />\n )}\n {stepDetails.tool_calls.map((toolCall) => (\n <ToolCall\n key={toolCall.id}\n toolCall={toolCall}\n runStep={runStep}\n />\n ))}\n </Root>\n)\n\nToolCalls.Root = Root\nToolCalls.Starting = Starting\nToolCalls.ToolCall = ToolCall\n","'use client'\nimport { useContext } from 'react'\nimport OpenAI from 'openai'\nimport type { SerializedRunStep } from '@/types'\nimport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nimport { DefaultFunction } from './DefaultFunction'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: SerializedRunStep\n}\n\nexport const Fn = ({\n fn,\n runStep,\n}: Args) => {\n const functionComponentsContext = useContext(FunctionComponentsContext)\n const Component = functionComponentsContext[fn.name] || DefaultFunction\n\n return (\n // @ts-ignore-next-line\n <Component\n fn={fn}\n runStep={runStep}\n />\n )\n}\n","'use client'\nimport { createContext } from 'react'\n\ntype FunctionComponents = {\n [key: string]: React.ReactNode\n}\n\nexport const FunctionComponentsContext = createContext({} as FunctionComponents)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport { Content } from './Content'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n title: string\n}\n\nexport const FunctionBase = ({\n fn,\n runStep,\n title,\n}: Args) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n {title}\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n style={{\n maxHeight: '200px',\n }}\n >\n <Content fn={fn} />\n </Popover.Content>\n </Popover.Root>\n)\n","import {\n Flex,\n Button,\n} from '@radix-ui/themes'\n\nexport const ToolCallBase = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n py=\"1\"\n ml=\"-2\"\n >\n <Button\n size=\"1\"\n color=\"gold\"\n variant=\"outline\"\n style={{\n boxShadow: 'none',\n }}\n >\n {children}\n </Button>\n </Flex>\n)\n","import {\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallTitle = ({\n children,\n}: Args) => (\n <Text\n weight=\"regular\"\n >\n {children}\n </Text>\n)\n","import {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon,\n} from '@radix-ui/react-icons'\nimport type { SerializedRunStep } from '@/types'\n\ntype Args = {\n runStep: SerializedRunStep\n}\n\nexport const ToolCallIcon = ({\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return (\n <CheckCircledIcon />\n )\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === 'expired') {\n return (\n <CircleBackslashIcon />\n )\n } else {\n return (\n <CircleIcon />\n )\n }\n}\n","import { useMemo } from 'react'\nimport { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\nimport { formattedJsonOrRaw } from './lib/formattedJsonOrRaw'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n}\n\nexport const Content = ({\n fn,\n}: Args) => {\n const args = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.arguments,\n })\n ), [fn])\n\n const output = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.output,\n })\n ), [fn])\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n {args && <Box>\n {args}\n </Box>}\n {output && <Box>\n {output}\n </Box>}\n </Code>\n )\n}\n","export const formattedJsonOrRaw = ({\n value,\n}: {\n value: string | null\n}) => {\n if (!value) {\n return null\n }\n\n try {\n return JSON.stringify(JSON.parse(value), null, 2)\n } catch (error) {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value, null, 2)\n }\n }\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const title = ({\n fn,\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`\n } else {\n return `Calling ${fn.name}`\n }\n}\n","import OpenAI from 'openai'\nimport { FunctionBase } from '@/components/functions/FunctionBase'\nimport { title } from './lib/title'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const DefaultFunction = ({\n fn,\n runStep,\n}: Args) => (\n <FunctionBase\n fn={fn}\n runStep={runStep}\n title={title({ runStep, fn })}\n />\n)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep } from '@/types'\nimport { Content } from './Content'\n\nexport const CodeInterpreter = ({\n codeInterpreter,\n runStep,\n}: {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n runStep: SerializedRunStep\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using code interpreter\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n maxHeight=\"200px\"\n >\n <Content\n codeInterpreter={codeInterpreter}\n />\n </Popover.Content>\n </Popover.Root>\n)\n","import { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\n\ntype Args = {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n}\n\nexport const Content = ({\n codeInterpreter,\n}: Args) => {\n if (!codeInterpreter.input) {\n return null\n }\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n <Box>\n {codeInterpreter.input}\n </Box>\n <Box>\n {JSON.stringify(codeInterpreter.outputs)}\n </Box>\n </Code>\n )\n}\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const FileSearch = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Searching files\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const Fallback = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using tool: {toolCall.type}\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { Fn } from './Fn'\nimport { CodeInterpreter } from './CodeInterpreter'\nimport { FileSearch } from './FileSearch'\nimport { Fallback } from './Fallback'\nimport type { SerializedRunStep, ToolCall as ToolCallType } from '@/types'\n\ntype Args = {\n toolCall: ToolCallType\n runStep: SerializedRunStep\n}\n\nexport const ToolCall = ({\n toolCall,\n runStep,\n}: Args) => {\n if (toolCall.type === 'function') {\n return (\n <Fn\n fn={toolCall.function}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'code_interpreter') {\n return (\n <CodeInterpreter\n codeInterpreter={toolCall.code_interpreter}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'file_search') {\n return (\n <FileSearch\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n }\n\n return (\n <Fallback\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n}\n","import {\n Popover,\n Text,\n} from '@radix-ui/themes'\nimport {\n CircleIcon,\n} from '@radix-ui/react-icons'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\n\nexport const Starting = () => (\n <Popover.Root>\n <ToolCallBase>\n <CircleIcon />\n <ToolCallTitle>\n Starting actions\n </ToolCallTitle>\n </ToolCallBase>\n <Popover.Content\n style={{\n maxHeight: '500px',\n }}\n >\n <Text>\n Getting ready to connect to domain API\n </Text>\n </Popover.Content>\n </Popover.Root>\n)\n","import type { SerializedRunStep } from '@/types'\nimport { ToolCalls } from './ToolCalls'\n\ntype Args = {\n runStep: SerializedRunStep\n}\n\nexport const RunStep = ({\n runStep,\n}: Args) => {\n if (runStep.step_details.type === 'tool_calls') {\n return (\n <ToolCalls\n stepDetails={runStep.step_details}\n runStep={runStep}\n />\n )\n }\n\n return null\n}\n\nRunStep.ToolCalls = ToolCalls\n","import { useMemo } from 'react'\nimport { useIsMutating } from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useIsMutatingMessage = () => {\n const threadContext = useThreadContext()\n\n const mutatingMessagesCount = useIsMutating({\n mutationKey: ['createMessage', threadContext.variables],\n })\n\n const isMutatingMessage = useMemo(() => (\n mutatingMessagesCount > 0\n ), [mutatingMessagesCount])\n\n return isMutatingMessage\n}\n","'use client'\nimport { createContext } from 'react'\nimport { Message } from '@/types'\n\nexport const MessageContext = createContext<{\n message: Message | null\n}>({\n message: null,\n})\n","import { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const Provider = MessageContext.Provider\n","import OpenAI from 'openai'\nimport Markdown from 'react-markdown'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\ntype Args = {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}\n\nexport const TextContent = ({\n content,\n}: Args) => {\n const {\n getRemarkPlugins,\n ...rest\n } = useMarkdownContext()\n\n return (\n <Markdown\n {...rest}\n remarkPlugins={getRemarkPlugins({\n content,\n })}\n >\n {content.text.value}\n </Markdown>\n )\n}\n","import { useContext } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\n\nexport const useMarkdownContext = () => (\n useContext(MarkdownContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { components } from './lib/components'\nimport { getRemarkPlugins } from './lib/getRemarkPlugins'\n\nexport const MarkdownContext = createContext({\n components,\n getRemarkPlugins,\n})\n","import { Heading, Table } from '@radix-ui/themes'\nimport { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\nimport { Img } from './Img'\nimport { Annotation } from './Annotation'\n\nexport const components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n img: Img,\n annotation: Annotation,\n h1: (props: JSX.IntrinsicElements['h1']) => <Heading as=\"h1\">{props.children}</Heading>,\n h2: (props: JSX.IntrinsicElements['h2']) => <Heading as=\"h2\" size=\"5\">{props.children}</Heading>,\n h3: (props: JSX.IntrinsicElements['h3']) => <Heading as=\"h3\" size=\"4\">{props.children}</Heading>,\n h4: (props: JSX.IntrinsicElements['h4']) => <Heading as=\"h4\" size=\"3\">{props.children}</Heading>,\n h5: (props: JSX.IntrinsicElements['h5']) => <Heading as=\"h5\" size=\"3\">{props.children}</Heading>,\n h6: (props: JSX.IntrinsicElements['h6']) => <Heading as=\"h6\" size=\"3\">{props.children}</Heading>,\n table: (props: JSX.IntrinsicElements['table']) => (\n <Table.Root\n {...props}\n variant=\"surface\"\n mb=\"3\"\n />\n ),\n thead: Table.Header,\n tbody: Table.Body,\n tr: Table.Row,\n td: Table.Cell,\n th: Table.ColumnHeaderCell,\n}\n","import {\n Box,\n Text,\n} from '@radix-ui/themes'\n\nexport const Paragraph = ({ children }: JSX.IntrinsicElements['p']) => (\n <Box\n pb=\"3\"\n >\n <Text\n size=\"3\"\n style={{\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Text>\n </Box>\n)\n","import {\n Link as RadixLink,\n} from '@radix-ui/themes'\n\ntype Args = JSX.IntrinsicElements['a']\n\nexport const Link = ({\n children,\n href,\n download,\n target = '_blank',\n}: Args) => (\n <RadixLink\n href={href}\n target={target}\n download={download}\n >\n {children}\n </RadixLink>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const UnorderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ul\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ul>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const OrderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ol\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ol>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ListItem = ({ children }: JSX.IntrinsicElements['li']) => (\n <Box\n pb=\"1\"\n >\n <li>\n {children}\n </li>\n </Box>\n)\n","import {\n Strong as RadixStrong,\n} from '@radix-ui/themes'\n\nexport const Strong = ({ children }: JSX.IntrinsicElements['strong']) => (\n <RadixStrong>\n {children}\n </RadixStrong>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Pre = ({ children }: JSX.IntrinsicElements['pre']) => (\n <Box\n style={{\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Box>\n)\n","import {\n Code as RadixCode,\n} from '@radix-ui/themes'\n\nexport const Code = ({ children }: JSX.IntrinsicElements['code']) => (\n <RadixCode>\n {children}\n </RadixCode>\n)\n","import videoExtensions from 'video-extensions'\n\nexport const isVideoSrc = ({\n src,\n}: {\n src: string\n}) => (\n videoExtensions.includes(src.split('.').pop() || '')\n)\n","export const isAudioSrc = ({\n src,\n}: {\n src: string\n}) => (\n src.endsWith('.mp3') || src.endsWith('.wav')\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n VideoMimeType,\n MediaPlayer,\n MediaProvider,\n Controls,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\nimport { FullscreenButton } from './FullscreenButton'\n\nexport const Video = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `video/${src.split('.').pop()}` as VideoMimeType,\n }}\n playsInline\n hideControlsOnMouseLeave\n crossOrigin\n >\n <MediaProvider />\n\n <style>\n {`\n .superinterface-video-controls {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .superinterface-video-controls[data-visible] {\n opacity: 1;\n }\n `}\n </style>\n <Flex\n asChild\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n className=\"superinterface-video-controls\"\n p=\"3\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n <FullscreenButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import {\n PlayButton as VidstackPlayButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n PlayIcon,\n PauseIcon,\n} from '@radix-ui/react-icons'\n\nexport const PlayButton = () => {\n const isPaused = useMediaState('paused')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackPlayButton>\n {isPaused ? <PlayIcon /> : <PauseIcon />}\n </VidstackPlayButton>\n </IconButton>\n )\n}\n","import {\n MuteButton,\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n IconButton,\n HoverCard,\n Slider,\n} from '@radix-ui/themes'\nimport {\n SpeakerModerateIcon,\n SpeakerOffIcon,\n} from '@radix-ui/react-icons'\n\nexport const VolumeButton = () => {\n const volume = useMediaState('volume')\n const isMuted = useMediaState('muted')\n const remote = useMediaRemote()\n\n return (\n <HoverCard.Root>\n <HoverCard.Trigger>\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <MuteButton>\n {(isMuted || volume === 0) ? <SpeakerOffIcon /> : <SpeakerModerateIcon />}\n </MuteButton>\n </IconButton>\n </HoverCard.Trigger>\n <HoverCard.Content\n size=\"1\"\n side=\"top\"\n height=\"100px\"\n >\n <Slider\n size=\"1\"\n variant=\"soft\"\n orientation=\"vertical\"\n value={[volume * 100]}\n onValueChange={([value]) => (\n remote.changeVolume(value / 100)\n )}\n />\n </HoverCard.Content>\n </HoverCard.Root>\n )\n}\n","import {\n useState,\n useEffect,\n useMemo,\n} from 'react'\nimport {\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n Slider,\n} from '@radix-ui/themes'\n\nexport const Time = () => {\n const time = useMediaState('currentTime')\n const duration = useMediaState('duration')\n const seeking = useMediaState('seeking')\n const canSeek = useMediaState('canSeek')\n const remote = useMediaRemote()\n\n const [value, setValue] = useState(0)\n\n useEffect(() => {\n if (seeking) return;\n setValue((time / duration) * 100);\n }, [time, duration, seeking])\n\n const step = useMemo(() => (\n (1 / duration) * 100\n ), [duration])\n\n return (\n <Slider\n size=\"1\"\n variant=\"soft\"\n value={[value]}\n disabled={!canSeek}\n step={Number.isFinite(step) ? step : 1}\n onValueChange={([value]) => {\n setValue(value)\n remote.seeking((value / 100) * duration)\n }}\n onValueCommit={([value]) => {\n remote.seek((value / 100) * duration)\n }}\n />\n )\n}\n","import {\n Card,\n Inset,\n} from '@radix-ui/themes'\n\nexport const MediaContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Card\n mb=\"3\"\n >\n <Inset\n clip=\"padding-box\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {children}\n </Inset>\n </Card>\n)\n","import {\n FullscreenButton as VidstackFullscreenButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n EnterFullScreenIcon,\n ExitFullScreenIcon,\n} from '@radix-ui/react-icons'\n\nexport const FullscreenButton = () => {\n const isFullscreen = useMediaState('fullscreen')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackFullscreenButton>\n {isFullscreen ? <ExitFullScreenIcon /> : <EnterFullScreenIcon />}\n </VidstackFullscreenButton>\n </IconButton>\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n MediaPlayer,\n MediaProvider,\n Controls,\n AudioMimeType,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\n\nexport const Audio = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `audio/${src.split('.').pop()}` as AudioMimeType,\n }}\n viewType=\"audio\"\n crossOrigin\n playsInline\n >\n <MediaProvider />\n\n <Flex\n asChild\n p=\"3\"\n flexGrow=\"1\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ImageComponent = (props: JSX.IntrinsicElements['img']) => (\n <Box\n pb=\"3\"\n >\n <img\n {...props}\n style={{\n maxWidth: '100%',\n height: 'auto',\n }}\n />\n </Box>\n)\n","import { isVideoSrc } from './lib/isVideoSrc'\nimport { isAudioSrc } from './lib/isAudioSrc'\nimport { Video } from './Video'\nimport { Audio } from './Audio'\nimport { ImageComponent } from './ImageComponent'\n\nexport const Img = (props: JSX.IntrinsicElements['img']) => {\n if (!props.src) {\n return (\n <ImageComponent\n {...props}\n />\n )\n } else if (isVideoSrc({ src: props.src })) {\n return (\n <Video\n src={props.src!}\n />\n )\n } else if (isAudioSrc({ src: props.src })) {\n return (\n <Audio\n src={props.src!}\n />\n )\n } else {\n return (\n <ImageComponent\n {...props}\n />\n )\n }\n}\n","import {\n QuoteIcon,\n} from '@radix-ui/react-icons'\nimport OpenAI from 'openai'\nimport { AnnotationBase } from './AnnotationBase'\nimport { FilePathAnnotation } from './FilePathAnnotation'\n\nexport const Annotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.Annotation\n children: React.ReactNode\n}) => {\n if (annotation.type === 'file_citation') {\n return (\n <AnnotationBase\n icon={<QuoteIcon />}\n content=\"File cited.\"\n />\n )\n } else if (annotation.type === 'file_path') {\n return (\n <FilePathAnnotation\n annotation={annotation}\n >\n {children}\n </FilePathAnnotation>\n )\n }\n\n return null\n}\n","import {\n IconButton,\n Popover,\n Flex,\n Text,\n} from '@radix-ui/themes'\n\nexport const AnnotationBase = ({\n icon,\n content,\n}: {\n icon: React.ReactNode,\n content: string\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n variant=\"soft\"\n color=\"gray\"\n size=\"1\"\n >\n {icon}\n </IconButton>\n </Popover.Trigger>\n <Popover.Content\n size=\"1\"\n >\n <Flex\n direction=\"column\"\n >\n <Text\n size=\"1\"\n color=\"gray\"\n >\n {content}\n </Text>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n)\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Link } from '@/contexts/markdown/MarkdownContext/lib/components/Link'\n\nexport const FilePathAnnotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.FilePathAnnotation\n children: React.ReactNode\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Link\n href={`${superinterfaceContext.baseUrl}/files/${annotation.file_path.file_id}/contents?${nextSearchParams}`}\n target=\"_self\"\n download\n >\n {children}\n </Link>\n )\n}\n","import OpenAI from 'openai'\nimport remarkGfm from 'remark-gfm'\nimport { remarkAnnotation } from '@/lib/remark/remarkAnnotation'\n\nexport const getRemarkPlugins = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => [\n remarkAnnotation({ content }),\n remarkGfm,\n]\n","import OpenAI from 'openai'\nimport { isNumber } from 'radash'\nimport type { Node, Literal, Position } from 'unist'\nimport type { Text, Link } from 'mdast'\n// @ts-ignore-next-line\nimport flatMap from 'unist-util-flatmap'\n\ninterface AnnotationNode extends Literal {\n type: 'annotation'\n value: string\n position?: Position\n data: {\n hName: 'annotation'\n hProperties: {\n annotation: any\n }\n }\n}\n\nconst sortedAnnotations = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) =>\n content.text.annotations.sort((a, b) => a.start_index - b.start_index)\n\nexport const remarkAnnotation = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => {\n return () => {\n return (tree: any) => {\n flatMap(tree, (node: Node) => {\n // Process text and link nodes\n if (node.type === 'text' || node.type === 'link') {\n return processNodeWithAnnotations({ node, content })\n } else {\n // Return other nodes as-is\n return [node]\n }\n })\n }\n }\n}\n\nconst processNodeWithAnnotations = ({\n node,\n content,\n}: {\n node: Node\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}): Node[] => {\n if (!content.text?.annotations?.length) {\n return [node]\n }\n\n if (!node.position) {\n return [node]\n }\n\n const annotations = sortedAnnotations({ content })\n\n if (node.type === 'text') {\n // node is a Text node\n return processTextNode({ node: node as Text, annotations })\n } else if (node.type === 'link') {\n // node is a Link node\n const linkNode = node as Link\n // Process link node's children\n linkNode.children = flatMap(linkNode.children, (childNode: Node) => {\n if (childNode.type === 'text') {\n return processTextNode({ node: childNode as Text, annotations })\n } else {\n return [childNode]\n }\n })\n return [linkNode]\n } else {\n // Return node as-is\n return [node]\n }\n}\n\nconst processTextNode = ({\n node,\n annotations,\n}: {\n node: Text\n annotations: any[]\n}): Node[] => {\n if (!node.position || !node.value) {\n return [node]\n }\n\n const nodeStart = node.position.start.offset!\n const nodeEnd = node.position.end.offset!\n\n if (!isNumber(nodeStart) || !isNumber(nodeEnd)) {\n return [node]\n }\n\n const newNodes: Node[] = []\n let lastIndex = nodeStart\n\n annotations.forEach((annotation) => {\n const annotationStart = annotation.start_index\n const annotationEnd = annotation.end_index\n\n if (nodeEnd <= annotationStart || nodeStart >= annotationEnd) {\n return\n }\n\n const start = Math.max(nodeStart, annotationStart)\n const end = Math.min(nodeEnd, annotationEnd)\n\n if (lastIndex < start) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: start }))\n }\n\n newNodes.push(\n createAnnotationNode({\n node,\n startOffset: start,\n endOffset: end,\n annotation,\n })\n )\n lastIndex = end\n })\n\n if (lastIndex < nodeEnd) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: nodeEnd }))\n }\n\n return newNodes\n}\n\nconst createTextNode = ({\n node,\n startOffset,\n endOffset,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n}): Text => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'text',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n }\n}\n\nconst createAnnotationNode = ({\n node,\n startOffset,\n endOffset,\n annotation,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n annotation: any\n}): AnnotationNode => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'annotation',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n data: {\n hName: 'annotation',\n hProperties: {\n annotation,\n },\n },\n }\n}\n","import { SerializedMessage } from '@/types'\nimport {\n Flex,\n Badge,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n} from '@radix-ui/react-icons'\n\nexport const Attachments = ({\n message,\n}: {\n message: SerializedMessage\n}) => {\n if (!message.attachments?.length) return null\n\n return (\n <Flex\n align=\"start\"\n pb=\"1\"\n >\n <Badge\n color=\"gray\"\n variant=\"surface\"\n >\n <FileIcon />\n {message.attachments.length} file{message.attachments.length > 1 ? 's' : ''}\n </Badge>\n </Flex>\n )\n}\n","import { useMemo } from 'react'\nimport { StartingSkeleton } from '@/components/skeletons/StartingSkeleton'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\n\nexport const Progress = () => {\n const { latestMessage } = useLatestMessage()\n const isMutatingMessage = useIsMutatingMessage()\n\n const isVisible = useMemo(() => {\n if (!latestMessage) return false\n if (latestMessage.role !== 'user') return false\n if (latestMessage.status === 'in_progress') return false\n if (!isOptimistic({ id: latestMessage.id })) return false\n if (!isMutatingMessage) return false\n\n return true\n }, [latestMessage, isMutatingMessage])\n\n if (!isVisible) return null\n\n return (\n <StartingSkeleton />\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport { Box } from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\ntype Args = {\n children?: React.ReactNode\n}\n\nexport const StartingSkeleton = ({\n children,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n <AssistantAvatar />\n\n <Box>\n <Name>\n {assistantNameContext}\n </Name>\n\n {children}\n\n <StartingContentSkeleton />\n </Box>\n </MessageGroupBase>\n )\n}\n","import { useMemo } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const useLatestMessage = () => {\n const props = useMessages()\n\n return useMemo(() => ({\n ...props,\n latestMessage: props.messages[0] || null,\n }), [props])\n}\n","import _ from 'lodash'\n\ntype Args = {\n id: string\n}\n\nexport const isOptimistic = ({\n id,\n}: Args) => (\n _.startsWith(id, '-')\n)\n","'use client'\n\nimport { Flex } from '@radix-ui/themes'\nimport { useInfiniteScroll } from '@/hooks/misc/useInfiniteScroll'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const Root = ({\n children,\n style = {},\n}: {\n children: React.ReactNode\n style?: React.CSSProperties\n}) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n } = useMessages()\n\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n })\n\n return (\n <Flex\n ref={containerRef}\n direction=\"column-reverse\"\n flexGrow=\"1\"\n style={{\n ...style,\n overflow: 'auto',\n }}\n >\n {children}\n\n {hasNextPage && (\n <Flex\n ref={loaderRef}\n />\n )}\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Flex>\n )\n}\n","import { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { useThrottledEffect } from '@/hooks/misc/useThrottledEffect'\n\ntype Args = {\n isFetchingNextPage: boolean\n hasNextPage: boolean\n fetchNextPage: () => void\n}\n\nexport const useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: Args) => {\n const containerRef = useRef(null)\n\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: '0px',\n threshold: 0.1,\n })\n\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return\n if (!inView) return\n if (!hasNextPage) return\n\n fetchNextPage()\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n )\n\n return {\n containerRef,\n loaderRef,\n inView,\n }\n}\n","import _ from 'lodash'\nimport { useRef, useEffect, useCallback } from 'react'\n\nexport const useThrottledEffect = (cb: Function, delay: number, additionalDeps: any[]) => {\n const cbRef = useRef(cb)\n\n const throttledCb = useCallback(\n _.throttle((...args: any[]) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true,\n }),\n [delay]\n )\n useEffect(() => {\n cbRef.current = cb\n })\n // set additionalDeps to execute effect, when other values change (not only on delay change)\n useEffect(throttledCb, [throttledCb, ...additionalDeps])\n}\n","'use client'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\n\nexport const NextPageSkeleton = () => {\n const {\n hasNextPage,\n } = useMessages()\n\n if (!hasNextPage) {\n return null\n }\n\n return (\n <MessagesSkeleton />\n )\n}\n","'use client'\n\nimport {\n ArrowUpIcon,\n StopIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n flexShrink=\"0\"\n align=\"end\"\n >\n {children}\n </Flex>\n)\n\nconst Button = () => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { isDisabled, isLoading, isFileLoading } = useMessageFormContext()\n\n if (isLoading) {\n return (\n <IconButton\n type=\"button\"\n onClick={() => superinterfaceContext.createMessageAbortControllerRef.current?.abort()}\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n type=\"submit\"\n disabled={isDisabled || isFileLoading}\n >\n <ArrowUpIcon />\n </IconButton>\n )\n}\n\nexport const Submit = () => (\n <Root>\n <Button />\n </Root>\n)\n\nSubmit.Root = Root\nSubmit.Button = Button\n","import { useContext } from 'react'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\n\nexport const useMessageFormContext = () => (\n useContext(MessageFormContext)\n)\n","'use client'\nimport OpenAI from 'openai'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const MessageFormContext = createContext({\n content: '',\n isDisabled: false,\n isLoading: false,\n files: [] as OpenAI.Files.FileObject[],\n setFiles: (() => {}) as Dispatch<SetStateAction<OpenAI.Files.FileObject[]>>,\n isFileLoading: false,\n})\n","'use client'\nimport OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useMemo, useState } from 'react'\nimport { useForm, SubmitHandler, FormProvider } from 'react-hook-form'\nimport { Box } from '@radix-ui/themes'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { formOptions } from './lib/formOptions'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { partob } from 'radash'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\n\ntype Inputs = {\n content: string\n attachments?: OpenAI.Beta.Threads.Message.Attachment[]\n}\n\nexport const Root = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n}: {\n children: React.ReactNode\n onSubmit?: SubmitHandler<Inputs & { reset: any, createMessage: any }>\n isDisabled?: boolean\n}) => {\n const [files, setFiles] = useState<OpenAI.Files.FileObject[]>([])\n const formProps = useForm<Inputs>(formOptions)\n\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch,\n } = formProps\n\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isFileLoading = useMemo(() => (\n files.some((file) => isOptimistic({ id: file.id }))\n ), [files])\n\n const isLoading = useMemo(() => (\n isMutatingMessage || isSubmitting\n ), [\n isMutatingMessage,\n isSubmitting,\n ])\n\n const { latestMessage } = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg])\n\n const onSubmit: SubmitHandler<Inputs> = onSubmitArg ? partob(onSubmitArg, { reset, createMessage }) : async (data) => {\n if (isFileLoading) return\n if (isLoading) return\n if (isDisabled) return\n\n reset()\n setFiles([])\n\n const attachments = files.map((file) => ({\n file_id: file.id,\n tools: [\n {\n type: 'file_search',\n },\n ],\n }))\n\n await createMessage({\n // @ts-ignore-next-line\n content: data.content,\n ...(attachments.length ? { attachments } : {}),\n })\n }\n\n const content = watch('content')\n\n return (\n <MessageFormContext.Provider\n value={{\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content,\n }}\n >\n <FormProvider {...formProps}>\n <Box\n asChild\n flexShrink=\"0\"\n >\n <form\n onSubmit={handleSubmit(onSubmit)}\n >\n {children}\n </form>\n </Box>\n </FormProvider>\n </MessageFormContext.Provider>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateMessage = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables),\n }\n}\n","import OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n newMessage: Variables,\n) => {\n const queryKey = ['messages', omit(newMessage, ['content', 'attachments'])]\n await queryClient.cancelQueries({ queryKey })\n\n const prevMessages = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n )\n\n return {\n prevMessages,\n newMessage,\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n newMessage: {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n }\n}\n\nexport const data = ({\n newMessage,\n}: Args) => (prevData: any) => {\n const message = {\n id: optimisticId(),\n role: 'user' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: newMessage.content,\n },\n } as OpenAI.Beta.Threads.Messages.TextContentBlock,\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n attachments: newMessage.attachments ?? [],\n metadata: {},\n runSteps: [],\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { JSONParser } from '@streamparser/json-whatwg'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { handleResponse } from './handleResponse'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const abortController = new AbortController()\n superinterfaceContext.createMessageAbortControllerRef.current = abortController\n\n const response = await fetch(`${superinterfaceContext.baseUrl}/messages`, {\n method: 'POST',\n body: JSON.stringify(body({\n variables,\n superinterfaceContext,\n })),\n signal: abortController.signal,\n })\n\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n }\n }\n\n if (response.body == null) {\n throw new Error('The response body is empty.');\n }\n\n const parser = new JSONParser({ stringBufferSize: undefined, paths: ['$'], separator: '' })\n const reader = response.body.pipeThrough(parser).getReader()\n\n const messagesQueryKey = ['messages', threadContext.variables]\n\n while (true) {\n const { done, value } = await reader.read()\n\n if (done) break\n\n handleResponse({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n })\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadCreated = ({\n value,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadCreated\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.threadIdCookieOptions?.set) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.assistantId) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.threadId) return\n\n superinterfaceContext.threadIdCookieOptions.set({\n // @ts-ignore-next-line\n assistantId: value.data.metadata.assistantId,\n // @ts-ignore-next-line\n threadId: value.data.metadata.threadId,\n })\n}\n","import { last } from 'radash'\nimport { SerializedMessage } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\n\nexport const extendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevRunMessages = messages.filter((m: SerializedMessage) => (\n m.run_id === message.run_id\n ))\n\n const prevOptimitisticRunMessages = prevRunMessages.filter((m: SerializedMessage) => (\n isOptimistic({ id: m.id })\n ))\n\n const runSteps = last(prevOptimitisticRunMessages)?.runSteps ?? last(prevRunMessages)?.runSteps ?? []\n\n return {\n ...message,\n runSteps,\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { SerializedMessage, ThreadMessageCreatedEvent } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { extendMessage } from './extendMessage'\nimport { MessagesQueryKey } from '@/types'\n\nconst appendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevMessages = messages.filter((m: SerializedMessage) => (\n m.run_id != message.run_id || !isOptimistic({ id: m.id })\n ))\n\n return [\n extendMessage({ message, messages }),\n ...prevMessages,\n ]\n}\n\nexport const threadMessageCreated = ({\n value,\n messagesQueryKey,\n queryClient,\n}: {\n value: ThreadMessageCreatedEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: appendMessage({ message: value.data, messages: [] }),\n hasNextPage: false,\n lastId: value.data.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: appendMessage({ message: value.data, messages: latestPage.data }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport { MessagesQueryKey } from '@/types'\n\nconst updatedContentPart = ({\n prevContentPart,\n delta,\n}: {\n prevContentPart: OpenAI.Beta.Threads.Messages.MessageContent\n delta: OpenAI.Beta.Threads.Messages.MessageContentDelta\n}) => {\n if (!prevContentPart) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'text' && delta.text && prevContentPart.type == 'text' && prevContentPart.text) {\n return {\n ...prevContentPart,\n text: {\n ...prevContentPart.text,\n value: `${prevContentPart.text.value}${delta.text.value}`,\n annotations: [\n ...(prevContentPart.text.annotations ?? []),\n ...(delta.text.annotations ?? []),\n ]\n },\n }\n }\n\n return prevContentPart\n}\n\nconst updatedContent = ({\n content,\n value,\n}: {\n content: OpenAI.Beta.Threads.Messages.MessageContent\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n}) => {\n if (!value.data.delta.content) return content\n\n const result = _.cloneDeep(content)\n\n value.data.delta.content.forEach((delta: OpenAI.Beta.Threads.Messages.MessageContentDelta) => {\n // @ts-ignore-next-line\n result[delta.index] = updatedContentPart({\n // @ts-ignore-next-line\n prevContentPart: result[delta.index],\n delta,\n })\n })\n\n return result\n}\n\nexport const threadMessageDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n const [latestMessage, ...messagesRest] = latestPage.data\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n ...latestMessage,\n content: updatedContent({ content: latestMessage.content, value }),\n },\n ...messagesRest,\n ],\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { replace } from 'radash'\nimport { ThreadMessageCompletedEvent } from '@/types'\nimport { extendMessage } from './extendMessage'\nimport {\n QueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadMessageCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n messagesQueryKey: MessagesQueryKey\n value: ThreadMessageCompletedEvent\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: replace(latestPage.data, extendMessage({ message: value.data, messages: latestPage.data }), (m) => m.id === value.data.id),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n id: optimisticId(),\n assistant_id: value.data.assistant_id,\n content: [],\n created_at: value.data.created_at,\n attachments: [],\n metadata: {},\n status: 'in_progress',\n role: 'assistant',\n runSteps: [],\n run_id: value.data.id,\n thread_id: value.data.thread_id,\n },\n ...latestPage.data,\n ]\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunFailed = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedMessage, MessagesQueryKey } from '@/types'\n\nexport const threadRunStepCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: [\n value.data,\n ...m.runSteps,\n ],\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport OpenAI from 'openai'\nimport { SerializedMessage, SerializedRunStep, ThreadRunStepDeltaEvent, MessagesQueryKey } from '@/types'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.ToolCall\n delta: OpenAI.Beta.Threads.Runs.ToolCallDelta\n}) => {\n if (!toolCall) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'function' && delta.function && toolCall.type === 'function' && toolCall.function) {\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n // @ts-ignore-next-line\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n }\n\n return toolCall\n}\n\nconst updatedRunStep = ({\n runStep,\n value,\n}: {\n runStep: SerializedRunStep\n value: ThreadRunStepDeltaEvent\n}) => {\n if (!runStep?.step_details?.tool_calls) return runStep\n\n if (value.data.delta?.step_details?.type === 'tool_calls') {\n if (!value.data.delta.step_details.tool_calls) return runStep\n\n const newToolCalls = _.cloneDeep(runStep.step_details.tool_calls)\n\n value.data.delta.step_details.tool_calls.forEach((delta: OpenAI.Beta.Threads.Runs.ToolCallDelta) => (\n newToolCalls[delta.index] = updatedToolCall({\n toolCall: newToolCalls[delta.index],\n delta,\n })\n ))\n\n return {\n ...runStep,\n step_details: {\n ...runStep.step_details,\n ...value.data.delta.step_details,\n tool_calls: newToolCalls,\n },\n }\n } else {\n return runStep\n }\n}\n\n\nexport const threadRunStepDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: ThreadRunStepDeltaEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: m.runSteps.map((rs: SerializedRunStep) => {\n if (rs.id === value.data.id) {\n return updatedRunStep({ runStep: rs, value })\n }\n\n return rs\n }),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedRunStep, SerializedMessage, MessagesQueryKey } from '@/types'\nimport { replace } from 'radash'\n\nexport const threadRunStepCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCompleted\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: replace(m.runSteps, value.data, (rs: SerializedRunStep) => rs.id === value.data.id),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport { ToolCall } from '@/types'\nimport _ from 'lodash'\nimport OpenAI from 'openai'\nimport { map } from 'radash'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadRunRequiresAction = async ({\n value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunRequiresAction & {\n data: {\n required_action: {\n type: 'submit_client_tool_outputs'\n submit_client_tool_outputs: {\n tool_calls: ToolCall[]\n }\n }\n }\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n if (value.data.required_action.type === 'submit_client_tool_outputs') {\n // @ts-ignore-next-line\n const toolCalls = value.data.required_action.submit_client_tool_outputs.tool_calls\n\n const toolOutputs = await map(toolCalls, async (toolCall: ToolCall) => {\n if (toolCall.type !== 'function') {\n return {\n toolCallId: toolCall.id,\n output: `Error: client tool type ${toolCall.type} is not supported.`,\n }\n }\n\n // @ts-ignore-next-line\n const fn = window[toolCall.function.name as string]\n\n if (!fn) {\n return {\n toolCallId: toolCall.id,\n output: `Error: client function ${toolCall.function.name} is not defined.`,\n }\n }\n\n const args = toolCall.function.arguments\n const parsedArgs = JSON.parse(args)\n\n const output = await fn(parsedArgs)\n\n return {\n toolCallId: toolCall.id,\n output,\n }\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/threads/runs/submit-client-tool-outputs`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n toolOutputs,\n ...superinterfaceContext.variables,\n })\n })\n }\n}\n","import { threadCreated } from './threadCreated'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\nimport { threadRunCreated } from './threadRunCreated'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadRunStepCompleted } from './threadRunStepCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\n\nexport const handlers = {\n 'thread.created': threadCreated,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n 'thread.run.created': threadRunCreated,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.run.step.completed': threadRunStepCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n}\n","import OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { handlers } from './handlers'\n\nexport const handleResponse = ({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n}: {\n value: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: ReturnType<typeof useQueryClient>\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n const handler = handlers[value.value.event]\n\n if (!handler) {\n return console.log('Missing handler', { value })\n }\n\n return handler({\n value: value.value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdCookieOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdCookieOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { onMutate } from './onMutate'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createMessage', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\n\nconst schema = z.object({\n content: z.string().min(1),\n})\n\nexport const formOptions = {\n resolver: zodResolver(schema),\n}\n","import {\n QueryClient,\n} from '@tanstack/react-query'\nimport { Toast } from '@/types'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const createMessageDefaultOnError = ({\n queryClient,\n addToast,\n threadContext,\n}: {\n queryClient: QueryClient\n addToast: (toast: Toast) => void\n threadContext: ReturnType<typeof useThreadContext>\n}) => (error: any) => {\n if (error.name === 'AbortError') {\n queryClient.invalidateQueries({ queryKey: ['messages', threadContext.variables] })\n queryClient.invalidateQueries({ queryKey: ['runs', threadContext.variables] })\n return\n }\n\n addToast({ type: 'error', message: error.message })\n}\n","'use client'\nimport { useFormContext } from 'react-hook-form'\nimport {\n Container as RadixContainer,\n Flex,\n} from '@radix-ui/themes'\nimport { Control } from './Control'\nimport { Files } from './Files'\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const {\n formState: {\n errors,\n },\n } = useFormContext()\n\n return (\n <RadixContainer\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n style={{\n borderRadius: 'var(--radius-2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: errors.content ? 'var(--red-9)' : 'var(--gray-5)',\n ...(errors.content ? { backgroundColor: 'var(--red-2)' } : {}),\n }}\n p=\"2\"\n pl=\"3\"\n wrap=\"wrap\"\n >\n {children}\n </Flex>\n </Flex>\n </Flex>\n </RadixContainer>\n )\n}\n\nexport const Field = {\n Root,\n Control,\n Files,\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useFormContext } from 'react-hook-form'\nimport { usePrevious } from '@/hooks/misc/usePrevious'\nimport { useContext, useMemo, useRef, useEffect } from 'react'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { TextareaBase } from '@/components/textareas/TextareaBase'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n flexGrow=\"1\"\n pt=\"4px\"\n >\n {children}\n </Flex>\n)\n\nconst Input = () => {\n const assistantNameContext = useContext(AssistantNameContext)\n const {\n register,\n } = useFormContext()\n\n const { isDisabled, isLoading } = useMessageFormContext()\n\n const isSubmitDisabled = useMemo(() => (\n isDisabled || isLoading\n ), [isDisabled, isLoading])\n\n const isDisabledPrevious = usePrevious(isDisabled)\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const textareaProps = register('content')\n\n useEffect(() => {\n if (isDisabled) return\n if (!isDisabledPrevious) return\n if (!textareaRef.current) return\n\n textareaRef.current.focus()\n }, [isDisabled, isDisabledPrevious, textareaProps])\n\n return (\n <TextareaBase\n minRows={1}\n placeholder={`Message ${assistantNameContext}...`}\n disabled={isDisabled}\n onKeyDown={(e: any) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n\n if (isSubmitDisabled) return\n e.currentTarget.form?.requestSubmit()\n }\n }}\n {...textareaProps}\n ref={(e: any) => {\n textareaProps.ref(e)\n // @ts-ignore-next-line\n textareaRef.current = e\n }}\n />\n )\n}\n\nexport const Control = () => (\n <Root>\n <Input />\n </Root>\n)\n\nControl.Root = Root\nControl.Input = Input\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = <T,>(state: T): T | undefined => {\n const ref = useRef<T>()\n\n useEffect(() => {\n ref.current = state\n })\n\n return ref.current\n}\n","import { forwardRef } from 'react'\nimport TextareaAutosize from 'react-textarea-autosize'\n\ntype Props = React.ComponentProps<typeof TextareaAutosize>\n\nexport const TextareaBase = forwardRef(function TextareaBase(props: Props, ref) {\n return (\n <>\n <style>\n {`.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }`}\n </style>\n\n <TextareaAutosize\n // @ts-ignore-next-line\n ref={ref}\n className=\"rt-reset superinterface-textarea\"\n style={{\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n resize: 'none',\n color: 'var(--gray-12)',\n flexGrow: 1,\n display: 'flex',\n }}\n {...props}\n />\n </>\n )\n})\n","import {\n Flex,\n Card,\n Spinner,\n Text,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n Cross2Icon,\n} from '@radix-ui/react-icons'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\n\nexport const Preview = () => {\n const { files, setFiles } = useMessageFormContext()\n\n if (!files.length) {\n return null\n }\n\n return (\n <Flex\n flexBasis=\"100%\"\n direction=\"column\"\n pb=\"2\"\n gap=\"1\"\n >\n {files.map((file) => (\n <Card\n key={file.id}\n variant=\"ghost\"\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"1\"\n >\n <Flex\n align=\"center\"\n gap=\"1\"\n flexShrink=\"1\"\n minWidth=\"0\"\n maxWidth=\"250px\"\n >\n <Flex\n flexShrink=\"0\"\n >\n <Spinner\n loading={isOptimistic({ id: file.id })}\n >\n <FileIcon />\n </Spinner>\n </Flex>\n\n <Text\n size=\"2\"\n truncate\n wrap=\"nowrap\"\n >\n {file.filename}\n </Text>\n </Flex>\n\n <Flex\n flexShrink=\"0\"\n >\n <IconButton\n onClick={() => (\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== file.id)\n ))\n )}\n color=\"gray\"\n variant=\"ghost\"\n size=\"1\"\n >\n <Cross2Icon />\n </IconButton>\n </Flex>\n </Flex>\n </Card>\n ))}\n </Flex>\n )\n}\n","'use client'\n\nimport type OpenAI from 'openai'\nimport { useCallback } from 'react'\nimport { omit } from 'radash'\nimport dayjs from 'dayjs'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport {\n FilePlusIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useCreateFile } from '@/hooks/files/useCreateFile'\n\nconst accept = `.c,text/x-c,\n.cs,text/x-csharp,\n.cpp,text/x-c++,\n.doc,application/msword,\n.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document,\n.html,text/html,\n.java,text/x-java,\n.json,application/json,\n.md,text/markdown,\n.pdf,application/pdf,\n.php,text/x-php,\n.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation,\n.py,text/x-python,\n.py,text/x-script.python,\n.rb,text/x-ruby,\n.tex,text/x-tex,\n.txt,text/plain,\n.css,text/css,\n.js,text/javascript,\n.sh,application/x-sh,\n.ts,application/typescript`\n\nexport const Control = () => {\n const { isDisabled, isLoading, setFiles } = useMessageFormContext()\n const { createFile } = useCreateFile()\n const { addToast } = useToasts()\n\n const onChange = useCallback(async (event: React.ChangeEvent<HTMLInputElement>) => {\n const fileObjects = event.target.files\n if (!fileObjects) return\n\n const newFiles = Array.from(fileObjects).map((fileObject) => ({\n id: optimisticId(),\n filename: fileObject.name,\n object: 'file' as 'file',\n purpose: 'assistants' as 'assistants',\n created_at: dayjs().unix(),\n bytes: fileObject.size,\n status: 'processed' as 'processed',\n fileObject,\n }))\n\n setFiles((prev: OpenAI.Files.FileObject[]) => [\n ...prev,\n ...newFiles.map((file) => omit(file, ['fileObject'])),\n ])\n\n for await (const newFile of newFiles) {\n await createFile({\n file: newFile.fileObject,\n },\n {\n onSuccess: ({\n file,\n }: {\n file: OpenAI.Files.FileObject\n }) => (\n setFiles((prev) => ([\n ...prev.filter((prevFile) => prevFile.id !== newFile.id),\n file,\n ]))\n ),\n onError: () => {\n addToast({ type: 'error', message: 'Could not upload file. Please try again.' })\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== newFile.id)\n ))\n },\n })\n }\n }, [addToast, createFile, setFiles])\n\n return (\n <Flex\n pt=\"2\"\n pr=\"2\"\n flexGrow=\"0\"\n >\n <IconButton\n type=\"button\"\n variant=\"ghost\"\n color=\"gray\"\n disabled={isDisabled || isLoading}\n style={{\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n <FilePlusIcon />\n <input\n type=\"file\"\n multiple\n accept={accept}\n onChange={onChange}\n style={{\n cursor: 'pointer',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0,\n }}\n />\n </IconButton>\n </Flex>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateFile = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createFile: (...args: any[]) => {\n const [firstArg, ...restArgs] = args\n return props.mutateAsync({\n ...threadContext.variables,\n ...firstArg,\n }, ...restArgs)\n },\n }\n}\n","export const formData = (variables: any) => {\n const data = new FormData()\n\n for (const key in variables) {\n data.append(key, variables[key])\n }\n\n return data\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { formData } from './formData'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return formData(variables)\n if (!variables.assistantId) return formData(variables)\n if (!superinterfaceContext.threadIdCookieOptions?.get) return formData(variables)\n\n const threadId = superinterfaceContext.threadIdCookieOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return formData(variables)\n\n return formData({\n ...variables,\n threadId,\n })\n}\n","import {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const response = await fetch(`${superinterfaceContext.baseUrl}/files`, {\n method: 'POST',\n body: body({\n variables,\n superinterfaceContext,\n }),\n })\n\n const result = await response.json()\n return result\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createFile', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { Preview } from './Preview'\nimport { Control } from './Control'\n\nexport const Files = {\n Preview,\n Control,\n}\n","import { Submit } from './Submit'\nimport { Root } from './Root'\nimport { Field } from './Field'\n\nexport const MessageForm = () => (\n <Root>\n <Field.Root>\n <Field.Control />\n <Submit />\n </Field.Root>\n </Root>\n)\n\nMessageForm.Root = Root\nMessageForm.Field = Field\nMessageForm.Submit = Submit\n","import { Flex } from '@radix-ui/themes'\nimport {\n Provider,\n Args as ThreadProviderArgs,\n} from '@/components/threads/Thread/Provider'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\nexport type Args = ThreadProviderArgs\n\nexport const Root = ({\n children,\n ...rest\n}: Args) => (\n <ToastsProvider bottom=\"var(--space-9)\">\n <Provider {...rest}>\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n >\n {children}\n </Flex>\n </Provider>\n </ToastsProvider>\n)\n","'use client'\n\nimport { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nimport type { Args as SuperinterfaceProviderArgs } from '@/components/core/SuperinterfaceProvider'\n\nexport type Args = SuperinterfaceProviderArgs\nexport const Provider = SuperinterfaceProvider\n","import { useState, useCallback } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\nimport { CustomToast } from './CustomToast'\nimport { Toast as ToastType } from '@/types'\n\nexport const ToastsProvider = ({\n children,\n bottom = 0,\n}: {\n children: React.ReactNode\n bottom?: number | string\n}) => {\n const [toasts, setToasts] = useState<ToastType[]>([])\n const addToast = useCallback((toast: ToastType) => (\n setToasts((prevToasts) => [\n ...prevToasts,\n toast,\n ])\n ), [])\n\n return (\n <ToastsContext.Provider\n value={{\n toasts,\n addToast,\n }}\n >\n <Toast.Provider>\n {children}\n\n {Array.from(toasts).map((toast: ToastType, index: number) => (\n <CustomToast\n key={index}\n toast={toast}\n />\n ))}\n\n <Toast.Viewport\n style={{\n position: 'absolute',\n bottom,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--space-5)',\n gap: 'var(--space-3)',\n width: '390px',\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 99999999999999,\n outline: 'none',\n }}\n />\n </Toast.Provider>\n </ToastsContext.Provider>\n )\n}\n","import * as Toast from '@radix-ui/react-toast'\nimport {\n Card,\n Text,\n Flex,\n} from '@radix-ui/themes'\nimport {\n CheckCircledIcon,\n CrossCircledIcon,\n} from '@radix-ui/react-icons'\nimport { Toast as ToastType } from '@/types'\n\nexport const CustomToast = ({\n toast,\n}: {\n toast: ToastType,\n}) => (\n <Toast.Root>\n <Card>\n <Toast.Title>\n <Flex>\n <Flex\n pr=\"2\"\n height=\"14px\"\n align=\"center\"\n >\n {toast.type === 'success' ? (\n <CheckCircledIcon\n color=\"var(--accent-9)\"\n />\n ) : (\n <CrossCircledIcon\n color=\"var(--red-9)\"\n />\n )}\n </Flex>\n <Text\n weight=\"medium\"\n size=\"1\"\n >\n {toast.message}\n </Text>\n </Flex>\n </Toast.Title>\n </Card>\n </Toast.Root>\n)\n","import { Messages } from '@/components/threads/Thread/Messages'\nimport { MessageForm } from '@/components/threads/Thread/MessageForm'\nimport { Root, Args as RootArgs } from '@/components/threads/Thread/Root'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const Thread = (props: Args) => (\n <Root {...props}>\n <Messages />\n <MessageForm />\n </Root>\n)\n\nThread.Root = Root\nThread.Messages = Messages\nThread.MessageForm = MessageForm\n","import { useContext } from 'react'\nimport { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const useMessageContext = () => (\n useContext(MessageContext)\n)\n","import { useMemo } from 'react'\nimport {\n useQuery,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryOptions } from './lib/queryOptions'\n\ntype Args = {\n assistantId: string\n}\n\nexport const useAssistant = ({\n assistantId,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const props = useQuery(queryOptions({\n assistantId,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null,\n }), [props])\n}\n","import { queryOptions as tanstackQueryOptions } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryFn } from './queryFn'\n\ntype Args = {\n assistantId: string\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}\n\nexport const queryOptions = ({\n assistantId,\n superinterfaceContext,\n}: Args) => (\n tanstackQueryOptions({\n queryKey: ['assistants', { assistantId }],\n queryFn: queryFn({ superinterfaceContext }),\n })\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<['assistants', { assistantId: string }]>\n}\n\nexport const queryFn = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => async ({\n queryKey,\n}: QueryFunctionArgs) => {\n const [_key, { assistantId }] = queryKey\n\n const params = new URLSearchParams({\n publicApiKey: superinterfaceContext.variables.publicApiKey,\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/assistants/${assistantId}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<any>\n })\n}\n","import { useState } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Provider = ({\n children,\n}: Args) => {\n const threadDialogContext = useThreadDialogContext()\n const [isOpen, setIsOpen] = useState<boolean>(threadDialogContext.isOpen)\n\n return (\n <ThreadDialogContext.Provider\n value={{\n isOpen,\n setIsOpen,\n }}\n >\n {children}\n </ThreadDialogContext.Provider>\n )\n}\n","'use client'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const ThreadDialogContext = createContext<{\n isOpen: boolean\n setIsOpen: Dispatch<SetStateAction<boolean>>\n}>({\n isOpen: false,\n setIsOpen: () => {},\n})\n","import { useContext } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\n\nexport const useThreadDialogContext = () => (\n useContext(ThreadDialogContext)\n)\n","import { Provider } from '@/components/threads/ThreadDialog/Provider'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Root = ({\n children,\n}: Args) => (\n <Provider>\n {children}\n </Provider>\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Button } from './Button'\n\ntype Args = {\n children: React.ReactNode\n style?: React.CSSProperties\n}\n\nconst Root = ({\n children,\n style = {},\n}: Args) => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'none' : 'flex',\n sm: 'flex',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"fixed\"\n bottom=\"24px\"\n right=\"24px\"\n style={{\n zIndex: 9999999999,\n ...style,\n }}\n >\n {children}\n </Flex>\n )\n}\n\nexport const Trigger = (args: Omit<Args, 'children'>) => (\n <Root {...args}>\n <Button />\n </Root>\n)\n\nTrigger.Root = Root\nTrigger.Button = Button\n","import {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n ChatBubbleIcon,\n} from '@radix-ui/react-icons'\n\nexport const Button = () => (\n <IconButton\n size=\"4\"\n radius=\"full\"\n >\n <ChatBubbleIcon />\n </IconButton>\n)\n","import {\n Card,\n Inset,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Thread } from '@/components/threads/Thread'\nimport { Close } from '@/components/threads/ThreadDialog/Close'\n\ntype Args = {\n children: React.ReactNode\n style?: React.CSSProperties\n}\n\nconst Root = ({\n children,\n style = {},\n}: Args) => {\n const { isOpen } = useThreadDialogContext()\n if (!isOpen) return null\n\n return (\n <Flex\n direction=\"column\"\n justify=\"end\"\n position=\"fixed\"\n bottom={{\n initial: '0',\n sm: '72px',\n }}\n right={{\n initial: '0',\n sm: '24px',\n }}\n maxHeight={{\n initial: undefined,\n sm: '720px',\n }}\n maxWidth={{\n initial: undefined,\n sm: '400px',\n }}\n width=\"100%\"\n height={{\n initial: '100%',\n sm: 'calc(100% - 96px)',\n }}\n style={{\n zIndex: 9999999999,\n ...style,\n }}\n >\n <Card\n mb={{\n initial: undefined,\n sm: '3',\n }}\n style={{\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n }}\n >\n <Inset\n clip=\"padding-box\"\n side=\"all\"\n pb=\"current\"\n style={{\n display: 'flex',\n flexGrow: 1,\n }}\n >\n {children}\n </Inset>\n <Close />\n </Card>\n </Flex>\n )\n}\n\nconst Messages = () => (\n <Thread.Messages\n style={{\n paddingTop: 'var(--space-5)',\n paddingRight: 'var(--space-5)',\n paddingLeft: 'var(--space-5)',\n }}\n />\n)\n\nconst FormContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n direction=\"column\"\n pl=\"5\"\n pr=\"5\"\n pb=\"3\"\n flexShrink=\"0\"\n >\n {children}\n </Flex>\n)\n\nexport const Content = ({\n style = {},\n}: {\n style?: React.CSSProperties\n}) => (\n <Root style={style}>\n <Thread.Root>\n <Messages />\n <FormContainer>\n <Thread.MessageForm />\n </FormContainer>\n </Thread.Root>\n </Root>\n)\n\nContent.Root = Root\nContent.Messages = Messages\nContent.FormContainer = FormContainer\n","import {\n Cross1Icon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport const Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'flex' : 'none',\n sm: 'none',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"absolute\"\n top=\"24px\"\n right='24px'\n style={{\n zIndex: 9999999999,\n }}\n >\n <IconButton\n size=\"2\"\n variant=\"soft\"\n >\n <Cross1Icon />\n </IconButton>\n </Flex>\n )\n}\n","import { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const ThreadDialog = () => (\n <Root>\n <Content />\n <Trigger />\n </Root>\n)\n\nThreadDialog.Root = Root\nThreadDialog.Trigger = Trigger\nThreadDialog.Content = Content\n","'use client'\n\n// import 'regenerator-runtime/runtime'\nimport { Flex } from '@radix-ui/themes'\nimport _ from 'lodash'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { usePermission } from '@/hooks/misc/usePermission'\nimport { blobToData } from './lib/blobToData'\nimport { useStatus } from '@/hooks/audioThreads/useStatus'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\nexport type Args = {\n children: React.ReactNode\n}\n\nconst Content = ({\n children,\n}: Args) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const createMessageProps = useCreateMessage({\n onError: (error: unknown) => {\n createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n })(error)\n\n recorderProps.start()\n }\n })\n\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n },\n onStop: async (_event: any, chunks: BlobPart[]) => {\n // @ts-ignore-next-line\n const blob = new Blob(chunks, { type: chunks[0].type })\n const audioContent = await blobToData(blob)\n\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent,\n })\n },\n })\n\n const microphonePermission = usePermission({ name: 'microphone' })\n\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === 'granted') {\n recorderProps.start()\n }\n }\n })\n\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps,\n })\n\n return (\n <AudioThreadContext.Provider\n value={{\n status,\n recorderProps,\n messageAudioProps,\n }}\n >\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n p=\"9\"\n >\n {children}\n </Flex>\n </AudioThreadContext.Provider>\n )\n}\n\nexport const Root = ({\n children,\n}: Args) => (\n <ToastsProvider>\n <Content>\n {children}\n </Content>\n </ToastsProvider>\n)\n","'use client'\nimport { createContext } from 'react'\nimport { statusMessages } from '@/hooks/audioThreads/useStatus/lib/statusMessages'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport const AudioThreadContext = createContext<{\n status: keyof typeof statusMessages\n recorderProps: ReturnType<typeof useRecorder>\n messageAudioProps: ReturnType<typeof useMessageAudio>\n}>({\n status: 'idle',\n recorderProps: {\n status: 'idle',\n start: async () => {},\n stop: async () => {},\n pause: async () => {},\n resume: async () => {},\n visualizationAnalyser: null,\n },\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {},\n pause: async () => {},\n },\n})\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/usePermission.ts\nimport { useEffect, useState } from 'react';\nimport { noop, off, on } from './util';\n\nexport type IState = PermissionState | '';\n\ninterface IPushPermissionDescriptor extends PermissionDescriptor {\n name: 'push';\n userVisibleOnly?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IMidiPermissionDescriptor extends PermissionDescriptor {\n name: 'midi';\n sysex?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IDevicePermissionDescriptor extends PermissionDescriptor {\n name: 'camera' | 'microphone' | 'speaker';\n deviceId?: string;\n}\n\nexport type IPermissionDescriptor =\n | PermissionDescriptor\n | IPushPermissionDescriptor\n | IMidiPermissionDescriptor\n | IDevicePermissionDescriptor;\n\n// const usePermission = <T extends PermissionDescriptor>(permissionDesc: T): IState => {\nexport const usePermission = (permissionDesc: IPermissionDescriptor): IState => {\n const [state, setState] = useState<IState>('');\n\n useEffect(() => {\n let mounted = true;\n let permissionStatus: PermissionStatus | null = null;\n\n const onChange = () => {\n if (!mounted) {\n return;\n }\n setState(() => permissionStatus?.state ?? '');\n };\n\n navigator.permissions\n // @ts-ignore-next-line\n .query(permissionDesc)\n .then((status) => {\n permissionStatus = status;\n on(permissionStatus, 'change', onChange);\n onChange();\n })\n .catch(noop);\n\n return () => {\n permissionStatus && off(permissionStatus, 'change', onChange);\n mounted = false;\n permissionStatus = null;\n };\n }, [permissionDesc]);\n\n return state;\n};\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/misc/util.ts\nexport const noop = () => {};\n\nexport function on<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['addEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>));\n }\n}\n\nexport function off<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['removeEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>));\n }\n\n}\n","export const blobToData = (blob: Blob) => (\n new Promise((resolve) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result)\n reader.readAsDataURL(blob)\n })\n)\n","import { useMemo } from 'react'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { statusMessages } from './lib/statusMessages'\n\ntype Args = {\n messageAudioProps: ReturnType<typeof useMessageAudio>\n recorderProps: ReturnType<typeof useRecorder>\n createMessageProps: ReturnType<typeof useCreateMessage>\n}\n\nexport const useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps,\n}: Args) => {\n const latestMessageProps = useLatestMessage()\n\n const status = useMemo((): keyof typeof statusMessages => {\n if (recorderProps.status === 'recording') return 'recording'\n if (createMessageProps.isPending) return 'creatingMessage'\n\n if (messageAudioProps.paused || !messageAudioProps.isAudioPlayed) return 'playerPaused'\n if (messageAudioProps.playing || messageAudioProps.isPending) return 'playing'\n if (!messageAudioProps.isAudioPlayed && !messageAudioProps.isReady) return 'loading'\n if (latestMessageProps.latestMessage?.status === 'in_progress') return 'creatingMessage'\n if (recorderProps.status === 'idle') return 'idle'\n if (recorderProps.status === 'paused') return 'recorderPaused'\n\n return 'loading'\n }, [\n latestMessageProps,\n messageAudioProps,\n recorderProps,\n createMessageProps,\n ])\n\n return {\n status,\n }\n}\n","import dayjs, { Dayjs } from 'dayjs'\nimport { useAudioCapture, UseAudioCaptureProps } from 'use-audio-capture'\nimport { useMemo, useRef, useState, useCallback, useEffect } from 'react'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useInterval } from '@/hooks/misc/useInterval'\nimport { AudioEngine } from '@/types'\n\ntype Args = UseAudioCaptureProps & {\n isStopOnSilence: boolean\n}\n\nexport const useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop,\n}: Args) => {\n const [silenceStart, setSilenceStart] = useState<Dayjs | null>(null)\n const [noiseStart, setNoiseStart] = useState<Dayjs | null>(null)\n const [mediaStream, setMediaStream] = useState<MediaStream | null>(null)\n const [status, setStatus] = useState<'idle' | 'recording' | 'stopped' | 'paused'>('idle')\n const startAudioPlayer = useAudioPlayer()\n const endAudioPlayer = useAudioPlayer()\n const [isLoaded, setIsLoaded] = useState(false)\n\n useEffect(() => {\n if (isLoaded) return\n setIsLoaded(true)\n\n // startAudioPlayer.load('/sounds/warning.wav', {\n // html5: true,\n // })\n // endAudioPlayer.load('/sounds/success.wav', {\n // html5: true,\n // })\n }, [isLoaded, startAudioPlayer, endAudioPlayer])\n\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n // startAudioPlayer.play()\n setStatus('recording')\n setMediaStream(opts.mediaStream)\n isInited.current = false\n if (onStart) onStart(event, opts)\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onStop: async (...args) => {\n // endAudioPlayer.play()\n setStatus('stopped')\n if (onStop) await onStop(...args)\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onPause: () => {\n setStatus('paused')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onResume: () => {\n setStatus('recording')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n })\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isInited = useRef(false)\n\n useEffect(() => {\n if (!mediaStream) return\n if (isInited.current) return\n isInited.current = true\n\n const audioContext = new AudioContext()\n\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext,\n })\n }, [isInited, mediaStream])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const silenceAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n result.minDecibels = -60\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const handleSilence = useCallback(() => {\n if (!silenceAnalyser) return\n\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount)\n silenceAnalyser.getByteFrequencyData(frequencyData)\n\n const isSilent = frequencyData.every((f) => f === 0)\n\n setSilenceStart((silenceStart: Dayjs | null) => {\n if (isSilent) return silenceStart || dayjs()\n\n return null\n })\n\n setNoiseStart((noiseStart: Dayjs | null) => {\n if (isSilent) return noiseStart\n\n return noiseStart || dayjs()\n })\n\n requestAnimationFrame(() => handleSilence())\n }, [silenceAnalyser, setNoiseStart, setSilenceStart])\n\n useEffect(() => {\n if (!isStopOnSilence) return\n\n requestAnimationFrame(() => handleSilence())\n }, [handleSilence, isStopOnSilence])\n\n useInterval(() => {\n if (!isStopOnSilence) return\n if (status !== 'recording') return\n if (!silenceStart) return\n if (!noiseStart) return\n if (!silenceStart.isBefore(dayjs().subtract(1.5, 'second'))) return\n\n audioCaptureProps.stop()\n }, 300)\n\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser,\n }\n}\n","import { useEffect, useRef } from 'react';\n\nexport const useInterval = (callback: Function, delay?: number | null) => {\n const savedCallback = useRef<Function>(() => {})\n\n useEffect(() => {\n savedCallback.current = callback\n })\n\n useEffect(() => {\n if (delay !== null) {\n const interval = setInterval(() => savedCallback.current(), delay || 0)\n return () => clearInterval(interval)\n }\n\n return undefined\n }, [delay])\n}\n","import { useMemo, useRef, useState, useEffect } from 'react'\nimport nlp from 'compromise'\nimport { Howler } from 'howler'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AudioEngine } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { input as getInput } from './lib/input'\nimport { isHtmlAudioSupported } from './lib/isHtmlAudioSupported'\n\ntype MessageSentence = {\n messageId: string\n sentence: string\n}\n\nconst FULL_SENTENCE_REGEX = /[\\.?!]$/\n\nconst getMessageSentences = ({\n messageId,\n input,\n}: {\n messageId: string\n input: string\n}) => {\n const sentences = nlp(input).sentences().json()\n\n return sentences.map((sentence: { text: string }) => ({\n messageId,\n sentence: sentence.text,\n }))\n}\n\nexport const useMessageAudio = ({\n onEnd,\n}: {\n onEnd: () => void\n}) => {\n const [isAudioPlayed, setIsAudioPlayed] = useState(false)\n const [stoppedMessageIds, setStoppedMessageIds] = useState<string[]>([])\n const [playedMessageSentences, setPlayedMessageSentences] = useState<MessageSentence[]>([])\n const audioPlayer = useAudioPlayer()\n const nextAudioPlayer = useAudioPlayer()\n const superinterfaceContext = useSuperinterfaceContext()\n const [isPlaying, setIsPlaying] = useState(false)\n\n const latestMessageProps = useLatestMessage()\n\n const unplayedMessageSentences = useMemo(() => {\n if (!latestMessageProps.latestMessage) return []\n if (latestMessageProps.latestMessage.role !== 'assistant') return []\n if (stoppedMessageIds.includes(latestMessageProps.latestMessage.id)) return []\n\n const input = getInput({\n message: latestMessageProps.latestMessage,\n })\n\n if (!input) return []\n\n const messageSentences = getMessageSentences({\n messageId: latestMessageProps.latestMessage.id,\n input,\n })\n\n return messageSentences.filter((ms: { messageId: string, sentence: string }) => (\n !playedMessageSentences.find((pms) => pms.messageId === ms.messageId && pms.sentence === ms.sentence)\n ))\n }, [latestMessageProps, playedMessageSentences])\n\n useEffect(() => {\n if (isPlaying) return\n if (audioPlayer.playing) return\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'assistant') return\n\n const firstUnplayedMessageSentence = unplayedMessageSentences[0]\n if (!firstUnplayedMessageSentence) {\n return\n }\n\n const isFullSentence = isOptimistic({ id: latestMessageProps.latestMessage.id }) ||\n latestMessageProps.latestMessage.status !== 'in_progress' ||\n FULL_SENTENCE_REGEX.test(firstUnplayedMessageSentence.sentence)\n\n if (!isFullSentence) return\n setIsPlaying(true)\n\n setPlayedMessageSentences((prev) => [...prev, firstUnplayedMessageSentence])\n\n const searchParams = new URLSearchParams({\n input: firstUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${searchParams}`, {\n format: 'mp3',\n autoplay: isAudioPlayed,\n html5: isHtmlAudioSupported,\n onplay: () => {\n setIsAudioPlayed(true)\n },\n onstop: () => {\n setStoppedMessageIds((prev) => [...prev, firstUnplayedMessageSentence.messageId])\n setIsPlaying(false)\n },\n onload: () => {\n const nextUnplayedMessageSentence = unplayedMessageSentences[1]\n if (!nextUnplayedMessageSentence) return\n\n const isNextFullSentence = FULL_SENTENCE_REGEX.test(nextUnplayedMessageSentence.sentence)\n if (!isNextFullSentence) return\n\n const nextSearchParams = new URLSearchParams({\n input: nextUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n nextAudioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${nextSearchParams}`, {\n format: 'mp3',\n autoplay: false,\n html5: isHtmlAudioSupported,\n })\n },\n onend: () => {\n setIsPlaying(false)\n\n if (unplayedMessageSentences.length === 1 && latestMessageProps.latestMessage.status !== 'in_progress') {\n onEnd()\n }\n },\n })\n }, [\n unplayedMessageSentences,\n isPlaying,\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n nextAudioPlayer,\n playedMessageSentences,\n onEnd,\n ])\n\n useEffect(() => {\n if (isHtmlAudioSupported) {\n if (!Howler?._howls[0]?._sounds[0]?._node) return\n\n Howler._howls[0]._sounds[0]._node.crossOrigin = 'anonymous'\n }\n }, [audioPlayer])\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isAudioEngineInited = useRef(false)\n\n useEffect(() => {\n if (!audioPlayer.playing) return\n if (isAudioEngineInited.current) return\n isAudioEngineInited.current = true\n\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext()\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext,\n })\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx,\n })\n }\n }, [audioPlayer, isAudioEngineInited])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(audioEngine.audioContext.destination)\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const isPending = useMemo(() => isPlaying || unplayedMessageSentences.length > 0, [isPlaying, unplayedMessageSentences])\n\n return {\n isPending,\n isAudioPlayed,\n ...audioPlayer,\n visualizationAnalyser,\n }\n}\n","import OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { Message } from '@/types'\n\ntype Args = {\n message: Message\n}\n\nexport const input = ({\n message,\n}: Args) => {\n const textContents = message.content.filter((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.type === 'text'\n ))\n\n const result = textContents.map((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.text.value\n )).join(' ')\n\n if (isEmpty(result)) return null\n\n return result\n}\n","import { detect } from 'detect-browser'\n\nconst unsupportedNames = [\n 'safari',\n 'ios',\n]\n\nexport const isHtmlAudioSupported = !unsupportedNames.includes(detect()?.name || '')\n","import { useContext, useState, useCallback, useEffect } from 'react'\nimport _ from 'lodash'\nimport { Flex } from '@radix-ui/themes'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\n\nexport const Visualization = () => {\n const audioThreadContext = useAudioThreadContext()\n const assistantNameContext = useContext(AssistantNameContext)\n const [scale, setScale] = useState(0)\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setScale(1)\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n setScale(1 + _.mean(frequencyData) / 255 / 10)\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser })\n }, [draw, audioThreadContext])\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n mb=\"3\"\n flexGrow=\"1\"\n >\n <Flex\n align=\"center\"\n justify=\"center\"\n height=\"200px\"\n width=\"200px\"\n style={{\n backgroundColor: audioThreadContext.status === 'playing' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: '9999px',\n scale,\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.messageAudioProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'playing' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"40px\"\n barWidth=\"24px\"\n />\n </Flex>\n\n <Flex\n ml=\"-22.5px\"\n gap=\"3\"\n pt=\"5\"\n >\n <AssistantAvatar />\n <Name>\n {assistantNameContext}\n </Name>\n </Flex>\n </Flex>\n )\n}\n","import { useContext } from 'react'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\n\nexport const useAudioThreadContext = () => (\n useContext(AudioThreadContext)\n)\n","'use client'\nimport _ from 'lodash'\nimport {\n Flex,\n Grid,\n} from '@radix-ui/themes'\nimport { useState, useEffect, useCallback } from 'react'\nimport { cluster } from 'radash'\n\nconst barCount = 4\n\nexport const BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth,\n}: {\n visualizationAnalyser: AnalyserNode | null\n backgroundColor: string\n height: string\n barWidth: string\n}) => {\n const [barHeights, setBarHeights] = useState<number[]>([])\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setBarHeights(Array(barCount).fill(0))\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n // @ts-ignore-next-line\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount)\n\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => (\n _.mean(frequencyDataCluster) / 255 * 100\n ))\n )\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser })\n }, [draw, visualizationAnalyser])\n\n return (\n <Grid\n columns={`${barCount}`}\n gap=\"1\"\n width=\"auto\"\n style={{\n // TODO not sure why we need this\n gridTemplateColumns: 'repeat(4, minmax(0, 1fr))',\n }}\n >\n {barHeights.map((barHeight, index) => (\n <Flex\n key={index}\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n height={height}\n >\n <Flex\n minHeight=\"50%\"\n maxHeight=\"100%\"\n height={`${barHeight + 20}%`}\n width={barWidth}\n style={{\n backgroundColor,\n borderRadius: 'var(--radius-6)',\n }}\n />\n </Flex>\n ))}\n </Grid>\n )\n}\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\nconst html = ({ texts }: { texts: string[] }) => `\n .status-messages-texts:after {\n content: '${texts[0]}';\n animation: texts ${texts.length * 5}s linear infinite;\n }\n\n @keyframes texts {\n ${texts.map((_, i) => `\n ${i * 100 / texts.length}% {\n content: \"${texts[i]}\";\n }\n `).join('')}\n }`\n\nexport const StatusMessages = ({\n texts,\n}: {\n texts: string[]\n}) => (\n <Flex\n justify=\"center\"\n pb=\"5\"\n >\n <Text\n size=\"2\"\n weight=\"regular\"\n color=\"gray\"\n className=\"status-messages-texts\"\n />\n\n <style\n dangerouslySetInnerHTML={{\n __html: html({ texts }),\n }}\n />\n </Flex>\n)\n","import { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { StatusMessages } from './StatusMessages'\n\nexport const Status = () => {\n const audioThreadContext = useAudioThreadContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <StatusMessages\n texts={[\n 'Start speaking',\n 'Listening',\n 'Finish speaking to send',\n 'Click the button below to send manually',\n ]}\n />\n )\n }\n\n if (['recorderPaused', 'idle', 'playerPaused'].includes(audioThreadContext.status)) {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to activate',\n ]}\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to interrupt',\n ]}\n />\n )\n }\n\n return (\n <StatusMessages\n texts={[\n 'Thinking',\n ]}\n />\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { MicIcon } from './MicIcon'\nimport { ActionButton } from './ActionButton'\n\nexport const Form = () => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n >\n <Flex\n pb=\"3\"\n align=\"center\"\n >\n <Flex\n ml=\"-22.5px\"\n mr=\"2\"\n align=\"center\"\n >\n <MicIcon\n style={{\n color: audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)',\n }}\n />\n </Flex>\n\n <Flex\n px=\"2\"\n py=\"1\"\n style= {{\n backgroundColor: audioThreadContext.status === 'recording' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: 'var(--radius-6)',\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.recorderProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"20px\"\n barWidth=\"12px\"\n />\n </Flex>\n </Flex>\n\n <ActionButton />\n </Flex>\n )\n}\n","import { SVGProps } from 'react'\n\nexport const MicIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth={0}\n viewBox=\"0 0 384 512\"\n height=\"15\"\n width=\"15\"\n {...props}\n >\n <path\n stroke=\"none\"\n d=\"M192 0c-53 0-96 43-96 96v160c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464h-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h144c13.3 0 24-10.7 24-24s-10.7-24-24-24h-48v-33.6c85.8-11.7 152-85.3 152-174.4v-40c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128S64 326.7 64 256v-40z\"\n />\n </svg>\n)\n","import {\n Flex,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n StopIcon,\n PauseIcon,\n ArrowUpIcon,\n ResumeIcon,\n} from '@radix-ui/react-icons'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const ActionButton = () => {\n const audioThreadContext = useAudioThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <Flex\n align=\"center\"\n >\n <Flex\n mr=\"3\"\n ml=\"-7\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.pause}\n color=\"gray\"\n variant=\"soft\"\n size=\"1\"\n >\n <PauseIcon />\n </IconButton>\n </Flex>\n\n <IconButton\n onClick={audioThreadContext.recorderProps.stop}\n highContrast\n variant=\"soft\"\n size=\"4\"\n >\n <ArrowUpIcon />\n </IconButton>\n </Flex>\n )\n }\n\n if (audioThreadContext.status === 'recorderPaused') {\n return (\n <IconButton\n onClick={audioThreadContext.recorderProps.resume}\n color=\"red\"\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'idle') {\n return (\n <IconButton\n onClick={() => audioThreadContext.recorderProps.start()}\n size=\"4\"\n color=\"red\"\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <IconButton\n onClick={() => {\n audioThreadContext.messageAudioProps.stop()\n superinterfaceContext.createMessageAbortControllerRef.current?.abort()\n audioThreadContext.recorderProps.start()\n }}\n size=\"4\"\n color=\"gray\"\n variant=\"soft\"\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'playerPaused') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.play()}\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n size=\"4\"\n variant=\"soft\"\n disabled\n />\n )\n}\n","import { Root, Args as RootArgs } from './Root'\nimport { Visualization } from './Visualization'\nimport { Status } from './Status'\nimport { Form } from './Form'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const AudioThread = (props: Args) => (\n <Root {...props}>\n <Visualization />\n <Status />\n <Form />\n </Root>\n)\n\nAudioThread.Root = Root\nAudioThread.Visualization = Visualization\nAudioThread.Status = Status\nAudioThread.Form = Form\n","import { AudioThread } from '@/components/threads/AudioThread'\nimport { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const AudioThreadDialog = () => (\n <Root>\n <Content.Root>\n <AudioThread />\n </Content.Root>\n <Trigger />\n </Root>\n)\n\nAudioThreadDialog.Root = Root\nAudioThreadDialog.Trigger = Trigger\nAudioThreadDialog.Content = Content\n","import { useMemo } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { Content } from './Content'\nimport { Item } from './Item'\n\nexport const Suggestions = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const latestMessageProps = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps])\n\n if (latestMessageProps.isLoading) return null\n if (isDisabled) return null\n\n return (\n <Content>\n {children}\n </Content>\n )\n}\n\nSuggestions.Item = Item\n","import { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport { onlyText } from 'react-children-utilities'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { Item } from './Item'\n\nexport const Content = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const isMutatingMessage = useIsMutatingMessage()\n\n const suggestions = useMemo(() => (\n onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim())\n ), [children])\n\n if (isEmpty(suggestions)) return null\n\n return (\n <Flex\n gap=\"2\"\n py=\"2\"\n wrap=\"wrap\"\n >\n {suggestions.map((suggestion) => (\n <Item\n key={suggestion}\n suggestion={suggestion}\n isDisabled={isMutatingMessage}\n />\n ))}\n </Flex>\n )\n}\n","import {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Text,\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\n\nexport const Item = ({\n suggestion,\n isDisabled,\n}: {\n suggestion: string\n isDisabled: boolean\n}) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n return (\n <Content\n onClick={() => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion,\n })\n }}\n isDisabled={isDisabled}\n isPending={isPending}\n >\n {suggestion}\n </Content>\n )\n}\n\nconst Content = ({\n onClick,\n isDisabled,\n isPending,\n children,\n}: {\n onClick: () => void\n isDisabled: boolean\n isPending: boolean\n children: React.ReactNode\n}) => (\n <Button\n variant=\"soft\"\n onClick={onClick}\n disabled={isDisabled}\n style={{\n minHeight: 'var(--base-button-height)',\n height: 'inherit',\n flexShrink: 1,\n }}\n >\n <Text\n size=\"1\"\n weight=\"regular\"\n >\n {children}\n </Text>\n\n <Spinner loading={isPending}>\n <ArrowUpIcon\n style={{\n flexShrink: 0,\n }}\n />\n </Spinner>\n </Button>\n)\n\nItem.Content = Content\n","import { useMemo } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { merge } from '@/lib/misc/merge'\n\nexport const MarkdownProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevMarkdownContext = useMarkdownContext()\n\n const value = useMemo(() => (\n merge(prevMarkdownContext, rest)\n ), [rest, prevMarkdownContext])\n\n return (\n <MarkdownContext.Provider\n value={value}\n >\n {children}\n </MarkdownContext.Provider>\n )\n}\n","import { AvatarType as AvatarTypeEnum } from '@/lib/enums'\nimport { Avatar as AvatarType } from '@/types'\nimport { Avatar as RadixAvatar } from '@radix-ui/themes'\nimport { ImageAvatar } from '@/components/imageAvatars/ImageAvatar'\nimport { IconAvatar } from '@/components/iconAvatars/IconAvatar'\n\nexport const Avatar = ({\n avatar,\n size = '1',\n}: {\n avatar: AvatarType\n size?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n}) => {\n if (avatar) {\n if (avatar.type === AvatarTypeEnum.IMAGE && avatar.imageAvatar) {\n return (\n <ImageAvatar\n imageAvatar={avatar.imageAvatar}\n size={size}\n />\n )\n }\n\n if (avatar.type === AvatarTypeEnum.ICON && avatar.iconAvatar) {\n return (\n <IconAvatar\n iconAvatar={avatar.iconAvatar}\n size={size}\n />\n )\n }\n }\n\n return (\n <RadixAvatar\n fallback=\"\"\n size={size}\n />\n )\n}\n","import { Avatar } from '@radix-ui/themes'\nimport { Size, ImageAvatar as ImageAvatarType } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { optimizedSrc } from './lib/optimizedSrc'\n\nexport const ImageAvatar = ({\n imageAvatar,\n size,\n}: {\n imageAvatar: ImageAvatarType\n size: Size\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n\n return (\n <Avatar\n fallback=\"\"\n src={optimizedSrc({ imageAvatar, size, superinterfaceContext })}\n size={size}\n />\n )\n}\n","import { Size, ImageAvatar } from '@/types'\n\nconst width = ({\n size,\n}: {\n size: Size\n}) => {\n if (size === '1') {\n return 48\n } else if (size === '2') {\n return 64\n } else if (size === '3') {\n return 96\n } else if (size === '4') {\n return 96\n } else if (size === '5') {\n return 128\n } else if (size === '6') {\n return 256\n } else if (size === '7') {\n return 256\n } else if (size === '8') {\n return 256\n } else if (size === '9') {\n return 384\n }\n\n return 384\n}\n\nexport const path = ({\n imageAvatar,\n size,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n}) => (\n `/_next/image?url=${encodeURIComponent(imageAvatar.url)}&w=${width({ size })}&q=95`\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const host = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.baseUrl) return ''\n if (!/^https?:\\/\\//i.test(superinterfaceContext.baseUrl)) return ''\n\n return new URL(superinterfaceContext.baseUrl).origin\n}\n","import { Size, ImageAvatar } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { path } from './path'\nimport { host } from './host'\n\nexport const optimizedSrc = ({\n imageAvatar,\n size,\n superinterfaceContext,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!imageAvatar.url) return ''\n if (imageAvatar.url.endsWith('.svg')) return imageAvatar.url\n\n return `${host({ superinterfaceContext })}${path({ imageAvatar, size })}`\n}\n","import { useMemo } from 'react'\nimport { IconAvatar as IconAvatarType } from '@/types'\nimport { Avatar } from '@radix-ui/themes'\nimport { iconAvatarComponents } from '@/lib/iconAvatars/iconAvatarComponents'\n\nexport const IconAvatar = ({\n iconAvatar,\n size,\n}: {\n iconAvatar: IconAvatarType\n size: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n}) => {\n const Component = useMemo(() => (\n iconAvatarComponents[iconAvatar.name]\n ), [iconAvatar])\n\n return (\n <Avatar\n size={size}\n fallback={(\n Component ? (\n <Component />\n ) : (\n ''\n )\n )}\n />\n )\n}\n","import { IconAvatarName } from '@/lib/enums'\nimport {\n BackpackIcon,\n RocketIcon,\n MagicWandIcon,\n CubeIcon,\n TargetIcon,\n DiscIcon,\n GlobeIcon,\n StarIcon,\n LightningBoltIcon,\n FaceIcon,\n PersonIcon,\n HeartIcon,\n} from '@radix-ui/react-icons'\n\nexport const iconAvatarComponents = {\n [IconAvatarName.BACKPACK]: BackpackIcon,\n [IconAvatarName.ROCKET]: RocketIcon,\n [IconAvatarName.MAGIC_WAND]: MagicWandIcon,\n [IconAvatarName.CUBE]: CubeIcon,\n [IconAvatarName.TARGET]: TargetIcon,\n [IconAvatarName.DISC]: DiscIcon,\n [IconAvatarName.GLOBE]: GlobeIcon,\n [IconAvatarName.STAR]: StarIcon,\n [IconAvatarName.LIGHTNING_BOLT]: LightningBoltIcon,\n [IconAvatarName.FACE]: FaceIcon,\n [IconAvatarName.PERSON]: PersonIcon,\n [IconAvatarName.HEART]: HeartIcon,\n}\n","import { useMemo } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\nimport { useComponents } from '@/hooks/components/useComponents'\nimport { merge } from '@/lib/misc/merge'\n\nexport const ComponentsProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevComponents = useComponents()\n\n const value = useMemo(() => (\n merge(prevComponents, rest)\n ), [rest, prevComponents])\n\n return (\n <ComponentsContext.Provider\n value={value}\n >\n {children}\n </ComponentsContext.Provider>\n )\n}\n","import { useContext } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\nexport const useComponents = () => (\n useContext(ComponentsContext)\n)\n","import { useMemo } from 'react'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { MarkdownProvider } from '@/components/markdown/MarkdownProvider'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { useAssistant } from '@/hooks/assistants/useAssistant'\nimport { Avatar } from '@/components/avatars/Avatar'\nimport { Theme } from '@radix-ui/themes'\nimport { Code } from './Code'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const AssistantProvider = ({\n children,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { assistant } = useAssistant({\n assistantId: superinterfaceContext.variables.assistantId,\n })\n\n const markdownContext = useMarkdownContext()\n\n const components = useMemo(() => ({\n code: (props: JSX.IntrinsicElements['code']) => (\n // @ts-ignore-next-line\n <Code\n {...props}\n markdownContext={markdownContext}\n />\n ),\n }), [markdownContext])\n\n if (!assistant) {\n return null\n }\n\n return (\n <Theme\n accentColor={assistant.theme.accentColor}\n grayColor={assistant.theme.grayColor}\n radius={assistant.theme.radius}\n appearance={assistant.theme.appearance}\n scaling={assistant.theme.scaling}\n panelBackground=\"solid\"\n hasBackground={false}\n >\n <AssistantNameContext.Provider value={assistant.name}>\n <AssistantAvatarContext.Provider\n value={\n <Avatar\n avatar={assistant.avatar}\n />\n }\n >\n <MarkdownProvider\n // @ts-ignore-next-line\n components={components}\n >\n {children}\n </MarkdownProvider>\n </AssistantAvatarContext.Provider>\n </AssistantNameContext.Provider>\n </Theme>\n )\n}\n","import { useMemo } from 'react'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { Suggestions } from '@/components/suggestions/Suggestions'\nimport { useMessageContext } from '@/hooks/messages/useMessageContext'\n\nexport const Code = ({\n children,\n className,\n markdownContext,\n}: {\n children: string,\n className: string,\n markdownContext: ReturnType<typeof useMarkdownContext>\n}) => {\n const messageContext = useMessageContext()\n\n const isAssistantMessage = useMemo(() => (\n messageContext.message?.role === 'assistant'\n ), [messageContext])\n\n if (!isAssistantMessage || className !== 'language-suggestions') {\n return markdownContext.components.code({ children, className })\n }\n\n return <Suggestions>{children}</Suggestions>\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/core/SuperinterfaceProvider/index.tsx","../src/lib/misc/merge/index.ts","../src/lib/misc/merge/customizer.ts","../src/contexts/core/SuperinterfaceContext/index.tsx","../src/lib/superinterfaceCloud/baseUrl.ts","../src/lib/threadIdCookies/options/get.ts","../src/lib/threadIdCookies/key.ts","../src/lib/threadIdCookies/options/set.ts","../src/lib/threadIdCookies/options/index.ts","../src/hooks/core/useSuperinterfaceContext/index.ts","../src/components/threads/Thread/Messages/index.tsx","../src/components/threads/Thread/Messages/Content/index.tsx","../src/hooks/messages/useMessages/index.tsx","../src/lib/threads/queryOptions/index.ts","../src/lib/threads/queryOptions/variableParams.ts","../src/lib/messages/messagesQueryOptions.ts","../src/hooks/messageGroups/useMessageGroups/index.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts","../src/lib/messages/order.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/newGroupItem.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/index.ts","../src/components/skeletons/MessagesSkeleton/index.tsx","../src/components/messageGroups/MessageGroupBase/index.tsx","../src/components/messageGroups/MessageGroupBase/Name.tsx","../src/hooks/toasts/useToasts/index.ts","../src/contexts/toasts/ToastsContext/index.ts","../src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx","../src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx","../src/contexts/assistants/AssistantAvatarContext/index.tsx","../src/contexts/assistants/AssistantNameContext/index.tsx","../src/components/messageGroups/MessageGroupBase/UserAvatar.tsx","../src/contexts/users/UserAvatarContext/index.tsx","../src/components/threads/Thread/Messages/Content/MessageGroup/Content/index.tsx","../src/components/threads/Thread/Message/index.tsx","../src/components/skeletons/StartingContentSkeleton/index.tsx","../src/components/runSteps/RunSteps/index.tsx","../src/contexts/components/ComponentsContext/index.tsx","../src/components/runSteps/RunStep/ToolCalls/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx","../src/contexts/functions/FunctionComponentsContext/index.tsx","../src/components/functions/FunctionBase/index.tsx","../src/components/toolCalls/ToolCallBase/index.tsx","../src/components/toolCalls/ToolCallBase/ToolCallTitle.tsx","../src/components/toolCalls/ToolCallBase/ToolCallIcon.tsx","../src/components/functions/FunctionBase/Content/index.tsx","../src/components/functions/FunctionBase/Content/lib/formattedJsonOrRaw.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/lib/title.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/Content.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/FileSearch.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fallback.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx","../src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx","../src/components/runSteps/RunStep/index.tsx","../src/hooks/messages/useIsMutatingMessage/index.ts","../src/contexts/messages/MessageContext/index.ts","../src/components/threads/Thread/Message/Provider.tsx","../src/components/threads/Thread/Message/Attachments/index.tsx","../src/components/threads/Thread/Message/ContentPart/TextContent.tsx","../src/hooks/markdown/useMarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/lib/components/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Link.tsx","../src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/OrderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/ListItem.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Code.tsx","../src/components/images/Image.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isVideoSrc.ts","../src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isAudioSrc.ts","../src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx","../src/components/media/PlayButton.tsx","../src/components/media/VolumeButton.tsx","../src/components/media/Time.tsx","../src/components/media/MediaContainer.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/Video/FullscreenButton.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/Audio/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/AnnotationBase.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/FilePathAnnotation.tsx","../src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts","../src/lib/remark/remarkAnnotation.ts","../src/components/threads/Thread/Message/ContentPart/ImageFileContent.tsx","../src/components/threads/Thread/Message/ContentPart/index.tsx","../src/components/threads/Thread/Messages/Progress/index.tsx","../src/components/skeletons/StartingSkeleton/index.tsx","../src/hooks/messages/useLatestMessage/index.ts","../src/lib/optimistic/isOptimistic.ts","../src/components/threads/Thread/Messages/Root/index.tsx","../src/hooks/misc/useInfiniteScroll/index.tsx","../src/hooks/misc/useThrottledEffect/index.tsx","../src/components/threads/Thread/Messages/NextPageSkeleton.tsx","../src/components/threads/Thread/MessageForm/Submit/index.tsx","../src/hooks/messages/useMessageFormContext/index.ts","../src/contexts/messages/MessageFormContext/index.ts","../src/components/threads/Thread/MessageForm/Root/index.tsx","../src/hooks/messages/useCreateMessage/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts","../src/lib/optimistic/optimisticId.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/extendMessage.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageDelta.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCompleted.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunFailed.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepDelta.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCompleted.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunRequiresAction.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/body.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/index.ts","../src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts","../src/lib/errors/createMessageDefaultOnError.ts","../src/components/threads/Thread/MessageForm/Field/index.tsx","../src/components/threads/Thread/MessageForm/Field/Control.tsx","../src/hooks/misc/usePrevious.ts","../src/components/textareas/TextareaBase/index.tsx","../src/components/threads/Thread/MessageForm/Field/Files/Preview.tsx","../src/components/threads/Thread/MessageForm/Field/Files/Control.tsx","../src/hooks/files/useCreateFile/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/formData.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/index.ts","../src/components/threads/Thread/MessageForm/Field/Files/index.tsx","../src/components/threads/Thread/MessageForm/index.tsx","../src/components/threads/Thread/Root/index.tsx","../src/components/threads/Thread/Provider/index.tsx","../src/components/toasts/ToastsProvider/index.tsx","../src/components/toasts/ToastsProvider/CustomToast.tsx","../src/components/threads/Thread/index.tsx","../src/hooks/messages/useMessageContext/index.ts","../src/hooks/assistants/useAssistant/index.ts","../src/hooks/assistants/useAssistant/lib/queryOptions/index.ts","../src/hooks/assistants/useAssistant/lib/queryOptions/queryFn.ts","../src/components/threads/ThreadDialog/Provider/index.tsx","../src/contexts/threads/ThreadDialogContext/index.ts","../src/hooks/threads/useThreadDialogContext/index.ts","../src/components/threads/ThreadDialog/Root/index.tsx","../src/components/threads/ThreadDialog/Trigger/index.tsx","../src/components/threads/ThreadDialog/Trigger/Button.tsx","../src/components/threads/ThreadDialog/Content/index.tsx","../src/components/threads/ThreadDialog/Close/index.tsx","../src/components/threads/ThreadDialog/index.tsx","../src/components/threads/AudioThread/Root/index.tsx","../src/contexts/threads/AudioThreadContext/index.ts","../src/hooks/misc/usePermission/index.ts","../src/hooks/misc/usePermission/util.ts","../src/components/threads/AudioThread/Root/lib/blobToData.ts","../src/hooks/audioThreads/useStatus/index.ts","../src/hooks/audioThreads/useRecorder/index.ts","../src/hooks/misc/useInterval.ts","../src/hooks/audioThreads/useMessageAudio/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/input.ts","../src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts","../src/components/threads/AudioThread/Visualization/index.tsx","../src/hooks/threads/useAudioThreadContext/index.ts","../src/components/threads/AudioThread/BarsVisualizer/index.tsx","../src/components/threads/AudioThread/Status/StatusMessages.tsx","../src/components/threads/AudioThread/Status/index.tsx","../src/components/threads/AudioThread/Form/index.tsx","../src/components/threads/AudioThread/Form/MicIcon.tsx","../src/components/threads/AudioThread/Form/ActionButton/index.tsx","../src/components/threads/AudioThread/index.tsx","../src/components/threads/AudioThreadDialog/index.tsx","../src/components/suggestions/Suggestions/index.tsx","../src/components/suggestions/Suggestions/Content.tsx","../src/components/suggestions/Suggestions/Item.tsx","../src/components/markdown/MarkdownProvider/index.tsx","../src/components/avatars/Avatar.tsx","../src/components/imageAvatars/ImageAvatar/index.tsx","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/path.ts","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/host.ts","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/index.ts","../src/components/iconAvatars/IconAvatar.tsx","../src/lib/iconAvatars/iconAvatarComponents.ts","../src/components/components/ComponentsProvider.tsx","../src/hooks/components/useComponents.ts","../src/components/assistants/AssistantProvider/index.tsx","../src/components/assistants/AssistantProvider/Code.tsx"],"names":["Avatar","import_react","import_lodash","_","Cookies","import_js_cookie","baseUrl","import_themes","import_react_query","path","queryKey","import_radash","messages","import_jsx_runtime","MessageGroupBase","MessagesSkeleton","import_react_icons","title","Content","RadixLink","RadixStrong","Code","RadixCode","videoExtensions","VidstackPlayButton","value","VidstackFullscreenButton","import_base","flatMap","remarkGfm","getRemarkPlugins","Markdown","laterRunSteps","olderRunSteps","messageGroups","Root","Button","dayjs","key","import_zod","data","import_react_hook_form","TextareaBase","TextareaAutosize","import_dayjs","body","mutationFn","mutationOptions","Control","RadixContainer","Provider","Toast","queryOptions","tanstackQueryOptions","Messages","silenceStart","noiseStart","import_react_use_audio_player","input","nlp","visualizationAnalyser","RadixAvatar","components"],"mappings":"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","sourcesContent":["export { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nexport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport { Thread } from '@/components/threads/Thread'\nexport { useThreadContext } from '@/hooks/threads/useThreadContext'\nexport { useMessages } from '@/hooks/messages/useMessages'\nexport { useMessageContext } from '@/hooks/messages/useMessageContext'\nexport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nexport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nexport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\n\nexport { useAssistant } from '@/hooks/assistants/useAssistant'\n\nexport { ThreadDialog } from '@/components/threads/ThreadDialog'\nexport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nexport { AudioThreadDialog } from '@/components/threads/AudioThreadDialog'\nexport { AudioThread } from '@/components/threads/AudioThread'\nexport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nexport { MarkdownProvider } from '@/components/markdown/MarkdownProvider'\nexport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\nexport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nexport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\nexport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\nexport { Avatar } from '@/components/avatars/Avatar'\n\nexport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nexport { FunctionBase } from '@/components/functions/FunctionBase'\n\nexport { ComponentsProvider } from '@/components/components/ComponentsProvider'\nexport { useComponents } from '@/hooks/components/useComponents'\n\nexport { RunStep } from '@/components/runSteps/RunStep'\nexport { AssistantProvider } from '@/components/assistants/AssistantProvider'\n","'use client'\nimport { useRef } from 'react'\nimport { MessagesPage } from '@/types'\nimport {\n InfiniteData,\n UseInfiniteQueryOptions,\n UseMutationOptions,\n} from '@tanstack/react-query'\nimport { merge } from '@/lib/misc/merge'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { options } from '@/lib/threadIdCookies/options'\n\nexport type Args = {\n children: React.ReactNode\n baseUrl?: string\n variables?: {\n [key: string]: any\n }\n defaultOptions?: {\n queries?: UseInfiniteQueryOptions<InfiniteData<MessagesPage>>\n mutations?: UseMutationOptions\n }\n threadIdCookieOptions?: typeof options | null\n}\n\nexport const SuperinterfaceProvider = ({\n children,\n baseUrl,\n variables,\n defaultOptions,\n threadIdCookieOptions,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const createMessageAbortControllerRef = useRef<AbortController | null>(null)\n\n const value = merge(\n superinterfaceContext,\n {\n ...(baseUrl ? { baseUrl } : {}),\n ...(variables ? { variables } : {}),\n ...(defaultOptions ? { defaultOptions } : {}),\n ...(threadIdCookieOptions ? { threadIdCookieOptions } : {}),\n createMessageAbortControllerRef,\n }\n )\n\n return (\n <SuperinterfaceContext.Provider\n value={value}\n >\n {children}\n </SuperinterfaceContext.Provider>\n )\n}\n","import _ from 'lodash'\nimport { customizer } from './customizer'\n\n// @ts-ignore-next-line\nexport const merge = (obj, ...sources) =>\n _.mergeWith(_.cloneDeep(obj), ...sources, customizer)\n","import _ from 'lodash'\n\n// @ts-ignore-next-line\nexport const customizer = (objectValue, srcValue) => {\n if (!_.isArray(objectValue)) return\n\n return srcValue\n}\n","'use client'\nimport { createContext } from 'react'\nimport { baseUrl } from '@/lib/superinterfaceCloud/baseUrl'\nimport { options } from '@/lib/threadIdCookies/options'\n\nexport const SuperinterfaceContext = createContext<{\n baseUrl: string | null\n variables: Record<string, any>\n defaultOptions: {\n queries: Record<string, any>\n mutations: Record<string, any>\n }\n threadIdCookieOptions: typeof options | null\n createMessageAbortControllerRef: React.MutableRefObject<AbortController | null>\n}>({\n baseUrl,\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {},\n },\n threadIdCookieOptions: options,\n createMessageAbortControllerRef: { current: null },\n})\n","export const baseUrl = 'https://superinterface.ai/api/cloud'\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdCookies/key'\n\nexport const get = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n Cookies.get(key({ assistantId }))\n)\n","export const key = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n `superinterface-${assistantId}-threadId`\n)\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdCookies/key'\n\nexport const set = ({\n assistantId,\n threadId,\n}: {\n assistantId: string\n threadId: string\n}) => (\n Cookies.set(key({ assistantId }), threadId, {\n expires: 7,\n })\n)\n","import { get } from './get'\nimport { set } from './set'\n\nexport const options = {\n get,\n set,\n}\n","'use client'\nimport { useContext } from 'react'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\n\nexport const useSuperinterfaceContext = () => (\n useContext(SuperinterfaceContext)\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Content } from './Content'\nimport { Progress } from './Progress'\nimport { Root } from './Root'\nimport { NextPageSkeleton } from './NextPageSkeleton'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n children?: React.ReactNode\n style?: React.CSSProperties\n}\n\nexport const Messages = ({\n children,\n style = {},\n}: Args) => (\n <Root style={style}>\n <Flex\n flexShrink=\"0\"\n height=\"var(--space-3)\"\n />\n\n <Progress />\n\n {children}\n\n <Content />\n\n <NextPageSkeleton />\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n minHeight=\"var(--space-5)\"\n />\n </Root>\n)\n\nMessages.Root = Root\nMessages.Message = Message\nMessages.NextPageSkeleton = NextPageSkeleton\n","'use client'\nimport { useEffect } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useMessageGroups } from '@/hooks/messageGroups/useMessageGroups'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { MessageGroup } from './MessageGroup'\n\nexport const Content = () => {\n const {\n messages,\n isLoading,\n isLoadingError,\n } = useMessages()\n\n const { addToast } = useToasts()\n\n const { messageGroups } = useMessageGroups({\n messages,\n })\n\n useEffect(() => {\n if (isLoadingError) {\n addToast({ type: 'error', message: 'Could not load messages. Please try again.' })\n }\n }, [isLoadingError, addToast])\n\n if (isLoading || isLoadingError) {\n return (\n <MessagesSkeleton />\n )\n }\n\n return (\n <>\n {messageGroups.map((messageGroup: MessageGroupType) => (\n <MessageGroup\n key={messageGroup.id}\n messageGroup={messageGroup}\n />\n ))}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport {\n InfiniteData,\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { SerializedMessage, MessagesPage } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { messagesQueryOptions } from '@/lib/messages/messagesQueryOptions'\n\nconst messages = ({\n props,\n}: {\n props: {\n data: InfiniteData<MessagesPage> | undefined\n },\n}) => {\n if (!props.data) return []\n\n return props.data.pages.reduce<SerializedMessage[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n\n\nexport const useMessages = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props }),\n }), [props])\n}\n","import {\n useQueryClient,\n infiniteQueryOptions,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { MessagesPage } from '@/types'\nimport { variableParams } from './variableParams'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<[string, { [key: string]: any }]>\n pageParam?: string\n}\n\nexport const queryOptions = ({\n queryKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables]\n\n return infiniteQueryOptions<MessagesPage>({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey,\n }: QueryFunctionArgs) => {\n const [_key, variables] = queryKey\n const params = new URLSearchParams({\n ...(pageParam ? { pageParam } : {}),\n ...variableParams({ variables, superinterfaceContext }),\n })\n\n return fetch(`${superinterfaceContext.baseUrl}${path}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<MessagesPage>\n })\n },\n initialPageParam: undefined,\n getNextPageParam: (lastPage: MessagesPage) => {\n if (!lastPage.hasNextPage) return null\n\n return lastPage.lastId\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const variableParams = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdCookieOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdCookieOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['messages'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { useMemo } from 'react'\nimport { messageGroups as getMessageGroups } from './lib/messageGroups'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const useMessageGroups = ({\n messages,\n}: Args) => (\n useMemo(\n () => ({\n messageGroups: getMessageGroups({ messages }),\n }),\n [messages]\n )\n)\n","import _ from 'lodash'\nimport { last } from 'radash'\nimport { SerializedMessage, MessageGroup } from '@/types'\nimport { order } from '@/lib/messages/order'\nimport { newGroup } from './newGroup'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const messageGroups = ({\n messages,\n}: Args) =>\n _.reduce(\n order({ messages }),\n (groups: MessageGroup[], message: SerializedMessage) => {\n const group = last(groups)\n\n if (!group) return newGroup({ groups, message })\n\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message,\n })\n }\n\n return [\n ..._.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message],\n },\n ]\n },\n []\n )\n","import { sort } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const order = ({ messages }: Args) =>\n sort(messages, m => m.created_at, true)\n","import { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const newGroupItem = ({ message }: Args) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message],\n})\n","import { SerializedMessage, MessageGroup } from '@/types'\nimport { newGroupItem } from './newGroupItem'\n\ntype Args = {\n groups: MessageGroup[]\n message: SerializedMessage\n}\n\nexport const newGroup = ({ groups, message }: Args) => [\n ...groups,\n newGroupItem({\n message,\n }),\n]\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Avatar,\n Box,\n Skeleton,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\n\nexport const MessagesSkeleton = forwardRef(function MessagesSkeleton(_props, ref) {\n return (\n <MessageGroupBase ref={ref}>\n <Skeleton loading>\n <Avatar\n fallback={<Flex />}\n size=\"1\"\n />\n </Skeleton>\n\n <Box\n pb=\"3\"\n >\n <Name>\n <Skeleton\n loading\n style={{\n width: '128px',\n }}\n />\n </Name>\n\n <Skeleton\n loading\n style={{\n width: '256px',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n </Box>\n </MessageGroupBase>\n )\n})\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Container,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const MessageGroupBase = forwardRef(function MessageGroupBase({\n children,\n}: Args, ref: React.Ref<HTMLDivElement>) {\n return (\n <Container\n ref={ref}\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n flexShrink=\"0\"\n gap=\"3\"\n >\n {children}\n </Flex>\n </Container>\n )\n})\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Name = ({\n children,\n}: Args) => (\n <Flex\n align=\"center\"\n height=\"var(--space-5)\"\n >\n <Text\n size=\"2\"\n weight=\"bold\"\n >\n {children}\n </Text>\n </Flex>\n)\n","import { useContext } from 'react'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\n\nexport const useToasts = () => (\n useContext(ToastsContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { Toast } from '@/types'\n\nexport const ToastsContext = createContext<{\n toasts: Toast[]\n addToast: (toast: Toast) => void\n}>({\n toasts: [],\n addToast: () => {},\n})\n","'use client'\nimport { useContext } from 'react'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { UserAvatar } from '@/components/messageGroups/MessageGroupBase/UserAvatar'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { Content } from './Content'\n\ntype Args = {\n messageGroup: MessageGroupType\n}\n\nexport const MessageGroup = ({\n messageGroup,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n {messageGroup.role === 'user' ? (\n <UserAvatar />\n ) : (\n <AssistantAvatar />\n )}\n\n <Box flexGrow=\"1\">\n <Name>\n {messageGroup.role === 'user' ? 'You' : assistantNameContext}\n </Name>\n\n <Content\n messageGroup={messageGroup}\n />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\n\nexport const AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext(AssistantAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {AssistantAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n LightningBoltIcon,\n} from '@radix-ui/react-icons'\n\nexport const AssistantAvatarContext = createContext(\n <Avatar\n fallback={<LightningBoltIcon />}\n size=\"1\"\n />\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const AssistantNameContext = createContext('Assistant')\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\n\nexport const UserAvatar = () => {\n const UserAvatarContextValue = useContext(UserAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {UserAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n PersonIcon,\n} from '@radix-ui/react-icons'\n\nexport const UserAvatarContext = createContext(\n <Avatar\n fallback={<PersonIcon />}\n size=\"1\"\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { MessageGroup } from '@/types'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n messageGroup: MessageGroup\n}\n\nexport const Content = ({\n messageGroup,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {messageGroup.messages.map((message) => (\n <Message\n key={message.id}\n message={message}\n />\n ))}\n </Flex>\n)\n","import _ from 'lodash'\nimport { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { SerializedMessage } from '@/types'\nimport { RunSteps } from '@/components/runSteps/RunSteps'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { Provider } from './Provider'\nimport { Attachments } from './Attachments'\nimport { ContentPart } from './ContentPart'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const Message = ({\n message,\n}: Args) => {\n const [olderRunSteps, laterRunSteps] = useMemo(() => {\n if (!message.runSteps.length) return [[], []]\n\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== 'message_creation') return\n\n return runStep.step_details.message_creation.message_id === message.id\n })\n\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0\n }\n const laterRunSteps = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex)\n\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n\n let olderRunSteps\n\n if (prevRunStepIndex === -1) {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1)\n } else {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex)\n }\n\n return [olderRunSteps, laterRunSteps]\n }, [message])\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isInProgress = useMemo(() => {\n if (!isMutatingMessage) return false\n if (message.status === 'in_progress') return true\n\n return message.runSteps.some((rs) => rs.status === 'in_progress')\n }, [message])\n\n return (\n <Provider value={{ message }}>\n <Box>\n <RunSteps\n runSteps={olderRunSteps}\n />\n\n <Box>\n <Attachments\n message={message}\n />\n\n {message.content.map((content, index) => (\n <ContentPart\n key={index}\n content={content}\n />\n ))}\n\n {isInProgress && isEmpty(laterRunSteps) && (\n <StartingContentSkeleton />\n )}\n </Box>\n\n <RunSteps\n runSteps={laterRunSteps}\n />\n\n {isInProgress && !isEmpty(laterRunSteps) && (\n <Box>\n <StartingContentSkeleton />\n </Box>\n )}\n </Box>\n </Provider>\n )\n}\n","import {\n Skeleton,\n} from '@radix-ui/themes'\n\nexport const StartingContentSkeleton = () => (\n <Skeleton\n loading\n mt=\"1\"\n height=\"var(--space-4)\"\n width=\"var(--space-4)\"\n style={{\n borderRadius: 'var(--radius-6)',\n flexShrink: 0,\n }}\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { useContext } from 'react'\nimport type { SerializedRunStep } from '@/types'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\ntype Args = {\n runSteps: SerializedRunStep[]\n}\n\nexport const RunSteps = ({\n runSteps,\n}: Args) => {\n const componentsContext = useContext(ComponentsContext)\n const Component = componentsContext.components.RunStep\n\n return (\n <Flex\n direction=\"column-reverse\"\n >\n {runSteps.map((runStep) => (\n <Component\n key={runStep.id}\n runStep={runStep}\n />\n ))}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport { RunStep } from '@/components/runSteps/RunStep'\n\nexport const ComponentsContext = createContext({\n components: {\n RunStep,\n },\n})\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { SerializedRunStep } from '@/types'\nimport { ToolCall } from './ToolCall'\nimport { Starting } from './Starting'\n\ntype Args = {\n stepDetails: OpenAI.Beta.Threads.Runs.ToolCallsStepDetails\n runStep: SerializedRunStep\n}\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n direction=\"column\"\n >\n {children}\n </Flex>\n)\n\nexport const ToolCalls = ({\n stepDetails,\n runStep,\n}: Args) => (\n <Root>\n {!stepDetails.tool_calls.length && (\n <Starting />\n )}\n {stepDetails.tool_calls.map((toolCall) => (\n <ToolCall\n key={toolCall.id}\n toolCall={toolCall}\n runStep={runStep}\n />\n ))}\n </Root>\n)\n\nToolCalls.Root = Root\nToolCalls.Starting = Starting\nToolCalls.ToolCall = ToolCall\n","'use client'\nimport { useContext } from 'react'\nimport OpenAI from 'openai'\nimport type { SerializedRunStep } from '@/types'\nimport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nimport { DefaultFunction } from './DefaultFunction'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: SerializedRunStep\n}\n\nexport const Fn = ({\n fn,\n runStep,\n}: Args) => {\n const functionComponentsContext = useContext(FunctionComponentsContext)\n const Component = functionComponentsContext[fn.name] || DefaultFunction\n\n return (\n // @ts-ignore-next-line\n <Component\n fn={fn}\n runStep={runStep}\n />\n )\n}\n","'use client'\nimport { createContext } from 'react'\n\ntype FunctionComponents = {\n [key: string]: React.ReactNode\n}\n\nexport const FunctionComponentsContext = createContext({} as FunctionComponents)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport { Content } from './Content'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n title: string\n}\n\nexport const FunctionBase = ({\n fn,\n runStep,\n title,\n}: Args) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n {title}\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n style={{\n maxHeight: '200px',\n }}\n >\n <Content fn={fn} />\n </Popover.Content>\n </Popover.Root>\n)\n","import {\n Flex,\n Button,\n} from '@radix-ui/themes'\n\nexport const ToolCallBase = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n py=\"1\"\n ml=\"-2\"\n >\n <Button\n size=\"1\"\n color=\"gold\"\n variant=\"outline\"\n style={{\n boxShadow: 'none',\n }}\n >\n {children}\n </Button>\n </Flex>\n)\n","import {\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallTitle = ({\n children,\n}: Args) => (\n <Text\n weight=\"regular\"\n >\n {children}\n </Text>\n)\n","import {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon,\n} from '@radix-ui/react-icons'\nimport type { SerializedRunStep } from '@/types'\n\ntype Args = {\n runStep: SerializedRunStep\n}\n\nexport const ToolCallIcon = ({\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return (\n <CheckCircledIcon />\n )\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === 'expired') {\n return (\n <CircleBackslashIcon />\n )\n } else {\n return (\n <CircleIcon />\n )\n }\n}\n","import { useMemo } from 'react'\nimport { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\nimport { formattedJsonOrRaw } from './lib/formattedJsonOrRaw'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n}\n\nexport const Content = ({\n fn,\n}: Args) => {\n const args = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.arguments,\n })\n ), [fn])\n\n const output = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.output,\n })\n ), [fn])\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n {args && <Box>\n {args}\n </Box>}\n {output && <Box>\n {output}\n </Box>}\n </Code>\n )\n}\n","export const formattedJsonOrRaw = ({\n value,\n}: {\n value: string | null\n}) => {\n if (!value) {\n return null\n }\n\n try {\n return JSON.stringify(JSON.parse(value), null, 2)\n } catch (error) {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value, null, 2)\n }\n }\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const title = ({\n fn,\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`\n } else {\n return `Calling ${fn.name}`\n }\n}\n","import OpenAI from 'openai'\nimport { FunctionBase } from '@/components/functions/FunctionBase'\nimport { title } from './lib/title'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const DefaultFunction = ({\n fn,\n runStep,\n}: Args) => (\n <FunctionBase\n fn={fn}\n runStep={runStep}\n title={title({ runStep, fn })}\n />\n)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep } from '@/types'\nimport { Content } from './Content'\n\nexport const CodeInterpreter = ({\n codeInterpreter,\n runStep,\n}: {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n runStep: SerializedRunStep\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using code interpreter\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n maxHeight=\"200px\"\n >\n <Content\n codeInterpreter={codeInterpreter}\n />\n </Popover.Content>\n </Popover.Root>\n)\n","import { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\n\ntype Args = {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n}\n\nexport const Content = ({\n codeInterpreter,\n}: Args) => {\n if (!codeInterpreter.input) {\n return null\n }\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n <Box>\n {codeInterpreter.input}\n </Box>\n <Box>\n {JSON.stringify(codeInterpreter.outputs)}\n </Box>\n </Code>\n )\n}\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const FileSearch = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Searching files\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const Fallback = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using tool: {toolCall.type}\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { Fn } from './Fn'\nimport { CodeInterpreter } from './CodeInterpreter'\nimport { FileSearch } from './FileSearch'\nimport { Fallback } from './Fallback'\nimport type { SerializedRunStep, ToolCall as ToolCallType } from '@/types'\n\ntype Args = {\n toolCall: ToolCallType\n runStep: SerializedRunStep\n}\n\nexport const ToolCall = ({\n toolCall,\n runStep,\n}: Args) => {\n if (toolCall.type === 'function') {\n return (\n <Fn\n fn={toolCall.function}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'code_interpreter') {\n return (\n <CodeInterpreter\n codeInterpreter={toolCall.code_interpreter}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'file_search') {\n return (\n <FileSearch\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n }\n\n return (\n <Fallback\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n}\n","import {\n Popover,\n Text,\n} from '@radix-ui/themes'\nimport {\n CircleIcon,\n} from '@radix-ui/react-icons'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\n\nexport const Starting = () => (\n <Popover.Root>\n <ToolCallBase>\n <CircleIcon />\n <ToolCallTitle>\n Starting actions\n </ToolCallTitle>\n </ToolCallBase>\n <Popover.Content\n style={{\n maxHeight: '500px',\n }}\n >\n <Text>\n Getting ready to connect to domain API\n </Text>\n </Popover.Content>\n </Popover.Root>\n)\n","import type { SerializedRunStep } from '@/types'\nimport { ToolCalls } from './ToolCalls'\n\ntype Args = {\n runStep: SerializedRunStep\n}\n\nexport const RunStep = ({\n runStep,\n}: Args) => {\n if (runStep.step_details.type === 'tool_calls') {\n return (\n <ToolCalls\n stepDetails={runStep.step_details}\n runStep={runStep}\n />\n )\n }\n\n return null\n}\n\nRunStep.ToolCalls = ToolCalls\n","import { useMemo } from 'react'\nimport { useIsMutating } from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useIsMutatingMessage = () => {\n const threadContext = useThreadContext()\n\n const mutatingMessagesCount = useIsMutating({\n mutationKey: ['createMessage', threadContext.variables],\n })\n\n const isMutatingMessage = useMemo(() => (\n mutatingMessagesCount > 0\n ), [mutatingMessagesCount])\n\n return isMutatingMessage\n}\n","'use client'\nimport { createContext } from 'react'\nimport { Message } from '@/types'\n\nexport const MessageContext = createContext<{\n message: Message | null\n}>({\n message: null,\n})\n","import { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const Provider = MessageContext.Provider\n","import { SerializedMessage } from '@/types'\nimport {\n Flex,\n Badge,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n} from '@radix-ui/react-icons'\n\nexport const Attachments = ({\n message,\n}: {\n message: SerializedMessage\n}) => {\n if (!message.attachments?.length) return null\n\n return (\n <Flex\n align=\"start\"\n pb=\"1\"\n >\n <Badge\n color=\"gray\"\n variant=\"surface\"\n >\n <FileIcon />\n {message.attachments.length} file{message.attachments.length > 1 ? 's' : ''}\n </Badge>\n </Flex>\n )\n}\n","import OpenAI from 'openai'\nimport Markdown from 'react-markdown'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\ntype Args = {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}\n\nexport const TextContent = ({\n content,\n}: Args) => {\n const {\n getRemarkPlugins,\n ...rest\n } = useMarkdownContext()\n\n return (\n <Markdown\n {...rest}\n remarkPlugins={getRemarkPlugins({\n content,\n })}\n >\n {content.text.value}\n </Markdown>\n )\n}\n","import { useContext } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\n\nexport const useMarkdownContext = () => (\n useContext(MarkdownContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { components } from './lib/components'\nimport { getRemarkPlugins } from './lib/getRemarkPlugins'\n\nexport const MarkdownContext = createContext({\n components,\n getRemarkPlugins,\n})\n","import { Heading, Table } from '@radix-ui/themes'\nimport { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\nimport { Img } from './Img'\nimport { Annotation } from './Annotation'\n\nexport const components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n img: Img,\n annotation: Annotation,\n h1: (props: JSX.IntrinsicElements['h1']) => <Heading as=\"h1\">{props.children}</Heading>,\n h2: (props: JSX.IntrinsicElements['h2']) => <Heading as=\"h2\" size=\"5\">{props.children}</Heading>,\n h3: (props: JSX.IntrinsicElements['h3']) => <Heading as=\"h3\" size=\"4\">{props.children}</Heading>,\n h4: (props: JSX.IntrinsicElements['h4']) => <Heading as=\"h4\" size=\"3\">{props.children}</Heading>,\n h5: (props: JSX.IntrinsicElements['h5']) => <Heading as=\"h5\" size=\"3\">{props.children}</Heading>,\n h6: (props: JSX.IntrinsicElements['h6']) => <Heading as=\"h6\" size=\"3\">{props.children}</Heading>,\n table: (props: JSX.IntrinsicElements['table']) => (\n <Table.Root\n {...props}\n variant=\"surface\"\n mb=\"3\"\n />\n ),\n thead: Table.Header,\n tbody: Table.Body,\n tr: Table.Row,\n td: Table.Cell,\n th: Table.ColumnHeaderCell,\n}\n","import {\n Box,\n Text,\n} from '@radix-ui/themes'\n\nexport const Paragraph = ({ children }: JSX.IntrinsicElements['p']) => (\n <Box\n pb=\"3\"\n >\n <Text\n size=\"3\"\n style={{\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Text>\n </Box>\n)\n","import {\n Link as RadixLink,\n} from '@radix-ui/themes'\n\ntype Args = JSX.IntrinsicElements['a']\n\nexport const Link = ({\n children,\n href,\n download,\n target = '_blank',\n}: Args) => (\n <RadixLink\n href={href}\n target={target}\n download={download}\n >\n {children}\n </RadixLink>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const UnorderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ul\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ul>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const OrderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ol\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ol>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ListItem = ({ children }: JSX.IntrinsicElements['li']) => (\n <Box\n pb=\"1\"\n >\n <li>\n {children}\n </li>\n </Box>\n)\n","import {\n Strong as RadixStrong,\n} from '@radix-ui/themes'\n\nexport const Strong = ({ children }: JSX.IntrinsicElements['strong']) => (\n <RadixStrong>\n {children}\n </RadixStrong>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Pre = ({ children }: JSX.IntrinsicElements['pre']) => (\n <Box\n style={{\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Box>\n)\n","import {\n Code as RadixCode,\n} from '@radix-ui/themes'\n\nexport const Code = ({ children }: JSX.IntrinsicElements['code']) => (\n <RadixCode>\n {children}\n </RadixCode>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Image = (props: JSX.IntrinsicElements['img']) => (\n <Box\n pb=\"3\"\n >\n <img\n {...props}\n style={{\n maxWidth: '100%',\n height: 'auto',\n }}\n />\n </Box>\n)\n","import videoExtensions from 'video-extensions'\n\nexport const isVideoSrc = ({\n src,\n}: {\n src: string\n}) => (\n videoExtensions.includes(src.split('.').pop() || '')\n)\n","export const isAudioSrc = ({\n src,\n}: {\n src: string\n}) => (\n src.endsWith('.mp3') || src.endsWith('.wav')\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n VideoMimeType,\n MediaPlayer,\n MediaProvider,\n Controls,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\nimport { FullscreenButton } from './FullscreenButton'\n\nexport const Video = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `video/${src.split('.').pop()}` as VideoMimeType,\n }}\n playsInline\n hideControlsOnMouseLeave\n crossOrigin\n >\n <MediaProvider />\n\n <style>\n {`\n .superinterface-video-controls {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .superinterface-video-controls[data-visible] {\n opacity: 1;\n }\n `}\n </style>\n <Flex\n asChild\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n className=\"superinterface-video-controls\"\n p=\"3\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n <FullscreenButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import {\n PlayButton as VidstackPlayButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n PlayIcon,\n PauseIcon,\n} from '@radix-ui/react-icons'\n\nexport const PlayButton = () => {\n const isPaused = useMediaState('paused')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackPlayButton>\n {isPaused ? <PlayIcon /> : <PauseIcon />}\n </VidstackPlayButton>\n </IconButton>\n )\n}\n","import {\n MuteButton,\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n IconButton,\n HoverCard,\n Slider,\n} from '@radix-ui/themes'\nimport {\n SpeakerModerateIcon,\n SpeakerOffIcon,\n} from '@radix-ui/react-icons'\n\nexport const VolumeButton = () => {\n const volume = useMediaState('volume')\n const isMuted = useMediaState('muted')\n const remote = useMediaRemote()\n\n return (\n <HoverCard.Root>\n <HoverCard.Trigger>\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <MuteButton>\n {(isMuted || volume === 0) ? <SpeakerOffIcon /> : <SpeakerModerateIcon />}\n </MuteButton>\n </IconButton>\n </HoverCard.Trigger>\n <HoverCard.Content\n size=\"1\"\n side=\"top\"\n height=\"100px\"\n >\n <Slider\n size=\"1\"\n variant=\"soft\"\n orientation=\"vertical\"\n value={[volume * 100]}\n onValueChange={([value]) => (\n remote.changeVolume(value / 100)\n )}\n />\n </HoverCard.Content>\n </HoverCard.Root>\n )\n}\n","import {\n useState,\n useEffect,\n useMemo,\n} from 'react'\nimport {\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n Slider,\n} from '@radix-ui/themes'\n\nexport const Time = () => {\n const time = useMediaState('currentTime')\n const duration = useMediaState('duration')\n const seeking = useMediaState('seeking')\n const canSeek = useMediaState('canSeek')\n const remote = useMediaRemote()\n\n const [value, setValue] = useState(0)\n\n useEffect(() => {\n if (seeking) return;\n setValue((time / duration) * 100);\n }, [time, duration, seeking])\n\n const step = useMemo(() => (\n (1 / duration) * 100\n ), [duration])\n\n return (\n <Slider\n size=\"1\"\n variant=\"soft\"\n value={[value]}\n disabled={!canSeek}\n step={Number.isFinite(step) ? step : 1}\n onValueChange={([value]) => {\n setValue(value)\n remote.seeking((value / 100) * duration)\n }}\n onValueCommit={([value]) => {\n remote.seek((value / 100) * duration)\n }}\n />\n )\n}\n","import {\n Card,\n Inset,\n} from '@radix-ui/themes'\n\nexport const MediaContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Card\n mb=\"3\"\n >\n <Inset\n clip=\"padding-box\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {children}\n </Inset>\n </Card>\n)\n","import {\n FullscreenButton as VidstackFullscreenButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n EnterFullScreenIcon,\n ExitFullScreenIcon,\n} from '@radix-ui/react-icons'\n\nexport const FullscreenButton = () => {\n const isFullscreen = useMediaState('fullscreen')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackFullscreenButton>\n {isFullscreen ? <ExitFullScreenIcon /> : <EnterFullScreenIcon />}\n </VidstackFullscreenButton>\n </IconButton>\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n MediaPlayer,\n MediaProvider,\n Controls,\n AudioMimeType,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\n\nexport const Audio = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `audio/${src.split('.').pop()}` as AudioMimeType,\n }}\n viewType=\"audio\"\n crossOrigin\n playsInline\n >\n <MediaProvider />\n\n <Flex\n asChild\n p=\"3\"\n flexGrow=\"1\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import { Image } from '@/components/images/Image'\nimport { isVideoSrc } from './lib/isVideoSrc'\nimport { isAudioSrc } from './lib/isAudioSrc'\nimport { Video } from './Video'\nimport { Audio } from './Audio'\n\nexport const Img = (props: JSX.IntrinsicElements['img']) => {\n if (!props.src) {\n return (\n <Image\n {...props}\n />\n )\n } else if (isVideoSrc({ src: props.src })) {\n return (\n <Video\n src={props.src!}\n />\n )\n } else if (isAudioSrc({ src: props.src })) {\n return (\n <Audio\n src={props.src!}\n />\n )\n } else {\n return (\n <Image\n {...props}\n />\n )\n }\n}\n","import {\n QuoteIcon,\n} from '@radix-ui/react-icons'\nimport OpenAI from 'openai'\nimport { AnnotationBase } from './AnnotationBase'\nimport { FilePathAnnotation } from './FilePathAnnotation'\n\nexport const Annotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.Annotation\n children: React.ReactNode\n}) => {\n if (annotation.type === 'file_citation') {\n return (\n <AnnotationBase\n icon={<QuoteIcon />}\n content=\"File cited.\"\n />\n )\n } else if (annotation.type === 'file_path') {\n return (\n <FilePathAnnotation\n annotation={annotation}\n >\n {children}\n </FilePathAnnotation>\n )\n }\n\n return null\n}\n","import {\n IconButton,\n Popover,\n Flex,\n Text,\n} from '@radix-ui/themes'\n\nexport const AnnotationBase = ({\n icon,\n content,\n}: {\n icon: React.ReactNode,\n content: string\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n variant=\"soft\"\n color=\"gray\"\n size=\"1\"\n >\n {icon}\n </IconButton>\n </Popover.Trigger>\n <Popover.Content\n size=\"1\"\n >\n <Flex\n direction=\"column\"\n >\n <Text\n size=\"1\"\n color=\"gray\"\n >\n {content}\n </Text>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n)\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Link } from '@/contexts/markdown/MarkdownContext/lib/components/Link'\n\nexport const FilePathAnnotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.FilePathAnnotation\n children: React.ReactNode\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Link\n href={`${superinterfaceContext.baseUrl}/files/${annotation.file_path.file_id}/contents?${nextSearchParams}`}\n target=\"_self\"\n download\n >\n {children}\n </Link>\n )\n}\n","import OpenAI from 'openai'\nimport remarkGfm from 'remark-gfm'\nimport { remarkAnnotation } from '@/lib/remark/remarkAnnotation'\n\nexport const getRemarkPlugins = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => [\n remarkAnnotation({ content }),\n remarkGfm,\n]\n","import OpenAI from 'openai'\nimport { isNumber } from 'radash'\nimport type { Node, Literal, Position } from 'unist'\nimport type { Text, Link } from 'mdast'\n// @ts-ignore-next-line\nimport flatMap from 'unist-util-flatmap'\n\ninterface AnnotationNode extends Literal {\n type: 'annotation'\n value: string\n position?: Position\n data: {\n hName: 'annotation'\n hProperties: {\n annotation: any\n }\n }\n}\n\nconst sortedAnnotations = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) =>\n content.text.annotations.sort((a, b) => a.start_index - b.start_index)\n\nexport const remarkAnnotation = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => {\n return () => {\n return (tree: any) => {\n flatMap(tree, (node: Node) => {\n // Process text and link nodes\n if (node.type === 'text' || node.type === 'link') {\n return processNodeWithAnnotations({ node, content })\n } else {\n // Return other nodes as-is\n return [node]\n }\n })\n }\n }\n}\n\nconst processNodeWithAnnotations = ({\n node,\n content,\n}: {\n node: Node\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}): Node[] => {\n if (!content.text?.annotations?.length) {\n return [node]\n }\n\n if (!node.position) {\n return [node]\n }\n\n const annotations = sortedAnnotations({ content })\n\n if (node.type === 'text') {\n // node is a Text node\n return processTextNode({ node: node as Text, annotations })\n } else if (node.type === 'link') {\n // node is a Link node\n const linkNode = node as Link\n // Process link node's children\n linkNode.children = flatMap(linkNode.children, (childNode: Node) => {\n if (childNode.type === 'text') {\n return processTextNode({ node: childNode as Text, annotations })\n } else {\n return [childNode]\n }\n })\n return [linkNode]\n } else {\n // Return node as-is\n return [node]\n }\n}\n\nconst processTextNode = ({\n node,\n annotations,\n}: {\n node: Text\n annotations: any[]\n}): Node[] => {\n if (!node.position || !node.value) {\n return [node]\n }\n\n const nodeStart = node.position.start.offset!\n const nodeEnd = node.position.end.offset!\n\n if (!isNumber(nodeStart) || !isNumber(nodeEnd)) {\n return [node]\n }\n\n const newNodes: Node[] = []\n let lastIndex = nodeStart\n\n annotations.forEach((annotation) => {\n const annotationStart = annotation.start_index\n const annotationEnd = annotation.end_index\n\n if (nodeEnd <= annotationStart || nodeStart >= annotationEnd) {\n return\n }\n\n const start = Math.max(nodeStart, annotationStart)\n const end = Math.min(nodeEnd, annotationEnd)\n\n if (lastIndex < start) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: start }))\n }\n\n newNodes.push(\n createAnnotationNode({\n node,\n startOffset: start,\n endOffset: end,\n annotation,\n })\n )\n lastIndex = end\n })\n\n if (lastIndex < nodeEnd) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: nodeEnd }))\n }\n\n return newNodes\n}\n\nconst createTextNode = ({\n node,\n startOffset,\n endOffset,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n}): Text => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'text',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n }\n}\n\nconst createAnnotationNode = ({\n node,\n startOffset,\n endOffset,\n annotation,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n annotation: any\n}): AnnotationNode => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'annotation',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n data: {\n hName: 'annotation',\n hProperties: {\n annotation,\n },\n },\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Image } from '@/components/images/Image'\n\nexport const ImageFileContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.ImageFileContentBlock\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Image\n alt=\"\"\n src={`${superinterfaceContext.baseUrl}/files/${content.image_file.file_id}/contents?${nextSearchParams}`}\n />\n )\n}\n","import OpenAI from 'openai'\nimport { TextContent } from './TextContent'\nimport { ImageFileContent } from './ImageFileContent'\n\nexport const ContentPart = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.Message['content'][0]\n}) => {\n if (content.type === 'text') {\n return (\n <TextContent\n content={content}\n />\n )\n }\n\n if (content.type === 'image_file') {\n return (\n <ImageFileContent\n content={content}\n />\n )\n }\n\n return null\n}\n","import { useMemo } from 'react'\nimport { StartingSkeleton } from '@/components/skeletons/StartingSkeleton'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\n\nexport const Progress = () => {\n const { latestMessage } = useLatestMessage()\n const isMutatingMessage = useIsMutatingMessage()\n\n const isVisible = useMemo(() => {\n if (!latestMessage) return false\n if (latestMessage.role !== 'user') return false\n if (latestMessage.status === 'in_progress') return false\n if (!isOptimistic({ id: latestMessage.id })) return false\n if (!isMutatingMessage) return false\n\n return true\n }, [latestMessage, isMutatingMessage])\n\n if (!isVisible) return null\n\n return (\n <StartingSkeleton />\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport { Box } from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\ntype Args = {\n children?: React.ReactNode\n}\n\nexport const StartingSkeleton = ({\n children,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n <AssistantAvatar />\n\n <Box>\n <Name>\n {assistantNameContext}\n </Name>\n\n {children}\n\n <StartingContentSkeleton />\n </Box>\n </MessageGroupBase>\n )\n}\n","import { useMemo } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const useLatestMessage = () => {\n const props = useMessages()\n\n return useMemo(() => ({\n ...props,\n latestMessage: props.messages[0] || null,\n }), [props])\n}\n","import _ from 'lodash'\n\ntype Args = {\n id: string\n}\n\nexport const isOptimistic = ({\n id,\n}: Args) => (\n _.startsWith(id, '-')\n)\n","'use client'\n\nimport { Flex } from '@radix-ui/themes'\nimport { useInfiniteScroll } from '@/hooks/misc/useInfiniteScroll'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const Root = ({\n children,\n style = {},\n}: {\n children: React.ReactNode\n style?: React.CSSProperties\n}) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n } = useMessages()\n\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n })\n\n return (\n <Flex\n ref={containerRef}\n direction=\"column-reverse\"\n flexGrow=\"1\"\n style={{\n ...style,\n overflow: 'auto',\n }}\n >\n {children}\n\n {hasNextPage && (\n <Flex\n ref={loaderRef}\n />\n )}\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Flex>\n )\n}\n","import { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { useThrottledEffect } from '@/hooks/misc/useThrottledEffect'\n\ntype Args = {\n isFetchingNextPage: boolean\n hasNextPage: boolean\n fetchNextPage: () => void\n}\n\nexport const useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: Args) => {\n const containerRef = useRef(null)\n\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: '0px',\n threshold: 0.1,\n })\n\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return\n if (!inView) return\n if (!hasNextPage) return\n\n fetchNextPage()\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n )\n\n return {\n containerRef,\n loaderRef,\n inView,\n }\n}\n","import _ from 'lodash'\nimport { useRef, useEffect, useCallback } from 'react'\n\nexport const useThrottledEffect = (cb: Function, delay: number, additionalDeps: any[]) => {\n const cbRef = useRef(cb)\n\n const throttledCb = useCallback(\n _.throttle((...args: any[]) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true,\n }),\n [delay]\n )\n useEffect(() => {\n cbRef.current = cb\n })\n // set additionalDeps to execute effect, when other values change (not only on delay change)\n useEffect(throttledCb, [throttledCb, ...additionalDeps])\n}\n","'use client'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\n\nexport const NextPageSkeleton = () => {\n const {\n hasNextPage,\n } = useMessages()\n\n if (!hasNextPage) {\n return null\n }\n\n return (\n <MessagesSkeleton />\n )\n}\n","'use client'\n\nimport {\n ArrowUpIcon,\n StopIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n flexShrink=\"0\"\n align=\"end\"\n >\n {children}\n </Flex>\n)\n\nconst Button = () => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { isDisabled, isLoading, isFileLoading } = useMessageFormContext()\n\n if (isLoading) {\n return (\n <IconButton\n type=\"button\"\n onClick={() => superinterfaceContext.createMessageAbortControllerRef.current?.abort()}\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n type=\"submit\"\n disabled={isDisabled || isFileLoading}\n >\n <ArrowUpIcon />\n </IconButton>\n )\n}\n\nexport const Submit = () => (\n <Root>\n <Button />\n </Root>\n)\n\nSubmit.Root = Root\nSubmit.Button = Button\n","import { useContext } from 'react'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\n\nexport const useMessageFormContext = () => (\n useContext(MessageFormContext)\n)\n","'use client'\nimport OpenAI from 'openai'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const MessageFormContext = createContext({\n content: '',\n isDisabled: false,\n isLoading: false,\n files: [] as OpenAI.Files.FileObject[],\n setFiles: (() => {}) as Dispatch<SetStateAction<OpenAI.Files.FileObject[]>>,\n isFileLoading: false,\n})\n","'use client'\nimport OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useMemo, useState } from 'react'\nimport { useForm, SubmitHandler, FormProvider } from 'react-hook-form'\nimport { Box } from '@radix-ui/themes'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { formOptions } from './lib/formOptions'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { partob } from 'radash'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\n\ntype Inputs = {\n content: string\n attachments?: OpenAI.Beta.Threads.Message.Attachment[]\n}\n\nexport const Root = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n}: {\n children: React.ReactNode\n onSubmit?: SubmitHandler<Inputs & { reset: any, createMessage: any }>\n isDisabled?: boolean\n}) => {\n const [files, setFiles] = useState<OpenAI.Files.FileObject[]>([])\n const formProps = useForm<Inputs>(formOptions)\n\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch,\n } = formProps\n\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isFileLoading = useMemo(() => (\n files.some((file) => isOptimistic({ id: file.id }))\n ), [files])\n\n const isLoading = useMemo(() => (\n isMutatingMessage || isSubmitting\n ), [\n isMutatingMessage,\n isSubmitting,\n ])\n\n const { latestMessage } = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg])\n\n const onSubmit: SubmitHandler<Inputs> = onSubmitArg ? partob(onSubmitArg, { reset, createMessage }) : async (data) => {\n if (isFileLoading) return\n if (isLoading) return\n if (isDisabled) return\n\n reset()\n setFiles([])\n\n const attachments = files.map((file) => ({\n file_id: file.id,\n tools: [\n {\n type: 'file_search',\n },\n ],\n }))\n\n await createMessage({\n // @ts-ignore-next-line\n content: data.content,\n ...(attachments.length ? { attachments } : {}),\n })\n }\n\n const content = watch('content')\n\n return (\n <MessageFormContext.Provider\n value={{\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content,\n }}\n >\n <FormProvider {...formProps}>\n <Box\n asChild\n flexShrink=\"0\"\n >\n <form\n onSubmit={handleSubmit(onSubmit)}\n >\n {children}\n </form>\n </Box>\n </FormProvider>\n </MessageFormContext.Provider>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateMessage = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables),\n }\n}\n","import OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n newMessage: Variables,\n) => {\n const queryKey = ['messages', omit(newMessage, ['content', 'attachments'])]\n await queryClient.cancelQueries({ queryKey })\n\n const prevMessages = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n )\n\n return {\n prevMessages,\n newMessage,\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n newMessage: {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n }\n}\n\nexport const data = ({\n newMessage,\n}: Args) => (prevData: any) => {\n const message = {\n id: optimisticId(),\n role: 'user' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: newMessage.content,\n },\n } as OpenAI.Beta.Threads.Messages.TextContentBlock,\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n attachments: newMessage.attachments ?? [],\n metadata: {},\n runSteps: [],\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { JSONParser } from '@streamparser/json-whatwg'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { handleResponse } from './handleResponse'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const abortController = new AbortController()\n superinterfaceContext.createMessageAbortControllerRef.current = abortController\n\n const response = await fetch(`${superinterfaceContext.baseUrl}/messages`, {\n method: 'POST',\n body: JSON.stringify(body({\n variables,\n superinterfaceContext,\n })),\n signal: abortController.signal,\n })\n\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n }\n }\n\n if (response.body == null) {\n throw new Error('The response body is empty.');\n }\n\n const parser = new JSONParser({ stringBufferSize: undefined, paths: ['$'], separator: '' })\n const reader = response.body.pipeThrough(parser).getReader()\n\n const messagesQueryKey = ['messages', threadContext.variables]\n\n while (true) {\n const { done, value } = await reader.read()\n\n if (done) break\n\n handleResponse({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n })\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadCreated = ({\n value,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadCreated\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.threadIdCookieOptions?.set) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.assistantId) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.threadId) return\n\n superinterfaceContext.threadIdCookieOptions.set({\n // @ts-ignore-next-line\n assistantId: value.data.metadata.assistantId,\n // @ts-ignore-next-line\n threadId: value.data.metadata.threadId,\n })\n}\n","import { last } from 'radash'\nimport { SerializedMessage } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\n\nexport const extendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevRunMessages = messages.filter((m: SerializedMessage) => (\n m.run_id === message.run_id\n ))\n\n const prevOptimitisticRunMessages = prevRunMessages.filter((m: SerializedMessage) => (\n isOptimistic({ id: m.id })\n ))\n\n const runSteps = last(prevOptimitisticRunMessages)?.runSteps ?? last(prevRunMessages)?.runSteps ?? []\n\n return {\n ...message,\n runSteps,\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { SerializedMessage, ThreadMessageCreatedEvent } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { extendMessage } from './extendMessage'\nimport { MessagesQueryKey } from '@/types'\n\nconst appendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevMessages = messages.filter((m: SerializedMessage) => (\n m.run_id != message.run_id || !isOptimistic({ id: m.id })\n ))\n\n return [\n extendMessage({ message, messages }),\n ...prevMessages,\n ]\n}\n\nexport const threadMessageCreated = ({\n value,\n messagesQueryKey,\n queryClient,\n}: {\n value: ThreadMessageCreatedEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: appendMessage({ message: value.data, messages: [] }),\n hasNextPage: false,\n lastId: value.data.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: appendMessage({ message: value.data, messages: latestPage.data }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport { MessagesQueryKey } from '@/types'\n\nconst updatedContentPart = ({\n prevContentPart,\n delta,\n}: {\n prevContentPart: OpenAI.Beta.Threads.Messages.MessageContent\n delta: OpenAI.Beta.Threads.Messages.MessageContentDelta\n}) => {\n if (!prevContentPart) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'text' && delta.text && prevContentPart.type == 'text' && prevContentPart.text) {\n return {\n ...prevContentPart,\n text: {\n ...prevContentPart.text,\n value: `${prevContentPart.text.value}${delta.text.value}`,\n annotations: [\n ...(prevContentPart.text.annotations ?? []),\n ...(delta.text.annotations ?? []),\n ]\n },\n }\n }\n\n return prevContentPart\n}\n\nconst updatedContent = ({\n content,\n value,\n}: {\n content: OpenAI.Beta.Threads.Messages.MessageContent\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n}) => {\n if (!value.data.delta.content) return content\n\n const result = _.cloneDeep(content)\n\n value.data.delta.content.forEach((delta: OpenAI.Beta.Threads.Messages.MessageContentDelta) => {\n // @ts-ignore-next-line\n result[delta.index] = updatedContentPart({\n // @ts-ignore-next-line\n prevContentPart: result[delta.index],\n delta,\n })\n })\n\n return result\n}\n\nexport const threadMessageDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n const [latestMessage, ...messagesRest] = latestPage.data\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n ...latestMessage,\n content: updatedContent({ content: latestMessage.content, value }),\n },\n ...messagesRest,\n ],\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { replace } from 'radash'\nimport { ThreadMessageCompletedEvent } from '@/types'\nimport { extendMessage } from './extendMessage'\nimport {\n QueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadMessageCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n messagesQueryKey: MessagesQueryKey\n value: ThreadMessageCompletedEvent\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: replace(latestPage.data, extendMessage({ message: value.data, messages: latestPage.data }), (m) => m.id === value.data.id),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n id: optimisticId(),\n assistant_id: value.data.assistant_id,\n content: [],\n created_at: value.data.created_at,\n attachments: [],\n metadata: {},\n status: 'in_progress',\n role: 'assistant',\n runSteps: [],\n run_id: value.data.id,\n thread_id: value.data.thread_id,\n },\n ...latestPage.data,\n ]\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunFailed = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedMessage, MessagesQueryKey } from '@/types'\n\nexport const threadRunStepCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: [\n value.data,\n ...m.runSteps,\n ],\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport OpenAI from 'openai'\nimport { SerializedMessage, SerializedRunStep, ThreadRunStepDeltaEvent, MessagesQueryKey } from '@/types'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.ToolCall\n delta: OpenAI.Beta.Threads.Runs.ToolCallDelta\n}) => {\n if (!toolCall) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'function' && delta.function && toolCall.type === 'function' && toolCall.function) {\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n // @ts-ignore-next-line\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n }\n\n return toolCall\n}\n\nconst updatedRunStep = ({\n runStep,\n value,\n}: {\n runStep: SerializedRunStep\n value: ThreadRunStepDeltaEvent\n}) => {\n if (!runStep?.step_details?.tool_calls) return runStep\n\n if (value.data.delta?.step_details?.type === 'tool_calls') {\n if (!value.data.delta.step_details.tool_calls) return runStep\n\n const newToolCalls = _.cloneDeep(runStep.step_details.tool_calls)\n\n value.data.delta.step_details.tool_calls.forEach((delta: OpenAI.Beta.Threads.Runs.ToolCallDelta) => (\n newToolCalls[delta.index] = updatedToolCall({\n toolCall: newToolCalls[delta.index],\n delta,\n })\n ))\n\n return {\n ...runStep,\n step_details: {\n ...runStep.step_details,\n ...value.data.delta.step_details,\n tool_calls: newToolCalls,\n },\n }\n } else {\n return runStep\n }\n}\n\n\nexport const threadRunStepDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: ThreadRunStepDeltaEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: m.runSteps.map((rs: SerializedRunStep) => {\n if (rs.id === value.data.id) {\n return updatedRunStep({ runStep: rs, value })\n }\n\n return rs\n }),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedRunStep, SerializedMessage, MessagesQueryKey } from '@/types'\nimport { replace } from 'radash'\n\nexport const threadRunStepCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCompleted\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: replace(m.runSteps, value.data, (rs: SerializedRunStep) => rs.id === value.data.id),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport { ToolCall } from '@/types'\nimport _ from 'lodash'\nimport OpenAI from 'openai'\nimport { map } from 'radash'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadRunRequiresAction = async ({\n value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunRequiresAction & {\n data: {\n required_action: {\n type: 'submit_client_tool_outputs'\n submit_client_tool_outputs: {\n tool_calls: ToolCall[]\n }\n }\n }\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n if (value.data.required_action.type === 'submit_client_tool_outputs') {\n // @ts-ignore-next-line\n const toolCalls = value.data.required_action.submit_client_tool_outputs.tool_calls\n\n const toolOutputs = await map(toolCalls, async (toolCall: ToolCall) => {\n if (toolCall.type !== 'function') {\n return {\n toolCallId: toolCall.id,\n output: `Error: client tool type ${toolCall.type} is not supported.`,\n }\n }\n\n // @ts-ignore-next-line\n const fn = window[toolCall.function.name as string]\n\n if (!fn) {\n return {\n toolCallId: toolCall.id,\n output: `Error: client function ${toolCall.function.name} is not defined.`,\n }\n }\n\n const args = toolCall.function.arguments\n const parsedArgs = JSON.parse(args)\n\n let output\n\n try {\n output = await fn(parsedArgs)\n } catch (error: any) {\n output = `Error: ${error.message}`\n }\n\n return {\n toolCallId: toolCall.id,\n output,\n }\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/threads/runs/submit-client-tool-outputs`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n toolOutputs,\n ...superinterfaceContext.variables,\n })\n })\n }\n}\n","import { threadCreated } from './threadCreated'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\nimport { threadRunCreated } from './threadRunCreated'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadRunStepCompleted } from './threadRunStepCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\n\nexport const handlers = {\n 'thread.created': threadCreated,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n 'thread.run.created': threadRunCreated,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.run.step.completed': threadRunStepCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n}\n","import OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { handlers } from './handlers'\n\nexport const handleResponse = ({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n}: {\n value: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: ReturnType<typeof useQueryClient>\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n const handler = handlers[value.value.event]\n\n if (!handler) {\n return console.log('Missing handler', { value })\n }\n\n return handler({\n value: value.value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdCookieOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdCookieOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { onMutate } from './onMutate'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createMessage', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\n\nconst schema = z.object({\n content: z.string().min(1),\n})\n\nexport const formOptions = {\n resolver: zodResolver(schema),\n}\n","import {\n QueryClient,\n} from '@tanstack/react-query'\nimport { Toast } from '@/types'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const createMessageDefaultOnError = ({\n queryClient,\n addToast,\n threadContext,\n}: {\n queryClient: QueryClient\n addToast: (toast: Toast) => void\n threadContext: ReturnType<typeof useThreadContext>\n}) => (error: any) => {\n if (error.name === 'AbortError') {\n queryClient.invalidateQueries({ queryKey: ['messages', threadContext.variables] })\n queryClient.invalidateQueries({ queryKey: ['runs', threadContext.variables] })\n return\n }\n\n addToast({ type: 'error', message: error.message })\n}\n","'use client'\nimport { useFormContext } from 'react-hook-form'\nimport {\n Container as RadixContainer,\n Flex,\n} from '@radix-ui/themes'\nimport { Control } from './Control'\nimport { Files } from './Files'\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const {\n formState: {\n errors,\n },\n } = useFormContext()\n\n return (\n <RadixContainer\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n style={{\n borderRadius: 'var(--radius-2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: errors.content ? 'var(--red-9)' : 'var(--gray-5)',\n ...(errors.content ? { backgroundColor: 'var(--red-2)' } : {}),\n }}\n p=\"2\"\n pl=\"3\"\n wrap=\"wrap\"\n >\n {children}\n </Flex>\n </Flex>\n </Flex>\n </RadixContainer>\n )\n}\n\nexport const Field = {\n Root,\n Control,\n Files,\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useFormContext } from 'react-hook-form'\nimport { usePrevious } from '@/hooks/misc/usePrevious'\nimport { useContext, useMemo, useRef, useEffect } from 'react'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { TextareaBase } from '@/components/textareas/TextareaBase'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n flexGrow=\"1\"\n pt=\"4px\"\n >\n {children}\n </Flex>\n)\n\nconst Input = () => {\n const assistantNameContext = useContext(AssistantNameContext)\n const {\n register,\n } = useFormContext()\n\n const { isDisabled, isLoading } = useMessageFormContext()\n\n const isSubmitDisabled = useMemo(() => (\n isDisabled || isLoading\n ), [isDisabled, isLoading])\n\n const isDisabledPrevious = usePrevious(isDisabled)\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const textareaProps = register('content')\n\n useEffect(() => {\n if (isDisabled) return\n if (!isDisabledPrevious) return\n if (!textareaRef.current) return\n\n textareaRef.current.focus()\n }, [isDisabled, isDisabledPrevious, textareaProps])\n\n return (\n <TextareaBase\n minRows={1}\n placeholder={`Message ${assistantNameContext}...`}\n disabled={isDisabled}\n onKeyDown={(e: any) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n\n if (isSubmitDisabled) return\n e.currentTarget.form?.requestSubmit()\n }\n }}\n {...textareaProps}\n ref={(e: any) => {\n textareaProps.ref(e)\n // @ts-ignore-next-line\n textareaRef.current = e\n }}\n />\n )\n}\n\nexport const Control = () => (\n <Root>\n <Input />\n </Root>\n)\n\nControl.Root = Root\nControl.Input = Input\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = <T,>(state: T): T | undefined => {\n const ref = useRef<T>()\n\n useEffect(() => {\n ref.current = state\n })\n\n return ref.current\n}\n","import { forwardRef } from 'react'\nimport TextareaAutosize from 'react-textarea-autosize'\n\ntype Props = React.ComponentProps<typeof TextareaAutosize>\n\nexport const TextareaBase = forwardRef(function TextareaBase(props: Props, ref) {\n return (\n <>\n <style>\n {`.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }`}\n </style>\n\n <TextareaAutosize\n // @ts-ignore-next-line\n ref={ref}\n className=\"rt-reset superinterface-textarea\"\n style={{\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n resize: 'none',\n color: 'var(--gray-12)',\n flexGrow: 1,\n display: 'flex',\n }}\n {...props}\n />\n </>\n )\n})\n","import {\n Flex,\n Card,\n Spinner,\n Text,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n Cross2Icon,\n} from '@radix-ui/react-icons'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\n\nexport const Preview = () => {\n const { files, setFiles } = useMessageFormContext()\n\n if (!files.length) {\n return null\n }\n\n return (\n <Flex\n flexBasis=\"100%\"\n direction=\"column\"\n pb=\"2\"\n gap=\"1\"\n >\n {files.map((file) => (\n <Card\n key={file.id}\n variant=\"ghost\"\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"1\"\n >\n <Flex\n align=\"center\"\n gap=\"1\"\n flexShrink=\"1\"\n minWidth=\"0\"\n maxWidth=\"250px\"\n >\n <Flex\n flexShrink=\"0\"\n >\n <Spinner\n loading={isOptimistic({ id: file.id })}\n >\n <FileIcon />\n </Spinner>\n </Flex>\n\n <Text\n size=\"2\"\n truncate\n wrap=\"nowrap\"\n >\n {file.filename}\n </Text>\n </Flex>\n\n <Flex\n flexShrink=\"0\"\n >\n <IconButton\n onClick={() => (\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== file.id)\n ))\n )}\n color=\"gray\"\n variant=\"ghost\"\n size=\"1\"\n >\n <Cross2Icon />\n </IconButton>\n </Flex>\n </Flex>\n </Card>\n ))}\n </Flex>\n )\n}\n","'use client'\n\nimport type OpenAI from 'openai'\nimport { useCallback } from 'react'\nimport { omit } from 'radash'\nimport dayjs from 'dayjs'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport {\n FilePlusIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useCreateFile } from '@/hooks/files/useCreateFile'\n\nconst accept = `.c,text/x-c,\n.cs,text/x-csharp,\n.cpp,text/x-c++,\n.doc,application/msword,\n.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document,\n.html,text/html,\n.java,text/x-java,\n.json,application/json,\n.md,text/markdown,\n.pdf,application/pdf,\n.php,text/x-php,\n.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation,\n.py,text/x-python,\n.py,text/x-script.python,\n.rb,text/x-ruby,\n.tex,text/x-tex,\n.txt,text/plain,\n.css,text/css,\n.js,text/javascript,\n.sh,application/x-sh,\n.ts,application/typescript`\n\nexport const Control = () => {\n const { isDisabled, isLoading, setFiles } = useMessageFormContext()\n const { createFile } = useCreateFile()\n const { addToast } = useToasts()\n\n const onChange = useCallback(async (event: React.ChangeEvent<HTMLInputElement>) => {\n const fileObjects = event.target.files\n if (!fileObjects) return\n\n const newFiles = Array.from(fileObjects).map((fileObject) => ({\n id: optimisticId(),\n filename: fileObject.name,\n object: 'file' as 'file',\n purpose: 'assistants' as 'assistants',\n created_at: dayjs().unix(),\n bytes: fileObject.size,\n status: 'processed' as 'processed',\n fileObject,\n }))\n\n setFiles((prev: OpenAI.Files.FileObject[]) => [\n ...prev,\n ...newFiles.map((file) => omit(file, ['fileObject'])),\n ])\n\n for await (const newFile of newFiles) {\n await createFile({\n file: newFile.fileObject,\n },\n {\n onSuccess: ({\n file,\n }: {\n file: OpenAI.Files.FileObject\n }) => (\n setFiles((prev) => ([\n ...prev.filter((prevFile) => prevFile.id !== newFile.id),\n file,\n ]))\n ),\n onError: () => {\n addToast({ type: 'error', message: 'Could not upload file. Please try again.' })\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== newFile.id)\n ))\n },\n })\n }\n }, [addToast, createFile, setFiles])\n\n return (\n <Flex\n pt=\"2\"\n pr=\"2\"\n flexGrow=\"0\"\n >\n <IconButton\n type=\"button\"\n variant=\"ghost\"\n color=\"gray\"\n disabled={isDisabled || isLoading}\n style={{\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n <FilePlusIcon />\n <input\n type=\"file\"\n multiple\n accept={accept}\n onChange={onChange}\n style={{\n cursor: 'pointer',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0,\n }}\n />\n </IconButton>\n </Flex>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateFile = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createFile: (...args: any[]) => {\n const [firstArg, ...restArgs] = args\n return props.mutateAsync({\n ...threadContext.variables,\n ...firstArg,\n }, ...restArgs)\n },\n }\n}\n","export const formData = (variables: any) => {\n const data = new FormData()\n\n for (const key in variables) {\n data.append(key, variables[key])\n }\n\n return data\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { formData } from './formData'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return formData(variables)\n if (!variables.assistantId) return formData(variables)\n if (!superinterfaceContext.threadIdCookieOptions?.get) return formData(variables)\n\n const threadId = superinterfaceContext.threadIdCookieOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return formData(variables)\n\n return formData({\n ...variables,\n threadId,\n })\n}\n","import {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const response = await fetch(`${superinterfaceContext.baseUrl}/files`, {\n method: 'POST',\n body: body({\n variables,\n superinterfaceContext,\n }),\n })\n\n const result = await response.json()\n return result\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createFile', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { Preview } from './Preview'\nimport { Control } from './Control'\n\nexport const Files = {\n Preview,\n Control,\n}\n","import { Submit } from './Submit'\nimport { Root } from './Root'\nimport { Field } from './Field'\n\nexport const MessageForm = () => (\n <Root>\n <Field.Root>\n <Field.Control />\n <Submit />\n </Field.Root>\n </Root>\n)\n\nMessageForm.Root = Root\nMessageForm.Field = Field\nMessageForm.Submit = Submit\n","import { Flex } from '@radix-ui/themes'\nimport {\n Provider,\n Args as ThreadProviderArgs,\n} from '@/components/threads/Thread/Provider'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\nexport type Args = ThreadProviderArgs\n\nexport const Root = ({\n children,\n ...rest\n}: Args) => (\n <ToastsProvider bottom=\"var(--space-9)\">\n <Provider {...rest}>\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n >\n {children}\n </Flex>\n </Provider>\n </ToastsProvider>\n)\n","'use client'\n\nimport { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nimport type { Args as SuperinterfaceProviderArgs } from '@/components/core/SuperinterfaceProvider'\n\nexport type Args = SuperinterfaceProviderArgs\nexport const Provider = SuperinterfaceProvider\n","import { useState, useCallback } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\nimport { CustomToast } from './CustomToast'\nimport { Toast as ToastType } from '@/types'\n\nexport const ToastsProvider = ({\n children,\n bottom = 0,\n}: {\n children: React.ReactNode\n bottom?: number | string\n}) => {\n const [toasts, setToasts] = useState<ToastType[]>([])\n const addToast = useCallback((toast: ToastType) => (\n setToasts((prevToasts) => [\n ...prevToasts,\n toast,\n ])\n ), [])\n\n return (\n <ToastsContext.Provider\n value={{\n toasts,\n addToast,\n }}\n >\n <Toast.Provider>\n {children}\n\n {Array.from(toasts).map((toast: ToastType, index: number) => (\n <CustomToast\n key={index}\n toast={toast}\n />\n ))}\n\n <Toast.Viewport\n style={{\n position: 'absolute',\n bottom,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--space-5)',\n gap: 'var(--space-3)',\n width: '390px',\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 99999999999999,\n outline: 'none',\n }}\n />\n </Toast.Provider>\n </ToastsContext.Provider>\n )\n}\n","import * as Toast from '@radix-ui/react-toast'\nimport {\n Card,\n Text,\n Flex,\n} from '@radix-ui/themes'\nimport {\n CheckCircledIcon,\n CrossCircledIcon,\n} from '@radix-ui/react-icons'\nimport { Toast as ToastType } from '@/types'\n\nexport const CustomToast = ({\n toast,\n}: {\n toast: ToastType,\n}) => (\n <Toast.Root>\n <Card>\n <Toast.Title>\n <Flex>\n <Flex\n pr=\"2\"\n height=\"14px\"\n align=\"center\"\n >\n {toast.type === 'success' ? (\n <CheckCircledIcon\n color=\"var(--accent-9)\"\n />\n ) : (\n <CrossCircledIcon\n color=\"var(--red-9)\"\n />\n )}\n </Flex>\n <Text\n weight=\"medium\"\n size=\"1\"\n >\n {toast.message}\n </Text>\n </Flex>\n </Toast.Title>\n </Card>\n </Toast.Root>\n)\n","import { Messages } from '@/components/threads/Thread/Messages'\nimport { MessageForm } from '@/components/threads/Thread/MessageForm'\nimport { Root, Args as RootArgs } from '@/components/threads/Thread/Root'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const Thread = (props: Args) => (\n <Root {...props}>\n <Messages />\n <MessageForm />\n </Root>\n)\n\nThread.Root = Root\nThread.Messages = Messages\nThread.MessageForm = MessageForm\n","import { useContext } from 'react'\nimport { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const useMessageContext = () => (\n useContext(MessageContext)\n)\n","import { useMemo } from 'react'\nimport {\n useQuery,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryOptions } from './lib/queryOptions'\n\ntype Args = {\n assistantId: string\n}\n\nexport const useAssistant = ({\n assistantId,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const props = useQuery(queryOptions({\n assistantId,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null,\n }), [props])\n}\n","import { queryOptions as tanstackQueryOptions } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryFn } from './queryFn'\n\ntype Args = {\n assistantId: string\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}\n\nexport const queryOptions = ({\n assistantId,\n superinterfaceContext,\n}: Args) => (\n tanstackQueryOptions({\n queryKey: ['assistants', { assistantId }],\n queryFn: queryFn({ superinterfaceContext }),\n })\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<['assistants', { assistantId: string }]>\n}\n\nexport const queryFn = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => async ({\n queryKey,\n}: QueryFunctionArgs) => {\n const [_key, { assistantId }] = queryKey\n\n const params = new URLSearchParams({\n publicApiKey: superinterfaceContext.variables.publicApiKey,\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/assistants/${assistantId}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<any>\n })\n}\n","import { useState } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Provider = ({\n children,\n}: Args) => {\n const threadDialogContext = useThreadDialogContext()\n const [isOpen, setIsOpen] = useState<boolean>(threadDialogContext.isOpen)\n\n return (\n <ThreadDialogContext.Provider\n value={{\n isOpen,\n setIsOpen,\n }}\n >\n {children}\n </ThreadDialogContext.Provider>\n )\n}\n","'use client'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const ThreadDialogContext = createContext<{\n isOpen: boolean\n setIsOpen: Dispatch<SetStateAction<boolean>>\n}>({\n isOpen: false,\n setIsOpen: () => {},\n})\n","import { useContext } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\n\nexport const useThreadDialogContext = () => (\n useContext(ThreadDialogContext)\n)\n","import { Provider } from '@/components/threads/ThreadDialog/Provider'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Root = ({\n children,\n}: Args) => (\n <Provider>\n {children}\n </Provider>\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Button } from './Button'\n\ntype Args = {\n children: React.ReactNode\n style?: React.CSSProperties\n}\n\nconst Root = ({\n children,\n style = {},\n}: Args) => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'none' : 'flex',\n sm: 'flex',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"fixed\"\n bottom=\"24px\"\n right=\"24px\"\n style={{\n zIndex: 9999999999,\n ...style,\n }}\n >\n {children}\n </Flex>\n )\n}\n\nexport const Trigger = (args: Omit<Args, 'children'>) => (\n <Root {...args}>\n <Button />\n </Root>\n)\n\nTrigger.Root = Root\nTrigger.Button = Button\n","import {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n ChatBubbleIcon,\n} from '@radix-ui/react-icons'\n\nexport const Button = () => (\n <IconButton\n size=\"4\"\n radius=\"full\"\n >\n <ChatBubbleIcon />\n </IconButton>\n)\n","import {\n Card,\n Inset,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Thread } from '@/components/threads/Thread'\nimport { Close } from '@/components/threads/ThreadDialog/Close'\n\ntype Args = {\n children: React.ReactNode\n style?: React.CSSProperties\n}\n\nconst Root = ({\n children,\n style = {},\n}: Args) => {\n const { isOpen } = useThreadDialogContext()\n if (!isOpen) return null\n\n return (\n <Flex\n direction=\"column\"\n justify=\"end\"\n position=\"fixed\"\n bottom={{\n initial: '0',\n sm: '72px',\n }}\n right={{\n initial: '0',\n sm: '24px',\n }}\n maxHeight={{\n initial: undefined,\n sm: '720px',\n }}\n maxWidth={{\n initial: undefined,\n sm: '400px',\n }}\n width=\"100%\"\n height={{\n initial: '100%',\n sm: 'calc(100% - 96px)',\n }}\n style={{\n zIndex: 9999999999,\n ...style,\n }}\n >\n <Card\n mb={{\n initial: undefined,\n sm: '3',\n }}\n style={{\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n }}\n >\n <Inset\n clip=\"padding-box\"\n side=\"all\"\n pb=\"current\"\n style={{\n display: 'flex',\n flexGrow: 1,\n }}\n >\n {children}\n </Inset>\n <Close />\n </Card>\n </Flex>\n )\n}\n\nconst Messages = () => (\n <Thread.Messages\n style={{\n paddingTop: 'var(--space-5)',\n paddingRight: 'var(--space-5)',\n paddingLeft: 'var(--space-5)',\n }}\n />\n)\n\nconst FormContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n direction=\"column\"\n pl=\"5\"\n pr=\"5\"\n pb=\"3\"\n flexShrink=\"0\"\n >\n {children}\n </Flex>\n)\n\nexport const Content = ({\n style = {},\n}: {\n style?: React.CSSProperties\n}) => (\n <Root style={style}>\n <Thread.Root>\n <Messages />\n <FormContainer>\n <Thread.MessageForm />\n </FormContainer>\n </Thread.Root>\n </Root>\n)\n\nContent.Root = Root\nContent.Messages = Messages\nContent.FormContainer = FormContainer\n","import {\n Cross1Icon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport const Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'flex' : 'none',\n sm: 'none',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"absolute\"\n top=\"24px\"\n right='24px'\n style={{\n zIndex: 9999999999,\n }}\n >\n <IconButton\n size=\"2\"\n variant=\"soft\"\n >\n <Cross1Icon />\n </IconButton>\n </Flex>\n )\n}\n","import { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const ThreadDialog = () => (\n <Root>\n <Content />\n <Trigger />\n </Root>\n)\n\nThreadDialog.Root = Root\nThreadDialog.Trigger = Trigger\nThreadDialog.Content = Content\n","'use client'\n\n// import 'regenerator-runtime/runtime'\nimport { Flex } from '@radix-ui/themes'\nimport _ from 'lodash'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { usePermission } from '@/hooks/misc/usePermission'\nimport { blobToData } from './lib/blobToData'\nimport { useStatus } from '@/hooks/audioThreads/useStatus'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\nexport type Args = {\n children: React.ReactNode\n}\n\nconst Content = ({\n children,\n}: Args) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const createMessageProps = useCreateMessage({\n onError: (error: unknown) => {\n createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n })(error)\n\n recorderProps.start()\n }\n })\n\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n },\n onStop: async (_event: any, chunks: BlobPart[]) => {\n // @ts-ignore-next-line\n const blob = new Blob(chunks, { type: chunks[0].type })\n const audioContent = await blobToData(blob)\n\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent,\n })\n },\n })\n\n const microphonePermission = usePermission({ name: 'microphone' })\n\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === 'granted') {\n recorderProps.start()\n }\n }\n })\n\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps,\n })\n\n return (\n <AudioThreadContext.Provider\n value={{\n status,\n recorderProps,\n messageAudioProps,\n }}\n >\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n p=\"9\"\n >\n {children}\n </Flex>\n </AudioThreadContext.Provider>\n )\n}\n\nexport const Root = ({\n children,\n}: Args) => (\n <ToastsProvider>\n <Content>\n {children}\n </Content>\n </ToastsProvider>\n)\n","'use client'\nimport { createContext } from 'react'\nimport { statusMessages } from '@/hooks/audioThreads/useStatus/lib/statusMessages'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport const AudioThreadContext = createContext<{\n status: keyof typeof statusMessages\n recorderProps: ReturnType<typeof useRecorder>\n messageAudioProps: ReturnType<typeof useMessageAudio>\n}>({\n status: 'idle',\n recorderProps: {\n status: 'idle',\n start: async () => {},\n stop: async () => {},\n pause: async () => {},\n resume: async () => {},\n visualizationAnalyser: null,\n },\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {},\n pause: async () => {},\n },\n})\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/usePermission.ts\nimport { useEffect, useState } from 'react';\nimport { noop, off, on } from './util';\n\nexport type IState = PermissionState | '';\n\ninterface IPushPermissionDescriptor extends PermissionDescriptor {\n name: 'push';\n userVisibleOnly?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IMidiPermissionDescriptor extends PermissionDescriptor {\n name: 'midi';\n sysex?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IDevicePermissionDescriptor extends PermissionDescriptor {\n name: 'camera' | 'microphone' | 'speaker';\n deviceId?: string;\n}\n\nexport type IPermissionDescriptor =\n | PermissionDescriptor\n | IPushPermissionDescriptor\n | IMidiPermissionDescriptor\n | IDevicePermissionDescriptor;\n\n// const usePermission = <T extends PermissionDescriptor>(permissionDesc: T): IState => {\nexport const usePermission = (permissionDesc: IPermissionDescriptor): IState => {\n const [state, setState] = useState<IState>('');\n\n useEffect(() => {\n let mounted = true;\n let permissionStatus: PermissionStatus | null = null;\n\n const onChange = () => {\n if (!mounted) {\n return;\n }\n setState(() => permissionStatus?.state ?? '');\n };\n\n navigator.permissions\n // @ts-ignore-next-line\n .query(permissionDesc)\n .then((status) => {\n permissionStatus = status;\n on(permissionStatus, 'change', onChange);\n onChange();\n })\n .catch(noop);\n\n return () => {\n permissionStatus && off(permissionStatus, 'change', onChange);\n mounted = false;\n permissionStatus = null;\n };\n }, [permissionDesc]);\n\n return state;\n};\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/misc/util.ts\nexport const noop = () => {};\n\nexport function on<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['addEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>));\n }\n}\n\nexport function off<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['removeEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>));\n }\n\n}\n","export const blobToData = (blob: Blob) => (\n new Promise((resolve) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result)\n reader.readAsDataURL(blob)\n })\n)\n","import { useMemo } from 'react'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { statusMessages } from './lib/statusMessages'\n\ntype Args = {\n messageAudioProps: ReturnType<typeof useMessageAudio>\n recorderProps: ReturnType<typeof useRecorder>\n createMessageProps: ReturnType<typeof useCreateMessage>\n}\n\nexport const useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps,\n}: Args) => {\n const latestMessageProps = useLatestMessage()\n\n const status = useMemo((): keyof typeof statusMessages => {\n if (recorderProps.status === 'recording') return 'recording'\n if (createMessageProps.isPending) return 'creatingMessage'\n\n if (messageAudioProps.paused || !messageAudioProps.isAudioPlayed) return 'playerPaused'\n if (messageAudioProps.playing || messageAudioProps.isPending) return 'playing'\n if (!messageAudioProps.isAudioPlayed && !messageAudioProps.isReady) return 'loading'\n if (latestMessageProps.latestMessage?.status === 'in_progress') return 'creatingMessage'\n if (recorderProps.status === 'idle') return 'idle'\n if (recorderProps.status === 'paused') return 'recorderPaused'\n\n return 'loading'\n }, [\n latestMessageProps,\n messageAudioProps,\n recorderProps,\n createMessageProps,\n ])\n\n return {\n status,\n }\n}\n","import dayjs, { Dayjs } from 'dayjs'\nimport { useAudioCapture, UseAudioCaptureProps } from 'use-audio-capture'\nimport { useMemo, useRef, useState, useCallback, useEffect } from 'react'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useInterval } from '@/hooks/misc/useInterval'\nimport { AudioEngine } from '@/types'\n\ntype Args = UseAudioCaptureProps & {\n isStopOnSilence: boolean\n}\n\nexport const useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop,\n}: Args) => {\n const [silenceStart, setSilenceStart] = useState<Dayjs | null>(null)\n const [noiseStart, setNoiseStart] = useState<Dayjs | null>(null)\n const [mediaStream, setMediaStream] = useState<MediaStream | null>(null)\n const [status, setStatus] = useState<'idle' | 'recording' | 'stopped' | 'paused'>('idle')\n const startAudioPlayer = useAudioPlayer()\n const endAudioPlayer = useAudioPlayer()\n const [isLoaded, setIsLoaded] = useState(false)\n\n useEffect(() => {\n if (isLoaded) return\n setIsLoaded(true)\n\n // startAudioPlayer.load('/sounds/warning.wav', {\n // html5: true,\n // })\n // endAudioPlayer.load('/sounds/success.wav', {\n // html5: true,\n // })\n }, [isLoaded, startAudioPlayer, endAudioPlayer])\n\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n // startAudioPlayer.play()\n setStatus('recording')\n setMediaStream(opts.mediaStream)\n isInited.current = false\n if (onStart) onStart(event, opts)\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onStop: async (...args) => {\n // endAudioPlayer.play()\n setStatus('stopped')\n if (onStop) await onStop(...args)\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onPause: () => {\n setStatus('paused')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onResume: () => {\n setStatus('recording')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n })\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isInited = useRef(false)\n\n useEffect(() => {\n if (!mediaStream) return\n if (isInited.current) return\n isInited.current = true\n\n const audioContext = new AudioContext()\n\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext,\n })\n }, [isInited, mediaStream])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const silenceAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n result.minDecibels = -60\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const handleSilence = useCallback(() => {\n if (!silenceAnalyser) return\n\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount)\n silenceAnalyser.getByteFrequencyData(frequencyData)\n\n const isSilent = frequencyData.every((f) => f === 0)\n\n setSilenceStart((silenceStart: Dayjs | null) => {\n if (isSilent) return silenceStart || dayjs()\n\n return null\n })\n\n setNoiseStart((noiseStart: Dayjs | null) => {\n if (isSilent) return noiseStart\n\n return noiseStart || dayjs()\n })\n\n requestAnimationFrame(() => handleSilence())\n }, [silenceAnalyser, setNoiseStart, setSilenceStart])\n\n useEffect(() => {\n if (!isStopOnSilence) return\n\n requestAnimationFrame(() => handleSilence())\n }, [handleSilence, isStopOnSilence])\n\n useInterval(() => {\n if (!isStopOnSilence) return\n if (status !== 'recording') return\n if (!silenceStart) return\n if (!noiseStart) return\n if (!silenceStart.isBefore(dayjs().subtract(1.5, 'second'))) return\n\n audioCaptureProps.stop()\n }, 300)\n\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser,\n }\n}\n","import { useEffect, useRef } from 'react';\n\nexport const useInterval = (callback: Function, delay?: number | null) => {\n const savedCallback = useRef<Function>(() => {})\n\n useEffect(() => {\n savedCallback.current = callback\n })\n\n useEffect(() => {\n if (delay !== null) {\n const interval = setInterval(() => savedCallback.current(), delay || 0)\n return () => clearInterval(interval)\n }\n\n return undefined\n }, [delay])\n}\n","import { useMemo, useRef, useState, useEffect } from 'react'\nimport nlp from 'compromise'\nimport { Howler } from 'howler'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AudioEngine } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { input as getInput } from './lib/input'\nimport { isHtmlAudioSupported } from './lib/isHtmlAudioSupported'\n\ntype MessageSentence = {\n messageId: string\n sentence: string\n}\n\nconst FULL_SENTENCE_REGEX = /[\\.?!]$/\n\nconst getMessageSentences = ({\n messageId,\n input,\n}: {\n messageId: string\n input: string\n}) => {\n const sentences = nlp(input).sentences().json()\n\n return sentences.map((sentence: { text: string }) => ({\n messageId,\n sentence: sentence.text,\n }))\n}\n\nexport const useMessageAudio = ({\n onEnd,\n}: {\n onEnd: () => void\n}) => {\n const [isAudioPlayed, setIsAudioPlayed] = useState(false)\n const [stoppedMessageIds, setStoppedMessageIds] = useState<string[]>([])\n const [playedMessageSentences, setPlayedMessageSentences] = useState<MessageSentence[]>([])\n const audioPlayer = useAudioPlayer()\n const nextAudioPlayer = useAudioPlayer()\n const superinterfaceContext = useSuperinterfaceContext()\n const [isPlaying, setIsPlaying] = useState(false)\n\n const latestMessageProps = useLatestMessage()\n\n const unplayedMessageSentences = useMemo(() => {\n if (!latestMessageProps.latestMessage) return []\n if (latestMessageProps.latestMessage.role !== 'assistant') return []\n if (stoppedMessageIds.includes(latestMessageProps.latestMessage.id)) return []\n\n const input = getInput({\n message: latestMessageProps.latestMessage,\n })\n\n if (!input) return []\n\n const messageSentences = getMessageSentences({\n messageId: latestMessageProps.latestMessage.id,\n input,\n })\n\n return messageSentences.filter((ms: { messageId: string, sentence: string }) => (\n !playedMessageSentences.find((pms) => pms.messageId === ms.messageId && pms.sentence === ms.sentence)\n ))\n }, [latestMessageProps, playedMessageSentences])\n\n useEffect(() => {\n if (isPlaying) return\n if (audioPlayer.playing) return\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'assistant') return\n\n const firstUnplayedMessageSentence = unplayedMessageSentences[0]\n if (!firstUnplayedMessageSentence) {\n return\n }\n\n const isFullSentence = isOptimistic({ id: latestMessageProps.latestMessage.id }) ||\n latestMessageProps.latestMessage.status !== 'in_progress' ||\n FULL_SENTENCE_REGEX.test(firstUnplayedMessageSentence.sentence)\n\n if (!isFullSentence) return\n setIsPlaying(true)\n\n setPlayedMessageSentences((prev) => [...prev, firstUnplayedMessageSentence])\n\n const searchParams = new URLSearchParams({\n input: firstUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${searchParams}`, {\n format: 'mp3',\n autoplay: isAudioPlayed,\n html5: isHtmlAudioSupported,\n onplay: () => {\n setIsAudioPlayed(true)\n },\n onstop: () => {\n setStoppedMessageIds((prev) => [...prev, firstUnplayedMessageSentence.messageId])\n setIsPlaying(false)\n },\n onload: () => {\n const nextUnplayedMessageSentence = unplayedMessageSentences[1]\n if (!nextUnplayedMessageSentence) return\n\n const isNextFullSentence = FULL_SENTENCE_REGEX.test(nextUnplayedMessageSentence.sentence)\n if (!isNextFullSentence) return\n\n const nextSearchParams = new URLSearchParams({\n input: nextUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n nextAudioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${nextSearchParams}`, {\n format: 'mp3',\n autoplay: false,\n html5: isHtmlAudioSupported,\n })\n },\n onend: () => {\n setIsPlaying(false)\n\n if (unplayedMessageSentences.length === 1 && latestMessageProps.latestMessage.status !== 'in_progress') {\n onEnd()\n }\n },\n })\n }, [\n unplayedMessageSentences,\n isPlaying,\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n nextAudioPlayer,\n playedMessageSentences,\n onEnd,\n ])\n\n useEffect(() => {\n if (isHtmlAudioSupported) {\n if (!Howler?._howls[0]?._sounds[0]?._node) return\n\n Howler._howls[0]._sounds[0]._node.crossOrigin = 'anonymous'\n }\n }, [audioPlayer])\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isAudioEngineInited = useRef(false)\n\n useEffect(() => {\n if (!audioPlayer.playing) return\n if (isAudioEngineInited.current) return\n isAudioEngineInited.current = true\n\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext()\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext,\n })\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx,\n })\n }\n }, [audioPlayer, isAudioEngineInited])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(audioEngine.audioContext.destination)\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const isPending = useMemo(() => isPlaying || unplayedMessageSentences.length > 0, [isPlaying, unplayedMessageSentences])\n\n return {\n isPending,\n isAudioPlayed,\n ...audioPlayer,\n visualizationAnalyser,\n }\n}\n","import OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { Message } from '@/types'\n\ntype Args = {\n message: Message\n}\n\nexport const input = ({\n message,\n}: Args) => {\n const textContents = message.content.filter((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.type === 'text'\n ))\n\n const result = textContents.map((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.text.value\n )).join(' ')\n\n if (isEmpty(result)) return null\n\n return result\n}\n","import { detect } from 'detect-browser'\n\nconst unsupportedNames = [\n 'safari',\n 'ios',\n]\n\nexport const isHtmlAudioSupported = !unsupportedNames.includes(detect()?.name || '')\n","import { useContext, useState, useCallback, useEffect } from 'react'\nimport _ from 'lodash'\nimport { Flex } from '@radix-ui/themes'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\n\nexport const Visualization = () => {\n const audioThreadContext = useAudioThreadContext()\n const assistantNameContext = useContext(AssistantNameContext)\n const [scale, setScale] = useState(0)\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setScale(1)\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n setScale(1 + _.mean(frequencyData) / 255 / 10)\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser })\n }, [draw, audioThreadContext])\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n mb=\"3\"\n flexGrow=\"1\"\n >\n <Flex\n align=\"center\"\n justify=\"center\"\n height=\"200px\"\n width=\"200px\"\n style={{\n backgroundColor: audioThreadContext.status === 'playing' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: '9999px',\n scale,\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.messageAudioProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'playing' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"40px\"\n barWidth=\"24px\"\n />\n </Flex>\n\n <Flex\n ml=\"-22.5px\"\n gap=\"3\"\n pt=\"5\"\n >\n <AssistantAvatar />\n <Name>\n {assistantNameContext}\n </Name>\n </Flex>\n </Flex>\n )\n}\n","import { useContext } from 'react'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\n\nexport const useAudioThreadContext = () => (\n useContext(AudioThreadContext)\n)\n","'use client'\nimport _ from 'lodash'\nimport {\n Flex,\n Grid,\n} from '@radix-ui/themes'\nimport { useState, useEffect, useCallback } from 'react'\nimport { cluster } from 'radash'\n\nconst barCount = 4\n\nexport const BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth,\n}: {\n visualizationAnalyser: AnalyserNode | null\n backgroundColor: string\n height: string\n barWidth: string\n}) => {\n const [barHeights, setBarHeights] = useState<number[]>([])\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setBarHeights(Array(barCount).fill(0))\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n // @ts-ignore-next-line\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount)\n\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => (\n _.mean(frequencyDataCluster) / 255 * 100\n ))\n )\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser })\n }, [draw, visualizationAnalyser])\n\n return (\n <Grid\n columns={`${barCount}`}\n gap=\"1\"\n width=\"auto\"\n style={{\n // TODO not sure why we need this\n gridTemplateColumns: 'repeat(4, minmax(0, 1fr))',\n }}\n >\n {barHeights.map((barHeight, index) => (\n <Flex\n key={index}\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n height={height}\n >\n <Flex\n minHeight=\"50%\"\n maxHeight=\"100%\"\n height={`${barHeight + 20}%`}\n width={barWidth}\n style={{\n backgroundColor,\n borderRadius: 'var(--radius-6)',\n }}\n />\n </Flex>\n ))}\n </Grid>\n )\n}\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\nconst html = ({ texts }: { texts: string[] }) => `\n .status-messages-texts:after {\n content: '${texts[0]}';\n animation: texts ${texts.length * 5}s linear infinite;\n }\n\n @keyframes texts {\n ${texts.map((_, i) => `\n ${i * 100 / texts.length}% {\n content: \"${texts[i]}\";\n }\n `).join('')}\n }`\n\nexport const StatusMessages = ({\n texts,\n}: {\n texts: string[]\n}) => (\n <Flex\n justify=\"center\"\n pb=\"5\"\n >\n <Text\n size=\"2\"\n weight=\"regular\"\n color=\"gray\"\n className=\"status-messages-texts\"\n />\n\n <style\n dangerouslySetInnerHTML={{\n __html: html({ texts }),\n }}\n />\n </Flex>\n)\n","import { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { StatusMessages } from './StatusMessages'\n\nexport const Status = () => {\n const audioThreadContext = useAudioThreadContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <StatusMessages\n texts={[\n 'Start speaking',\n 'Listening',\n 'Finish speaking to send',\n 'Click the button below to send manually',\n ]}\n />\n )\n }\n\n if (['recorderPaused', 'idle', 'playerPaused'].includes(audioThreadContext.status)) {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to activate',\n ]}\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to interrupt',\n ]}\n />\n )\n }\n\n return (\n <StatusMessages\n texts={[\n 'Thinking',\n ]}\n />\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { MicIcon } from './MicIcon'\nimport { ActionButton } from './ActionButton'\n\nexport const Form = () => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n >\n <Flex\n pb=\"3\"\n align=\"center\"\n >\n <Flex\n ml=\"-22.5px\"\n mr=\"2\"\n align=\"center\"\n >\n <MicIcon\n style={{\n color: audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)',\n }}\n />\n </Flex>\n\n <Flex\n px=\"2\"\n py=\"1\"\n style= {{\n backgroundColor: audioThreadContext.status === 'recording' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: 'var(--radius-6)',\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.recorderProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"20px\"\n barWidth=\"12px\"\n />\n </Flex>\n </Flex>\n\n <ActionButton />\n </Flex>\n )\n}\n","import { SVGProps } from 'react'\n\nexport const MicIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth={0}\n viewBox=\"0 0 384 512\"\n height=\"15\"\n width=\"15\"\n {...props}\n >\n <path\n stroke=\"none\"\n d=\"M192 0c-53 0-96 43-96 96v160c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464h-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h144c13.3 0 24-10.7 24-24s-10.7-24-24-24h-48v-33.6c85.8-11.7 152-85.3 152-174.4v-40c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128S64 326.7 64 256v-40z\"\n />\n </svg>\n)\n","import {\n Flex,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n StopIcon,\n PauseIcon,\n ArrowUpIcon,\n ResumeIcon,\n} from '@radix-ui/react-icons'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const ActionButton = () => {\n const audioThreadContext = useAudioThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <Flex\n align=\"center\"\n >\n <Flex\n mr=\"3\"\n ml=\"-7\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.pause}\n color=\"gray\"\n variant=\"soft\"\n size=\"1\"\n >\n <PauseIcon />\n </IconButton>\n </Flex>\n\n <IconButton\n onClick={audioThreadContext.recorderProps.stop}\n highContrast\n variant=\"soft\"\n size=\"4\"\n >\n <ArrowUpIcon />\n </IconButton>\n </Flex>\n )\n }\n\n if (audioThreadContext.status === 'recorderPaused') {\n return (\n <IconButton\n onClick={audioThreadContext.recorderProps.resume}\n color=\"red\"\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'idle') {\n return (\n <IconButton\n onClick={() => audioThreadContext.recorderProps.start()}\n size=\"4\"\n color=\"red\"\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <IconButton\n onClick={() => {\n audioThreadContext.messageAudioProps.stop()\n superinterfaceContext.createMessageAbortControllerRef.current?.abort()\n audioThreadContext.recorderProps.start()\n }}\n size=\"4\"\n color=\"gray\"\n variant=\"soft\"\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'playerPaused') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.play()}\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n size=\"4\"\n variant=\"soft\"\n disabled\n />\n )\n}\n","import { Root, Args as RootArgs } from './Root'\nimport { Visualization } from './Visualization'\nimport { Status } from './Status'\nimport { Form } from './Form'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const AudioThread = (props: Args) => (\n <Root {...props}>\n <Visualization />\n <Status />\n <Form />\n </Root>\n)\n\nAudioThread.Root = Root\nAudioThread.Visualization = Visualization\nAudioThread.Status = Status\nAudioThread.Form = Form\n","import { AudioThread } from '@/components/threads/AudioThread'\nimport { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const AudioThreadDialog = () => (\n <Root>\n <Content.Root>\n <AudioThread />\n </Content.Root>\n <Trigger />\n </Root>\n)\n\nAudioThreadDialog.Root = Root\nAudioThreadDialog.Trigger = Trigger\nAudioThreadDialog.Content = Content\n","import { useMemo } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { Content } from './Content'\nimport { Item } from './Item'\n\nexport const Suggestions = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const latestMessageProps = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps])\n\n if (latestMessageProps.isLoading) return null\n if (isDisabled) return null\n\n return (\n <Content>\n {children}\n </Content>\n )\n}\n\nSuggestions.Item = Item\n","import { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport { onlyText } from 'react-children-utilities'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { Item } from './Item'\n\nexport const Content = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const isMutatingMessage = useIsMutatingMessage()\n\n const suggestions = useMemo(() => (\n onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim())\n ), [children])\n\n if (isEmpty(suggestions)) return null\n\n return (\n <Flex\n gap=\"2\"\n py=\"2\"\n wrap=\"wrap\"\n >\n {suggestions.map((suggestion) => (\n <Item\n key={suggestion}\n suggestion={suggestion}\n isDisabled={isMutatingMessage}\n />\n ))}\n </Flex>\n )\n}\n","import {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Text,\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\n\nexport const Item = ({\n suggestion,\n isDisabled,\n}: {\n suggestion: string\n isDisabled: boolean\n}) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n return (\n <Content\n onClick={() => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion,\n })\n }}\n isDisabled={isDisabled}\n isPending={isPending}\n >\n {suggestion}\n </Content>\n )\n}\n\nconst Content = ({\n onClick,\n isDisabled,\n isPending,\n children,\n}: {\n onClick: () => void\n isDisabled: boolean\n isPending: boolean\n children: React.ReactNode\n}) => (\n <Button\n variant=\"soft\"\n onClick={onClick}\n disabled={isDisabled}\n style={{\n minHeight: 'var(--base-button-height)',\n height: 'inherit',\n flexShrink: 1,\n }}\n >\n <Text\n size=\"1\"\n weight=\"regular\"\n >\n {children}\n </Text>\n\n <Spinner loading={isPending}>\n <ArrowUpIcon\n style={{\n flexShrink: 0,\n }}\n />\n </Spinner>\n </Button>\n)\n\nItem.Content = Content\n","import { useMemo } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { merge } from '@/lib/misc/merge'\n\nexport const MarkdownProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevMarkdownContext = useMarkdownContext()\n\n const value = useMemo(() => (\n merge(prevMarkdownContext, rest)\n ), [rest, prevMarkdownContext])\n\n return (\n <MarkdownContext.Provider\n value={value}\n >\n {children}\n </MarkdownContext.Provider>\n )\n}\n","import { AvatarType as AvatarTypeEnum } from '@/lib/enums'\nimport { Avatar as AvatarType } from '@/types'\nimport { Avatar as RadixAvatar } from '@radix-ui/themes'\nimport { ImageAvatar } from '@/components/imageAvatars/ImageAvatar'\nimport { IconAvatar } from '@/components/iconAvatars/IconAvatar'\n\nexport const Avatar = ({\n avatar,\n size = '1',\n}: {\n avatar: AvatarType\n size?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n}) => {\n if (avatar) {\n if (avatar.type === AvatarTypeEnum.IMAGE && avatar.imageAvatar) {\n return (\n <ImageAvatar\n imageAvatar={avatar.imageAvatar}\n size={size}\n />\n )\n }\n\n if (avatar.type === AvatarTypeEnum.ICON && avatar.iconAvatar) {\n return (\n <IconAvatar\n iconAvatar={avatar.iconAvatar}\n size={size}\n />\n )\n }\n }\n\n return (\n <RadixAvatar\n fallback=\"\"\n size={size}\n />\n )\n}\n","import { Avatar } from '@radix-ui/themes'\nimport { Size, ImageAvatar as ImageAvatarType } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { optimizedSrc } from './lib/optimizedSrc'\n\nexport const ImageAvatar = ({\n imageAvatar,\n size,\n}: {\n imageAvatar: ImageAvatarType\n size: Size\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n\n return (\n <Avatar\n fallback=\"\"\n src={optimizedSrc({ imageAvatar, size, superinterfaceContext })}\n size={size}\n />\n )\n}\n","import { Size, ImageAvatar } from '@/types'\n\nconst width = ({\n size,\n}: {\n size: Size\n}) => {\n if (size === '1') {\n return 48\n } else if (size === '2') {\n return 64\n } else if (size === '3') {\n return 96\n } else if (size === '4') {\n return 96\n } else if (size === '5') {\n return 128\n } else if (size === '6') {\n return 256\n } else if (size === '7') {\n return 256\n } else if (size === '8') {\n return 256\n } else if (size === '9') {\n return 384\n }\n\n return 384\n}\n\nexport const path = ({\n imageAvatar,\n size,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n}) => (\n `/_next/image?url=${encodeURIComponent(imageAvatar.url)}&w=${width({ size })}&q=95`\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const host = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.baseUrl) return ''\n if (!/^https?:\\/\\//i.test(superinterfaceContext.baseUrl)) return ''\n\n return new URL(superinterfaceContext.baseUrl).origin\n}\n","import { Size, ImageAvatar } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { path } from './path'\nimport { host } from './host'\n\nexport const optimizedSrc = ({\n imageAvatar,\n size,\n superinterfaceContext,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!imageAvatar.url) return ''\n if (imageAvatar.url.endsWith('.svg')) return imageAvatar.url\n\n return `${host({ superinterfaceContext })}${path({ imageAvatar, size })}`\n}\n","import { useMemo } from 'react'\nimport { IconAvatar as IconAvatarType } from '@/types'\nimport { Avatar } from '@radix-ui/themes'\nimport { iconAvatarComponents } from '@/lib/iconAvatars/iconAvatarComponents'\n\nexport const IconAvatar = ({\n iconAvatar,\n size,\n}: {\n iconAvatar: IconAvatarType\n size: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n}) => {\n const Component = useMemo(() => (\n iconAvatarComponents[iconAvatar.name]\n ), [iconAvatar])\n\n return (\n <Avatar\n size={size}\n fallback={(\n Component ? (\n <Component />\n ) : (\n ''\n )\n )}\n />\n )\n}\n","import { IconAvatarName } from '@/lib/enums'\nimport {\n BackpackIcon,\n RocketIcon,\n MagicWandIcon,\n CubeIcon,\n TargetIcon,\n DiscIcon,\n GlobeIcon,\n StarIcon,\n LightningBoltIcon,\n FaceIcon,\n PersonIcon,\n HeartIcon,\n} from '@radix-ui/react-icons'\n\nexport const iconAvatarComponents = {\n [IconAvatarName.BACKPACK]: BackpackIcon,\n [IconAvatarName.ROCKET]: RocketIcon,\n [IconAvatarName.MAGIC_WAND]: MagicWandIcon,\n [IconAvatarName.CUBE]: CubeIcon,\n [IconAvatarName.TARGET]: TargetIcon,\n [IconAvatarName.DISC]: DiscIcon,\n [IconAvatarName.GLOBE]: GlobeIcon,\n [IconAvatarName.STAR]: StarIcon,\n [IconAvatarName.LIGHTNING_BOLT]: LightningBoltIcon,\n [IconAvatarName.FACE]: FaceIcon,\n [IconAvatarName.PERSON]: PersonIcon,\n [IconAvatarName.HEART]: HeartIcon,\n}\n","import { useMemo } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\nimport { useComponents } from '@/hooks/components/useComponents'\nimport { merge } from '@/lib/misc/merge'\n\nexport const ComponentsProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevComponents = useComponents()\n\n const value = useMemo(() => (\n merge(prevComponents, rest)\n ), [rest, prevComponents])\n\n return (\n <ComponentsContext.Provider\n value={value}\n >\n {children}\n </ComponentsContext.Provider>\n )\n}\n","import { useContext } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\nexport const useComponents = () => (\n useContext(ComponentsContext)\n)\n","import { useMemo } from 'react'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { MarkdownProvider } from '@/components/markdown/MarkdownProvider'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { useAssistant } from '@/hooks/assistants/useAssistant'\nimport { Avatar } from '@/components/avatars/Avatar'\nimport { Theme } from '@radix-ui/themes'\nimport { Code } from './Code'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const AssistantProvider = ({\n children,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { assistant } = useAssistant({\n assistantId: superinterfaceContext.variables.assistantId,\n })\n\n const markdownContext = useMarkdownContext()\n\n const components = useMemo(() => ({\n code: (props: JSX.IntrinsicElements['code']) => (\n // @ts-ignore-next-line\n <Code\n {...props}\n markdownContext={markdownContext}\n />\n ),\n }), [markdownContext])\n\n if (!assistant) {\n return null\n }\n\n return (\n <Theme\n accentColor={assistant.theme.accentColor}\n grayColor={assistant.theme.grayColor}\n radius={assistant.theme.radius}\n appearance={assistant.theme.appearance}\n scaling={assistant.theme.scaling}\n panelBackground=\"solid\"\n hasBackground={false}\n >\n <AssistantNameContext.Provider value={assistant.name}>\n <AssistantAvatarContext.Provider\n value={\n <Avatar\n avatar={assistant.avatar}\n />\n }\n >\n <MarkdownProvider\n // @ts-ignore-next-line\n components={components}\n >\n {children}\n </MarkdownProvider>\n </AssistantAvatarContext.Provider>\n </AssistantNameContext.Provider>\n </Theme>\n )\n}\n","import { useMemo } from 'react'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { Suggestions } from '@/components/suggestions/Suggestions'\nimport { useMessageContext } from '@/hooks/messages/useMessageContext'\n\nexport const Code = ({\n children,\n className,\n markdownContext,\n}: {\n children: string,\n className: string,\n markdownContext: ReturnType<typeof useMarkdownContext>\n}) => {\n const messageContext = useMessageContext()\n\n const isAssistantMessage = useMemo(() => (\n messageContext.message?.role === 'assistant'\n ), [messageContext])\n\n if (!isAssistantMessage || className !== 'language-suggestions') {\n return markdownContext.components.code({ children, className })\n }\n\n return <Suggestions>{children}</Suggestions>\n}\n"]}