@superinterface/react 3.0.2 → 3.1.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/server.ts","../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/messages/messagesResponse/data/messages/index.ts","../src/lib/runSteps/getRunSteps/index.ts","../src/lib/messages/extendMessage.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/index.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/getLatestRun.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/messages/messagesResponse/data/index.ts","../src/lib/messages/messagesResponse/limit.ts","../src/lib/messages/messagesResponse/hasNextPage.ts","../src/lib/messages/messagesResponse/index.ts","../src/lib/runs/serializeRun.ts","../src/lib/streams/enqueueJson.ts","../src/lib/messages/createMessageResponse/actionsStream.ts","../src/lib/messages/createMessageResponse/handleStream.ts","../src/lib/messages/createMessageResponse/index.ts"],"names":["import_radash","dayjs","messagesResponse","pMap","import_p_map"],"mappings":"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","sourcesContent":["export { messagesResponse } from '@/lib/messages/messagesResponse'\nexport { createMessageResponse } from '@/lib/messages/createMessageResponse'\nexport { extendMessage } from '@/lib/messages/extendMessage'\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n attachments: message.attachments,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { runMessages } from './runMessages'\n\nexport const messages = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => {\n const result = await pMap(messagesResponse.data, (message) => (\n extendMessage({\n client,\n message,\n })\n ))\n\n if (pageParam) {\n return result\n }\n\n return [\n ...await runMessages({\n result,\n threadId,\n client,\n }),\n ...result,\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n runId: string\n client: OpenAI\n}\n\nexport const getRunSteps = async ({\n threadId,\n runId,\n client,\n}: Args) => {\n const runStepsResponse = await client.beta.threads.runs.steps.list(\n threadId,\n runId,\n )\n\n return runStepsResponse.data\n}\n","import OpenAI from 'openai'\nimport { getRunSteps } from '@/lib/runSteps/getRunSteps'\n\ntype Args = {\n message: OpenAI.Beta.Threads.Messages.Message\n client: OpenAI\n}\n\nexport const extendMessage = async ({\n message,\n client,\n}: Args) => {\n if (!message.run_id) {\n return {\n ...message,\n runSteps: [],\n }\n }\n\n return {\n ...message,\n runSteps: await getRunSteps({\n threadId: message.thread_id,\n runId: message.run_id,\n client,\n }),\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { getLatestRun } from './getLatestRun'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n result: OpenAI.Beta.Threads.Messages.Message[]\n threadId: string\n client: OpenAI\n}\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'requires_action',\n 'cancelling',\n]\n\nexport const runMessages = async ({\n result,\n threadId,\n client,\n}: Args) => {\n const latestRun = await getLatestRun({ threadId, client })\n\n if (!latestRun) {\n return []\n }\n\n const messageFromLatestRun = result.find(m => m.run_id === latestRun.id)\n\n if (messageFromLatestRun) {\n return []\n }\n\n if (!progressStatuses.includes(latestRun.status)) {\n return []\n }\n\n return [\n await extendMessage({\n message: {\n id: optimisticId(),\n role: 'assistant' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n incomplete_details: null,\n completed_at: dayjs().unix(),\n incomplete_at: null,\n status: 'completed',\n content: [],\n run_id: latestRun.id,\n assistant_id: latestRun.assistant_id,\n thread_id: latestRun.thread_id,\n attachments: [],\n metadata: {},\n },\n client,\n }),\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n client: OpenAI\n}\n\nexport const getLatestRun = async ({\n threadId,\n client,\n}: Args) => {\n const runsResponse = await client.beta.threads.runs.list(threadId, {\n limit: 1,\n })\n\n return runsResponse.data[0]\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { messages } from './messages'\n\nexport const data = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => (\n (await messages({\n messagesResponse,\n pageParam,\n threadId,\n client,\n })).map((message) => (\n serializeMessage({ message })\n ))\n)\n","export const limit = 10\n","import OpenAI from 'openai'\nimport { limit } from './limit'\n\nexport const hasNextPage = ({\n messagesResponse,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n}) => {\n if (messagesResponse.data.length < limit) return false\n\n return messagesResponse.hasNextPage()\n}\n","import _ from 'lodash'\nimport OpenAI from 'openai'\nimport { MessagesPage } from '@/types'\nimport { data } from './data'\nimport { limit } from './limit'\nimport { hasNextPage } from './hasNextPage'\n\ntype Args = {\n client: OpenAI\n threadId: string\n pageParam?: string\n}\n\nexport const messagesResponse = async ({\n client,\n threadId,\n pageParam,\n}: Args): Promise<MessagesPage> => {\n const messagesResponse = await client.beta.threads.messages.list(threadId, {\n ...(pageParam ? { after: pageParam } : {}),\n limit,\n })\n\n return {\n data: await data({\n client,\n messagesResponse,\n pageParam,\n threadId,\n }),\n hasNextPage: hasNextPage({ messagesResponse }),\n // @ts-ignore-next-line\n lastId: messagesResponse.body.last_id,\n }\n}\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRun = ({\n run\n}: {\n run: OpenAI.Beta.Threads.Runs.Run\n}) => (\n pick(run, [\n 'id',\n 'thread_id',\n 'assistant_id',\n 'created_at',\n ])\n)\n","export const enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\n\nexport const actionsStream = async ({\n client,\n run,\n handleToolCall,\n controller,\n}: {\n client: any\n run: OpenAI.Beta.Threads.Runs.Run\n handleToolCall: any\n controller: ReadableStreamDefaultController\n}) => {\n if (!run.required_action) {\n throw new Error('Run does not have a required action')\n }\n\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls\n\n return client.beta.threads.runs.submitToolOutputsStream(\n run.thread_id,\n run.id,\n {\n tool_outputs: await pMap(toolCalls, (toolCall) => (\n handleToolCall({\n toolCall,\n run,\n controller,\n }))\n ),\n },\n )\n}\n","import { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { serializeRun } from '@/lib/runs/serializeRun'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\nimport { enqueueJson } from '@/lib/streams/enqueueJson'\nimport { actionsStream } from './actionsStream'\n\nexport const handleStream = async ({\n client,\n stream,\n controller,\n handleToolCall,\n onEvent,\n}: {\n client: any\n stream: ReadableStream\n controller: ReadableStreamDefaultController\n handleToolCall: any\n onEvent: ({\n controller,\n event,\n data,\n }: {\n controller: ReadableStreamDefaultController\n event: string\n data: any\n }) => void\n}) => {\n for await (const value of stream) {\n onEvent({ controller, event: value.event, data: value.data })\n\n if (['thread.message.created', 'thread.message.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeMessage({\n message: value.data,\n }),\n },\n })\n } else if (['thread.message.delta', 'thread.run.step.delta'].includes(value.event)) {\n enqueueJson({\n controller,\n value,\n })\n } else if (value.event === 'thread.run.created') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.failed') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (['thread.run.step.created', 'thread.run.step.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRunStep({\n runStep: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.requires_action') {\n enqueueJson({\n controller,\n value,\n })\n\n await handleStream({\n client,\n stream: await actionsStream({\n client,\n run: value.data,\n handleToolCall,\n controller,\n }),\n controller,\n handleToolCall,\n onEvent,\n })\n } else {\n console.dir({ value }, { depth: null })\n }\n }\n}\n","import { handleStream } from './handleStream'\n\ntype CallbackArgs = {\n controller: ReadableStreamDefaultController<Uint8Array>\n}\n\nexport const createMessageResponse = ({\n client,\n createRunStream,\n handleToolCall,\n onStart = () => {},\n onError = () => {},\n onClose = () => {},\n onEvent = () => {},\n}: {\n client: any\n createRunStream: any\n handleToolCall: any\n onStart?: (args: CallbackArgs) => void\n onError?: (args: CallbackArgs & { error: any }) => void\n onClose?: (args: CallbackArgs) => void\n onEvent?: (args: CallbackArgs & { event: string, data: any }) => void\n}) => (\n new ReadableStream({\n async start(controller) {\n onStart({ controller })\n\n try {\n await handleStream({\n client,\n stream: createRunStream,\n controller,\n handleToolCall,\n onEvent,\n })\n } catch (error) {\n onError({ error, controller })\n controller.error(error)\n }\n\n onClose({ controller })\n controller.close()\n },\n })\n)\n"]}
1
+ {"version":3,"sources":["../src/server.ts","../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/messages/messagesResponse/data/messages/index.ts","../src/lib/runSteps/getRunSteps/index.ts","../src/lib/messages/extendMessage.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/index.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/getLatestRun.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/messages/messagesResponse/data/index.ts","../src/lib/messages/messagesResponse/limit.ts","../src/lib/messages/messagesResponse/hasNextPage.ts","../src/lib/messages/messagesResponse/index.ts","../src/lib/runs/serializeRun.ts","../src/lib/streams/enqueueJson.ts","../src/lib/messages/createMessageResponse/actionsStream.ts","../src/lib/messages/createMessageResponse/handleStream.ts","../src/lib/messages/createMessageResponse/index.ts"],"names":["import_radash","dayjs","messagesResponse","pMap","import_p_map"],"mappings":"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","sourcesContent":["export { messagesResponse } from '@/lib/messages/messagesResponse'\nexport { createMessageResponse } from '@/lib/messages/createMessageResponse'\nexport { extendMessage } from '@/lib/messages/extendMessage'\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n attachments: message.attachments,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { runMessages } from './runMessages'\n\nexport const messages = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => {\n const result = await pMap(messagesResponse.data, (message) => (\n extendMessage({\n client,\n message,\n })\n ))\n\n if (pageParam) {\n return result\n }\n\n return [\n ...await runMessages({\n result,\n threadId,\n client,\n }),\n ...result,\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n runId: string\n client: OpenAI\n}\n\nexport const getRunSteps = async ({\n threadId,\n runId,\n client,\n}: Args) => {\n const runStepsResponse = await client.beta.threads.runs.steps.list(\n threadId,\n runId,\n )\n\n return runStepsResponse.data\n}\n","import OpenAI from 'openai'\nimport { getRunSteps } from '@/lib/runSteps/getRunSteps'\n\ntype Args = {\n message: OpenAI.Beta.Threads.Messages.Message\n client: OpenAI\n}\n\nexport const extendMessage = async ({\n message,\n client,\n}: Args) => {\n if (!message.run_id) {\n return {\n ...message,\n runSteps: [],\n }\n }\n\n return {\n ...message,\n runSteps: await getRunSteps({\n threadId: message.thread_id,\n runId: message.run_id,\n client,\n }),\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { getLatestRun } from './getLatestRun'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n result: OpenAI.Beta.Threads.Messages.Message[]\n threadId: string\n client: OpenAI\n}\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'requires_action',\n 'cancelling',\n]\n\nexport const runMessages = async ({\n result,\n threadId,\n client,\n}: Args) => {\n const latestRun = await getLatestRun({ threadId, client })\n\n if (!latestRun) {\n return []\n }\n\n const messageFromLatestRun = result.find(m => m.run_id === latestRun.id)\n\n if (messageFromLatestRun) {\n return []\n }\n\n if (!progressStatuses.includes(latestRun.status)) {\n return []\n }\n\n return [\n await extendMessage({\n message: {\n id: optimisticId(),\n role: 'assistant' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n incomplete_details: null,\n completed_at: dayjs().unix(),\n incomplete_at: null,\n status: 'completed',\n content: [],\n run_id: latestRun.id,\n assistant_id: latestRun.assistant_id,\n thread_id: latestRun.thread_id,\n attachments: [],\n metadata: {},\n },\n client,\n }),\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n client: OpenAI\n}\n\nexport const getLatestRun = async ({\n threadId,\n client,\n}: Args) => {\n const runsResponse = await client.beta.threads.runs.list(threadId, {\n limit: 1,\n })\n\n return runsResponse.data[0]\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { messages } from './messages'\n\nexport const data = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => (\n (await messages({\n messagesResponse,\n pageParam,\n threadId,\n client,\n })).map((message) => (\n serializeMessage({ message })\n ))\n)\n","export const limit = 10\n","import OpenAI from 'openai'\nimport { limit } from './limit'\n\nexport const hasNextPage = ({\n messagesResponse,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n}) => {\n if (messagesResponse.data.length < limit) return false\n\n return messagesResponse.hasNextPage()\n}\n","import _ from 'lodash'\nimport OpenAI from 'openai'\nimport { MessagesPage } from '@/types'\nimport { data } from './data'\nimport { limit } from './limit'\nimport { hasNextPage } from './hasNextPage'\n\ntype Args = {\n client: OpenAI\n threadId: string\n pageParam?: string\n}\n\nexport const messagesResponse = async ({\n client,\n threadId,\n pageParam,\n}: Args): Promise<MessagesPage> => {\n const messagesResponse = await client.beta.threads.messages.list(threadId, {\n ...(pageParam ? { after: pageParam } : {}),\n limit,\n })\n\n return {\n data: await data({\n client,\n messagesResponse,\n pageParam,\n threadId,\n }),\n hasNextPage: hasNextPage({ messagesResponse }),\n // @ts-ignore-next-line\n lastId: messagesResponse.body.last_id,\n }\n}\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRun = ({\n run\n}: {\n run: OpenAI.Beta.Threads.Runs.Run\n}) => (\n pick(run, [\n 'id',\n 'thread_id',\n 'assistant_id',\n 'created_at',\n ])\n)\n","export const enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\n\nexport const actionsStream = async ({\n client,\n run,\n handleToolCall,\n controller,\n}: {\n client: any\n run: OpenAI.Beta.Threads.Runs.Run\n handleToolCall: any\n controller: ReadableStreamDefaultController\n}) => {\n if (!run.required_action) {\n throw new Error('Run does not have a required action')\n }\n\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls\n\n return client.beta.threads.runs.submitToolOutputsStream(\n run.thread_id,\n run.id,\n {\n tool_outputs: await pMap(toolCalls, (toolCall) => (\n handleToolCall({\n toolCall,\n run,\n controller,\n }))\n ),\n },\n )\n}\n","import { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { serializeRun } from '@/lib/runs/serializeRun'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\nimport { enqueueJson } from '@/lib/streams/enqueueJson'\nimport { actionsStream } from './actionsStream'\n\nexport const handleStream = async ({\n client,\n stream,\n controller,\n handleToolCall,\n onEvent,\n}: {\n client: any\n stream: ReadableStream\n controller: ReadableStreamDefaultController\n handleToolCall: any\n onEvent: ({\n controller,\n event,\n data,\n }: {\n controller: ReadableStreamDefaultController\n event: string\n data: any\n }) => void\n}) => {\n // @ts-ignore-next-line\n for await (const value of stream) {\n onEvent({ controller, event: value.event, data: value.data })\n\n if (['thread.message.created', 'thread.message.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeMessage({\n message: value.data,\n }),\n },\n })\n } else if (['thread.message.delta', 'thread.run.step.delta'].includes(value.event)) {\n enqueueJson({\n controller,\n value,\n })\n } else if (value.event === 'thread.run.created') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.failed') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (['thread.run.step.created', 'thread.run.step.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRunStep({\n runStep: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.requires_action') {\n enqueueJson({\n controller,\n value,\n })\n\n await handleStream({\n client,\n stream: await actionsStream({\n client,\n run: value.data,\n handleToolCall,\n controller,\n }),\n controller,\n handleToolCall,\n onEvent,\n })\n } else {\n console.dir({ value }, { depth: null })\n }\n }\n}\n","import { handleStream } from './handleStream'\n\ntype CallbackArgs = {\n controller: ReadableStreamDefaultController<Uint8Array>\n}\n\nexport const createMessageResponse = ({\n client,\n createRunStream,\n handleToolCall,\n onStart = () => {},\n onError = () => {},\n onClose = () => {},\n onEvent = () => {},\n}: {\n client: any\n createRunStream: any\n handleToolCall: any\n onStart?: (args: CallbackArgs) => void\n onError?: (args: CallbackArgs & { error: any }) => void\n onClose?: (args: CallbackArgs) => void\n onEvent?: (args: CallbackArgs & { event: string, data: any }) => void\n}) => (\n new ReadableStream({\n async start(controller) {\n onStart({ controller })\n\n try {\n await handleStream({\n client,\n stream: createRunStream,\n controller,\n handleToolCall,\n onEvent,\n })\n } catch (error) {\n onError({ error, controller })\n controller.error(error)\n }\n\n onClose({ controller })\n controller.close()\n },\n })\n)\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/messages/messagesResponse/data/messages/index.ts","../src/lib/runSteps/getRunSteps/index.ts","../src/lib/messages/extendMessage.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/index.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/getLatestRun.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/messages/messagesResponse/data/index.ts","../src/lib/messages/messagesResponse/limit.ts","../src/lib/messages/messagesResponse/hasNextPage.ts","../src/lib/messages/messagesResponse/index.ts","../src/lib/runs/serializeRun.ts","../src/lib/streams/enqueueJson.ts","../src/lib/messages/createMessageResponse/actionsStream.ts","../src/lib/messages/createMessageResponse/handleStream.ts","../src/lib/messages/createMessageResponse/index.ts"],"names":["messagesResponse","pick","pMap"],"mappings":"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","sourcesContent":["import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n attachments: message.attachments,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { runMessages } from './runMessages'\n\nexport const messages = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => {\n const result = await pMap(messagesResponse.data, (message) => (\n extendMessage({\n client,\n message,\n })\n ))\n\n if (pageParam) {\n return result\n }\n\n return [\n ...await runMessages({\n result,\n threadId,\n client,\n }),\n ...result,\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n runId: string\n client: OpenAI\n}\n\nexport const getRunSteps = async ({\n threadId,\n runId,\n client,\n}: Args) => {\n const runStepsResponse = await client.beta.threads.runs.steps.list(\n threadId,\n runId,\n )\n\n return runStepsResponse.data\n}\n","import OpenAI from 'openai'\nimport { getRunSteps } from '@/lib/runSteps/getRunSteps'\n\ntype Args = {\n message: OpenAI.Beta.Threads.Messages.Message\n client: OpenAI\n}\n\nexport const extendMessage = async ({\n message,\n client,\n}: Args) => {\n if (!message.run_id) {\n return {\n ...message,\n runSteps: [],\n }\n }\n\n return {\n ...message,\n runSteps: await getRunSteps({\n threadId: message.thread_id,\n runId: message.run_id,\n client,\n }),\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { getLatestRun } from './getLatestRun'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n result: OpenAI.Beta.Threads.Messages.Message[]\n threadId: string\n client: OpenAI\n}\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'requires_action',\n 'cancelling',\n]\n\nexport const runMessages = async ({\n result,\n threadId,\n client,\n}: Args) => {\n const latestRun = await getLatestRun({ threadId, client })\n\n if (!latestRun) {\n return []\n }\n\n const messageFromLatestRun = result.find(m => m.run_id === latestRun.id)\n\n if (messageFromLatestRun) {\n return []\n }\n\n if (!progressStatuses.includes(latestRun.status)) {\n return []\n }\n\n return [\n await extendMessage({\n message: {\n id: optimisticId(),\n role: 'assistant' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n incomplete_details: null,\n completed_at: dayjs().unix(),\n incomplete_at: null,\n status: 'completed',\n content: [],\n run_id: latestRun.id,\n assistant_id: latestRun.assistant_id,\n thread_id: latestRun.thread_id,\n attachments: [],\n metadata: {},\n },\n client,\n }),\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n client: OpenAI\n}\n\nexport const getLatestRun = async ({\n threadId,\n client,\n}: Args) => {\n const runsResponse = await client.beta.threads.runs.list(threadId, {\n limit: 1,\n })\n\n return runsResponse.data[0]\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { messages } from './messages'\n\nexport const data = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => (\n (await messages({\n messagesResponse,\n pageParam,\n threadId,\n client,\n })).map((message) => (\n serializeMessage({ message })\n ))\n)\n","export const limit = 10\n","import OpenAI from 'openai'\nimport { limit } from './limit'\n\nexport const hasNextPage = ({\n messagesResponse,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n}) => {\n if (messagesResponse.data.length < limit) return false\n\n return messagesResponse.hasNextPage()\n}\n","import _ from 'lodash'\nimport OpenAI from 'openai'\nimport { MessagesPage } from '@/types'\nimport { data } from './data'\nimport { limit } from './limit'\nimport { hasNextPage } from './hasNextPage'\n\ntype Args = {\n client: OpenAI\n threadId: string\n pageParam?: string\n}\n\nexport const messagesResponse = async ({\n client,\n threadId,\n pageParam,\n}: Args): Promise<MessagesPage> => {\n const messagesResponse = await client.beta.threads.messages.list(threadId, {\n ...(pageParam ? { after: pageParam } : {}),\n limit,\n })\n\n return {\n data: await data({\n client,\n messagesResponse,\n pageParam,\n threadId,\n }),\n hasNextPage: hasNextPage({ messagesResponse }),\n // @ts-ignore-next-line\n lastId: messagesResponse.body.last_id,\n }\n}\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRun = ({\n run\n}: {\n run: OpenAI.Beta.Threads.Runs.Run\n}) => (\n pick(run, [\n 'id',\n 'thread_id',\n 'assistant_id',\n 'created_at',\n ])\n)\n","export const enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\n\nexport const actionsStream = async ({\n client,\n run,\n handleToolCall,\n controller,\n}: {\n client: any\n run: OpenAI.Beta.Threads.Runs.Run\n handleToolCall: any\n controller: ReadableStreamDefaultController\n}) => {\n if (!run.required_action) {\n throw new Error('Run does not have a required action')\n }\n\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls\n\n return client.beta.threads.runs.submitToolOutputsStream(\n run.thread_id,\n run.id,\n {\n tool_outputs: await pMap(toolCalls, (toolCall) => (\n handleToolCall({\n toolCall,\n run,\n controller,\n }))\n ),\n },\n )\n}\n","import { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { serializeRun } from '@/lib/runs/serializeRun'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\nimport { enqueueJson } from '@/lib/streams/enqueueJson'\nimport { actionsStream } from './actionsStream'\n\nexport const handleStream = async ({\n client,\n stream,\n controller,\n handleToolCall,\n onEvent,\n}: {\n client: any\n stream: ReadableStream\n controller: ReadableStreamDefaultController\n handleToolCall: any\n onEvent: ({\n controller,\n event,\n data,\n }: {\n controller: ReadableStreamDefaultController\n event: string\n data: any\n }) => void\n}) => {\n for await (const value of stream) {\n onEvent({ controller, event: value.event, data: value.data })\n\n if (['thread.message.created', 'thread.message.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeMessage({\n message: value.data,\n }),\n },\n })\n } else if (['thread.message.delta', 'thread.run.step.delta'].includes(value.event)) {\n enqueueJson({\n controller,\n value,\n })\n } else if (value.event === 'thread.run.created') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.failed') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (['thread.run.step.created', 'thread.run.step.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRunStep({\n runStep: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.requires_action') {\n enqueueJson({\n controller,\n value,\n })\n\n await handleStream({\n client,\n stream: await actionsStream({\n client,\n run: value.data,\n handleToolCall,\n controller,\n }),\n controller,\n handleToolCall,\n onEvent,\n })\n } else {\n console.dir({ value }, { depth: null })\n }\n }\n}\n","import { handleStream } from './handleStream'\n\ntype CallbackArgs = {\n controller: ReadableStreamDefaultController<Uint8Array>\n}\n\nexport const createMessageResponse = ({\n client,\n createRunStream,\n handleToolCall,\n onStart = () => {},\n onError = () => {},\n onClose = () => {},\n onEvent = () => {},\n}: {\n client: any\n createRunStream: any\n handleToolCall: any\n onStart?: (args: CallbackArgs) => void\n onError?: (args: CallbackArgs & { error: any }) => void\n onClose?: (args: CallbackArgs) => void\n onEvent?: (args: CallbackArgs & { event: string, data: any }) => void\n}) => (\n new ReadableStream({\n async start(controller) {\n onStart({ controller })\n\n try {\n await handleStream({\n client,\n stream: createRunStream,\n controller,\n handleToolCall,\n onEvent,\n })\n } catch (error) {\n onError({ error, controller })\n controller.error(error)\n }\n\n onClose({ controller })\n controller.close()\n },\n })\n)\n"]}
1
+ {"version":3,"sources":["../src/lib/runSteps/serializeRunStep.ts","../src/lib/messages/serializeMessage.ts","../src/lib/messages/messagesResponse/data/messages/index.ts","../src/lib/runSteps/getRunSteps/index.ts","../src/lib/messages/extendMessage.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/index.ts","../src/lib/messages/messagesResponse/data/messages/runMessages/getLatestRun.ts","../src/lib/optimistic/optimisticId.ts","../src/lib/messages/messagesResponse/data/index.ts","../src/lib/messages/messagesResponse/limit.ts","../src/lib/messages/messagesResponse/hasNextPage.ts","../src/lib/messages/messagesResponse/index.ts","../src/lib/runs/serializeRun.ts","../src/lib/streams/enqueueJson.ts","../src/lib/messages/createMessageResponse/actionsStream.ts","../src/lib/messages/createMessageResponse/handleStream.ts","../src/lib/messages/createMessageResponse/index.ts"],"names":["messagesResponse","pick","pMap"],"mappings":"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","sourcesContent":["import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRunStep = ({\n runStep,\n}: {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}) => (\n pick(runStep, [\n 'id',\n 'run_id',\n 'step_details',\n 'completed_at',\n 'cancelled_at',\n 'failed_at',\n 'status',\n ])\n)\n","import OpenAI from 'openai'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\n\nexport const serializeMessage = ({\n message,\n}: {\n message: OpenAI.Beta.Threads.Messages.Message & {\n runSteps?: OpenAI.Beta.Threads.Runs.RunStep[]\n }\n}) => ({\n id: message.id,\n role: message.role,\n created_at: message.created_at,\n content: message.content,\n run_id: message.run_id,\n assistant_id: message.assistant_id,\n thread_id: message.thread_id,\n attachments: message.attachments,\n metadata: message.metadata,\n runSteps: (message.runSteps ?? []).map((runStep) => (\n serializeRunStep({ runStep })\n )),\n status: message.status,\n})\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { runMessages } from './runMessages'\n\nexport const messages = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => {\n const result = await pMap(messagesResponse.data, (message) => (\n extendMessage({\n client,\n message,\n })\n ))\n\n if (pageParam) {\n return result\n }\n\n return [\n ...await runMessages({\n result,\n threadId,\n client,\n }),\n ...result,\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n runId: string\n client: OpenAI\n}\n\nexport const getRunSteps = async ({\n threadId,\n runId,\n client,\n}: Args) => {\n const runStepsResponse = await client.beta.threads.runs.steps.list(\n threadId,\n runId,\n )\n\n return runStepsResponse.data\n}\n","import OpenAI from 'openai'\nimport { getRunSteps } from '@/lib/runSteps/getRunSteps'\n\ntype Args = {\n message: OpenAI.Beta.Threads.Messages.Message\n client: OpenAI\n}\n\nexport const extendMessage = async ({\n message,\n client,\n}: Args) => {\n if (!message.run_id) {\n return {\n ...message,\n runSteps: [],\n }\n }\n\n return {\n ...message,\n runSteps: await getRunSteps({\n threadId: message.thread_id,\n runId: message.run_id,\n client,\n }),\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { getLatestRun } from './getLatestRun'\nimport { extendMessage } from '@/lib/messages/extendMessage'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n result: OpenAI.Beta.Threads.Messages.Message[]\n threadId: string\n client: OpenAI\n}\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'requires_action',\n 'cancelling',\n]\n\nexport const runMessages = async ({\n result,\n threadId,\n client,\n}: Args) => {\n const latestRun = await getLatestRun({ threadId, client })\n\n if (!latestRun) {\n return []\n }\n\n const messageFromLatestRun = result.find(m => m.run_id === latestRun.id)\n\n if (messageFromLatestRun) {\n return []\n }\n\n if (!progressStatuses.includes(latestRun.status)) {\n return []\n }\n\n return [\n await extendMessage({\n message: {\n id: optimisticId(),\n role: 'assistant' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n incomplete_details: null,\n completed_at: dayjs().unix(),\n incomplete_at: null,\n status: 'completed',\n content: [],\n run_id: latestRun.id,\n assistant_id: latestRun.assistant_id,\n thread_id: latestRun.thread_id,\n attachments: [],\n metadata: {},\n },\n client,\n }),\n ]\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n threadId: string\n client: OpenAI\n}\n\nexport const getLatestRun = async ({\n threadId,\n client,\n}: Args) => {\n const runsResponse = await client.beta.threads.runs.list(threadId, {\n limit: 1,\n })\n\n return runsResponse.data[0]\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { messages } from './messages'\n\nexport const data = async ({\n messagesResponse,\n pageParam,\n threadId,\n client,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n pageParam?: string\n threadId: string\n client: OpenAI\n}) => (\n (await messages({\n messagesResponse,\n pageParam,\n threadId,\n client,\n })).map((message) => (\n serializeMessage({ message })\n ))\n)\n","export const limit = 10\n","import OpenAI from 'openai'\nimport { limit } from './limit'\n\nexport const hasNextPage = ({\n messagesResponse,\n}: {\n messagesResponse: OpenAI.CursorPage<OpenAI.Beta.Threads.Messages.Message>\n}) => {\n if (messagesResponse.data.length < limit) return false\n\n return messagesResponse.hasNextPage()\n}\n","import _ from 'lodash'\nimport OpenAI from 'openai'\nimport { MessagesPage } from '@/types'\nimport { data } from './data'\nimport { limit } from './limit'\nimport { hasNextPage } from './hasNextPage'\n\ntype Args = {\n client: OpenAI\n threadId: string\n pageParam?: string\n}\n\nexport const messagesResponse = async ({\n client,\n threadId,\n pageParam,\n}: Args): Promise<MessagesPage> => {\n const messagesResponse = await client.beta.threads.messages.list(threadId, {\n ...(pageParam ? { after: pageParam } : {}),\n limit,\n })\n\n return {\n data: await data({\n client,\n messagesResponse,\n pageParam,\n threadId,\n }),\n hasNextPage: hasNextPage({ messagesResponse }),\n // @ts-ignore-next-line\n lastId: messagesResponse.body.last_id,\n }\n}\n","import { pick } from 'radash'\nimport OpenAI from 'openai'\n\nexport const serializeRun = ({\n run\n}: {\n run: OpenAI.Beta.Threads.Runs.Run\n}) => (\n pick(run, [\n 'id',\n 'thread_id',\n 'assistant_id',\n 'created_at',\n ])\n)\n","export const enqueueJson = ({\n controller,\n value,\n}: {\n controller: ReadableStreamDefaultController\n value: any\n}) => (\n controller.enqueue(new TextEncoder().encode(JSON.stringify(value)))\n)\n","import OpenAI from 'openai'\nimport pMap from 'p-map'\n\nexport const actionsStream = async ({\n client,\n run,\n handleToolCall,\n controller,\n}: {\n client: any\n run: OpenAI.Beta.Threads.Runs.Run\n handleToolCall: any\n controller: ReadableStreamDefaultController\n}) => {\n if (!run.required_action) {\n throw new Error('Run does not have a required action')\n }\n\n const toolCalls = run.required_action.submit_tool_outputs.tool_calls\n\n return client.beta.threads.runs.submitToolOutputsStream(\n run.thread_id,\n run.id,\n {\n tool_outputs: await pMap(toolCalls, (toolCall) => (\n handleToolCall({\n toolCall,\n run,\n controller,\n }))\n ),\n },\n )\n}\n","import { serializeMessage } from '@/lib/messages/serializeMessage'\nimport { serializeRun } from '@/lib/runs/serializeRun'\nimport { serializeRunStep } from '@/lib/runSteps/serializeRunStep'\nimport { enqueueJson } from '@/lib/streams/enqueueJson'\nimport { actionsStream } from './actionsStream'\n\nexport const handleStream = async ({\n client,\n stream,\n controller,\n handleToolCall,\n onEvent,\n}: {\n client: any\n stream: ReadableStream\n controller: ReadableStreamDefaultController\n handleToolCall: any\n onEvent: ({\n controller,\n event,\n data,\n }: {\n controller: ReadableStreamDefaultController\n event: string\n data: any\n }) => void\n}) => {\n // @ts-ignore-next-line\n for await (const value of stream) {\n onEvent({ controller, event: value.event, data: value.data })\n\n if (['thread.message.created', 'thread.message.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeMessage({\n message: value.data,\n }),\n },\n })\n } else if (['thread.message.delta', 'thread.run.step.delta'].includes(value.event)) {\n enqueueJson({\n controller,\n value,\n })\n } else if (value.event === 'thread.run.created') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.failed') {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRun({\n run: value.data,\n }),\n },\n })\n } else if (['thread.run.step.created', 'thread.run.step.completed'].includes(value.event)) {\n enqueueJson({\n controller,\n value: {\n event: value.event,\n data: serializeRunStep({\n runStep: value.data,\n }),\n },\n })\n } else if (value.event === 'thread.run.requires_action') {\n enqueueJson({\n controller,\n value,\n })\n\n await handleStream({\n client,\n stream: await actionsStream({\n client,\n run: value.data,\n handleToolCall,\n controller,\n }),\n controller,\n handleToolCall,\n onEvent,\n })\n } else {\n console.dir({ value }, { depth: null })\n }\n }\n}\n","import { handleStream } from './handleStream'\n\ntype CallbackArgs = {\n controller: ReadableStreamDefaultController<Uint8Array>\n}\n\nexport const createMessageResponse = ({\n client,\n createRunStream,\n handleToolCall,\n onStart = () => {},\n onError = () => {},\n onClose = () => {},\n onEvent = () => {},\n}: {\n client: any\n createRunStream: any\n handleToolCall: any\n onStart?: (args: CallbackArgs) => void\n onError?: (args: CallbackArgs & { error: any }) => void\n onClose?: (args: CallbackArgs) => void\n onEvent?: (args: CallbackArgs & { event: string, data: any }) => void\n}) => (\n new ReadableStream({\n async start(controller) {\n onStart({ controller })\n\n try {\n await handleStream({\n client,\n stream: createRunStream,\n controller,\n handleToolCall,\n onEvent,\n })\n } catch (error) {\n onError({ error, controller })\n controller.error(error)\n }\n\n onClose({ controller })\n controller.close()\n },\n })\n)\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA","sourcesContent":["import OpenAI from 'openai'\nimport { AvatarType, IconAvatarName } from '@/lib/enums'\n\nexport type SerializedRunStep = Pick<OpenAI.Beta.Threads.Runs.RunStep, 'id' | 'run_id' | 'step_details' | 'completed_at' | 'cancelled_at' | 'failed_at' | 'status'>\n\nexport type SerializedMessage = Pick<OpenAI.Beta.Threads.Messages.Message, 'id' | 'role' | 'created_at' | 'content' | 'run_id' | 'assistant_id' | 'thread_id' | 'attachments' | 'metadata' | 'status'> & {\n runSteps: SerializedRunStep[]\n}\n\nexport type ToolCall = OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall\n | OpenAI.Beta.Threads.Runs.FileSearchToolCall\n | OpenAI.Beta.Threads.Runs.FunctionToolCall\n\nexport type MessagesPage = {\n data: SerializedMessage[]\n hasNextPage: boolean\n lastId: string\n}\n\nexport type MessageGroup = {\n id: string\n role: \"user\" | \"assistant\"\n messages: SerializedMessage[]\n createdAt: number\n}\n\nexport type AudioEngine = {\n source: MediaStreamAudioSourceNode | GainNode\n audioContext: AudioContext\n}\n\nexport type Toast = {\n type: 'success' | 'error'\n message: string\n}\n\nexport type ThreadMessageCreatedEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageCreated & {\n data: SerializedMessage\n}\n\nexport type ThreadMessageCompletedEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageCompleted & {\n data: SerializedMessage\n}\n\nexport type ThreadRunStepDeltaEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepDelta & {\n data: {\n run_id: string\n }\n}\n\nexport type MessagesQueryKey = (string | Record<string, any>)[]\n\nexport type IconAvatar = {\n name: IconAvatarName\n}\n\nexport type ImageAvatar = {\n url: string\n}\n\nexport type Avatar = {\n type: AvatarType\n iconAvatar: IconAvatar | null\n imageAvatar: ImageAvatar | null\n}\n\nexport type Size = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n"]}
1
+ {"version":3,"sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA","sourcesContent":["import OpenAI from 'openai'\nimport { AvatarType, IconAvatarName } from '@/lib/enums'\n\nexport type SerializedRunStep = Pick<OpenAI.Beta.Threads.Runs.RunStep, 'id' | 'run_id' | 'step_details' | 'completed_at' | 'cancelled_at' | 'failed_at' | 'status'>\n\nexport type SerializedMessage = Pick<OpenAI.Beta.Threads.Messages.Message, 'id' | 'role' | 'created_at' | 'content' | 'run_id' | 'assistant_id' | 'thread_id' | 'attachments' | 'metadata' | 'status'> & {\n runSteps: SerializedRunStep[]\n}\n\nexport type ToolCall = OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall\n | OpenAI.Beta.Threads.Runs.FileSearchToolCall\n | OpenAI.Beta.Threads.Runs.FunctionToolCall\n\nexport type MessagesPage = {\n data: SerializedMessage[]\n hasNextPage: boolean\n lastId: string\n}\n\nexport type MessageGroup = {\n id: string\n role: \"user\" | \"assistant\"\n messages: SerializedMessage[]\n createdAt: number\n}\n\nexport type AudioEngine = {\n source: MediaStreamAudioSourceNode | GainNode\n audioContext: AudioContext\n}\n\nexport type Toast = {\n type: 'success' | 'error'\n message: string\n}\n\nexport type ThreadMessageCreatedEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageCreated & {\n data: SerializedMessage\n}\n\nexport type ThreadMessageCompletedEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageCompleted & {\n data: SerializedMessage\n}\n\nexport type ThreadRunStepDeltaEvent = OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepDelta & {\n data: {\n run_id: string\n }\n}\n\nexport type MessagesQueryKey = (string | Record<string, any>)[]\n\nexport type IconAvatar = {\n name: IconAvatarName\n}\n\nexport type ImageAvatar = {\n url: string\n}\n\nexport type Avatar = {\n type: AvatarType\n iconAvatar: IconAvatar | null\n imageAvatar: ImageAvatar | null\n}\n\nexport type Size = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n\nexport type StyleProps = {\n style?: React.CSSProperties\n className?: string\n}\n"]}
@@ -67,5 +67,9 @@ type Avatar = {
67
67
  imageAvatar: ImageAvatar | null;
68
68
  };
69
69
  type Size = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
70
+ type StyleProps = {
71
+ style?: React.CSSProperties;
72
+ className?: string;
73
+ };
70
74
 
71
- export type { AudioEngine, Avatar, IconAvatar, ImageAvatar, MessageGroup, MessagesPage, MessagesQueryKey, SerializedMessage, SerializedRunStep, Size, ThreadMessageCompletedEvent, ThreadMessageCreatedEvent, ThreadRunStepDeltaEvent, Toast, ToolCall };
75
+ export type { AudioEngine, Avatar, IconAvatar, ImageAvatar, MessageGroup, MessagesPage, MessagesQueryKey, SerializedMessage, SerializedRunStep, Size, StyleProps, ThreadMessageCompletedEvent, ThreadMessageCreatedEvent, ThreadRunStepDeltaEvent, Toast, ToolCall };
@@ -67,5 +67,9 @@ type Avatar = {
67
67
  imageAvatar: ImageAvatar | null;
68
68
  };
69
69
  type Size = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
70
+ type StyleProps = {
71
+ style?: React.CSSProperties;
72
+ className?: string;
73
+ };
70
74
 
71
- export type { AudioEngine, Avatar, IconAvatar, ImageAvatar, MessageGroup, MessagesPage, MessagesQueryKey, SerializedMessage, SerializedRunStep, Size, ThreadMessageCompletedEvent, ThreadMessageCreatedEvent, ThreadRunStepDeltaEvent, Toast, ToolCall };
75
+ export type { AudioEngine, Avatar, IconAvatar, ImageAvatar, MessageGroup, MessagesPage, MessagesQueryKey, SerializedMessage, SerializedRunStep, Size, StyleProps, ThreadMessageCompletedEvent, ThreadMessageCreatedEvent, ThreadRunStepDeltaEvent, Toast, ToolCall };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superinterface/react",
3
- "version": "3.0.2",
3
+ "version": "3.1.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -57,10 +57,14 @@
57
57
  },
58
58
  "devDependencies": {
59
59
  "@tanstack/react-query": ">=5.50.1",
60
+ "@types/howler": "^2.2.12",
61
+ "@types/js-cookie": "^3.0.6",
60
62
  "@types/lodash": "^4.17.6",
61
63
  "@types/react": "^18.3.3",
62
64
  "@types/unist": "^3.0.2",
63
65
  "react": ">=18.3.1",
64
- "tsup": "^8.1.0"
66
+ "tsup": "^8.1.0",
67
+ "typedoc": "^0.26.11",
68
+ "typedoc-plugin-markdown": "^4.2.10"
65
69
  }
66
70
  }