@assistant-ui/react-ai-sdk 1.1.8 → 1.1.9

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,"file":"AssistantChatTransport.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAQ,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAE5B,SAAS,EACV,MAAM,IAAI,CAAC;AAyBZ,qBAAa,sBAAsB,CACjC,UAAU,SAAS,SAAS,CAC5B,SAAQ,oBAAoB,CAAC,UAAU,CAAC;IACxC,OAAO,CAAC,OAAO,CAA+B;gBAClC,WAAW,CAAC,EAAE,4BAA4B,CAAC,UAAU,CAAC;IAgClE,UAAU,CAAC,OAAO,EAAE,gBAAgB;CAGrC"}
1
+ {"version":3,"file":"AssistantChatTransport.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAQ,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAE5B,SAAS,EACV,MAAM,IAAI,CAAC;AAyBZ,qBAAa,sBAAsB,CACjC,UAAU,SAAS,SAAS,CAC5B,SAAQ,oBAAoB,CAAC,UAAU,CAAC;IACxC,OAAO,CAAC,OAAO,CAA+B;gBAClC,WAAW,CAAC,EAAE,4BAA4B,CAAC,UAAU,CAAC;IAmClE,UAAU,CAAC,OAAO,EAAE,gBAAgB;CAGrC"}
@@ -28,6 +28,7 @@ var AssistantChatTransport = class extends DefaultChatTransport {
28
28
  ...initOptions,
29
29
  prepareSendMessagesRequest: async (options) => {
30
30
  const context = this.runtime?.thread.getModelContext();
31
+ const id = (await this.runtime?.threads.mainItem.initialize())?.remoteId ?? options.id;
31
32
  const optionsEx = {
32
33
  ...options,
33
34
  body: {
@@ -42,7 +43,7 @@ var AssistantChatTransport = class extends DefaultChatTransport {
42
43
  ...preparedRequest,
43
44
  body: preparedRequest?.body ?? {
44
45
  ...optionsEx.body,
45
- id: options.id,
46
+ id,
46
47
  messages: options.messages,
47
48
  trigger: options.trigger,
48
49
  messageId: options.messageId
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/use-chat/AssistantChatTransport.tsx"],"sourcesContent":["import { AssistantRuntime, Tool } from \"@assistant-ui/react\";\nimport {\n DefaultChatTransport,\n HttpChatTransportInitOptions,\n JSONSchema7,\n UIMessage,\n} from \"ai\";\nimport z from \"zod\";\n\nconst toAISDKTools = (tools: Record<string, Tool>) => {\n return Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n parameters: (tool.parameters instanceof z.ZodType\n ? z.toJSONSchema(tool.parameters)\n : tool.parameters) as JSONSchema7,\n },\n ]),\n );\n};\n\nconst getEnabledTools = (tools: Record<string, Tool>) => {\n return Object.fromEntries(\n Object.entries(tools).filter(\n ([, tool]) => !tool.disabled && tool.type !== \"backend\",\n ),\n );\n};\n\nexport class AssistantChatTransport<\n UI_MESSAGE extends UIMessage,\n> extends DefaultChatTransport<UI_MESSAGE> {\n private runtime: AssistantRuntime | undefined;\n constructor(initOptions?: HttpChatTransportInitOptions<UI_MESSAGE>) {\n super({\n ...initOptions,\n prepareSendMessagesRequest: async (options) => {\n const context = this.runtime?.thread.getModelContext();\n\n const optionsEx = {\n ...options,\n body: {\n callSettings: context?.callSettings,\n system: context?.system,\n tools: toAISDKTools(getEnabledTools(context?.tools ?? {})),\n ...options?.body,\n },\n };\n const preparedRequest =\n await initOptions?.prepareSendMessagesRequest?.(optionsEx);\n\n return {\n ...preparedRequest,\n body: preparedRequest?.body ?? {\n ...optionsEx.body,\n id: options.id,\n messages: options.messages,\n trigger: options.trigger,\n messageId: options.messageId,\n },\n };\n },\n });\n }\n\n setRuntime(runtime: AssistantRuntime) {\n this.runtime = runtime;\n }\n}\n"],"mappings":";AACA;AAAA,EACE;AAAA,OAIK;AACP,OAAO,OAAO;AAEd,IAAM,eAAe,CAAC,UAAgC;AACpD,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AAAA,MAC1C;AAAA,MACA;AAAA,QACE,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI;AAAA,QAC3D,YAAa,KAAK,sBAAsB,EAAE,UACtC,EAAE,aAAa,KAAK,UAAU,IAC9B,KAAK;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,kBAAkB,CAAC,UAAgC;AACvD,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAK,EAAE;AAAA,MACpB,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,YAAY,KAAK,SAAS;AAAA,IAChD;AAAA,EACF;AACF;AAEO,IAAM,yBAAN,cAEG,qBAAiC;AAAA,EACjC;AAAA,EACR,YAAY,aAAwD;AAClE,UAAM;AAAA,MACJ,GAAG;AAAA,MACH,4BAA4B,OAAO,YAAY;AAC7C,cAAM,UAAU,KAAK,SAAS,OAAO,gBAAgB;AAErD,cAAM,YAAY;AAAA,UAChB,GAAG;AAAA,UACH,MAAM;AAAA,YACJ,cAAc,SAAS;AAAA,YACvB,QAAQ,SAAS;AAAA,YACjB,OAAO,aAAa,gBAAgB,SAAS,SAAS,CAAC,CAAC,CAAC;AAAA,YACzD,GAAG,SAAS;AAAA,UACd;AAAA,QACF;AACA,cAAM,kBACJ,MAAM,aAAa,6BAA6B,SAAS;AAE3D,eAAO;AAAA,UACL,GAAG;AAAA,UACH,MAAM,iBAAiB,QAAQ;AAAA,YAC7B,GAAG,UAAU;AAAA,YACb,IAAI,QAAQ;AAAA,YACZ,UAAU,QAAQ;AAAA,YAClB,SAAS,QAAQ;AAAA,YACjB,WAAW,QAAQ;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,SAA2B;AACpC,SAAK,UAAU;AAAA,EACjB;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/use-chat/AssistantChatTransport.tsx"],"sourcesContent":["import { AssistantRuntime, Tool } from \"@assistant-ui/react\";\nimport {\n DefaultChatTransport,\n HttpChatTransportInitOptions,\n JSONSchema7,\n UIMessage,\n} from \"ai\";\nimport z from \"zod\";\n\nconst toAISDKTools = (tools: Record<string, Tool>) => {\n return Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n parameters: (tool.parameters instanceof z.ZodType\n ? z.toJSONSchema(tool.parameters)\n : tool.parameters) as JSONSchema7,\n },\n ]),\n );\n};\n\nconst getEnabledTools = (tools: Record<string, Tool>) => {\n return Object.fromEntries(\n Object.entries(tools).filter(\n ([, tool]) => !tool.disabled && tool.type !== \"backend\",\n ),\n );\n};\n\nexport class AssistantChatTransport<\n UI_MESSAGE extends UIMessage,\n> extends DefaultChatTransport<UI_MESSAGE> {\n private runtime: AssistantRuntime | undefined;\n constructor(initOptions?: HttpChatTransportInitOptions<UI_MESSAGE>) {\n super({\n ...initOptions,\n prepareSendMessagesRequest: async (options) => {\n const context = this.runtime?.thread.getModelContext();\n const id =\n (await this.runtime?.threads.mainItem.initialize())?.remoteId ??\n options.id;\n\n const optionsEx = {\n ...options,\n body: {\n callSettings: context?.callSettings,\n system: context?.system,\n tools: toAISDKTools(getEnabledTools(context?.tools ?? {})),\n ...options?.body,\n },\n };\n const preparedRequest =\n await initOptions?.prepareSendMessagesRequest?.(optionsEx);\n\n return {\n ...preparedRequest,\n body: preparedRequest?.body ?? {\n ...optionsEx.body,\n id,\n messages: options.messages,\n trigger: options.trigger,\n messageId: options.messageId,\n },\n };\n },\n });\n }\n\n setRuntime(runtime: AssistantRuntime) {\n this.runtime = runtime;\n }\n}\n"],"mappings":";AACA;AAAA,EACE;AAAA,OAIK;AACP,OAAO,OAAO;AAEd,IAAM,eAAe,CAAC,UAAgC;AACpD,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AAAA,MAC1C;AAAA,MACA;AAAA,QACE,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI;AAAA,QAC3D,YAAa,KAAK,sBAAsB,EAAE,UACtC,EAAE,aAAa,KAAK,UAAU,IAC9B,KAAK;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,kBAAkB,CAAC,UAAgC;AACvD,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAK,EAAE;AAAA,MACpB,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,YAAY,KAAK,SAAS;AAAA,IAChD;AAAA,EACF;AACF;AAEO,IAAM,yBAAN,cAEG,qBAAiC;AAAA,EACjC;AAAA,EACR,YAAY,aAAwD;AAClE,UAAM;AAAA,MACJ,GAAG;AAAA,MACH,4BAA4B,OAAO,YAAY;AAC7C,cAAM,UAAU,KAAK,SAAS,OAAO,gBAAgB;AACrD,cAAM,MACH,MAAM,KAAK,SAAS,QAAQ,SAAS,WAAW,IAAI,YACrD,QAAQ;AAEV,cAAM,YAAY;AAAA,UAChB,GAAG;AAAA,UACH,MAAM;AAAA,YACJ,cAAc,SAAS;AAAA,YACvB,QAAQ,SAAS;AAAA,YACjB,OAAO,aAAa,gBAAgB,SAAS,SAAS,CAAC,CAAC,CAAC;AAAA,YACzD,GAAG,SAAS;AAAA,UACd;AAAA,QACF;AACA,cAAM,kBACJ,MAAM,aAAa,6BAA6B,SAAS;AAE3D,eAAO;AAAA,UACL,GAAG;AAAA,UACH,MAAM,iBAAiB,QAAQ;AAAA,YAC7B,GAAG,UAAU;AAAA,YACb;AAAA,YACA,UAAU,QAAQ;AAAA,YAClB,SAAS,QAAQ;AAAA,YACjB,WAAW,QAAQ;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,SAA2B;AACpC,SAAK,UAAU;AAAA,EACjB;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useAISDKRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useAISDKRuntime.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAEL,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAMjB,MAAM,qBAAqB,CAAC;AAY7B,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EACL,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,GAAG;QAC/C,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;KAC5C,CAAC,GACF,SAAS,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EACtE,aAAa,UAAU,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,EACnD,eAAc,mBAAwB,qBA0HvC,CAAC"}
1
+ {"version":3,"file":"useAISDKRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useAISDKRuntime.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAEL,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAMjB,MAAM,qBAAqB,CAAC;AAY7B,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EACL,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,GAAG;QAC/C,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;KAC5C,CAAC,GACF,SAAS,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EACtE,aAAa,UAAU,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,EACnD,eAAc,mBAAwB,qBA4HvC,CAAC"}
@@ -23,17 +23,19 @@ var useAISDKRuntime = (chatHelpers, { adapters } = {}) => {
23
23
  const messages = AISDKMessageConverter.useThreadMessages({
24
24
  isRunning,
25
25
  messages: chatHelpers.messages,
26
- metadata: useMemo(() => ({ toolStatuses }), [toolStatuses])
26
+ metadata: useMemo(
27
+ () => ({
28
+ toolStatuses,
29
+ ...chatHelpers.error && { error: chatHelpers.error.message }
30
+ }),
31
+ [toolStatuses, chatHelpers.error]
32
+ )
27
33
  });
28
- const runtimeRef = useMemo(
29
- () => ({
30
- get current() {
31
- return runtime;
32
- }
33
- }),
34
- // eslint-disable-next-line react-hooks/exhaustive-deps
35
- []
36
- );
34
+ const [runtimeRef] = useState(() => ({
35
+ get current() {
36
+ return runtime;
37
+ }
38
+ }));
37
39
  const toolInvocations = INTERNAL.useToolInvocations({
38
40
  state: {
39
41
  messages,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/use-chat/useAISDKRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useMemo } from \"react\";\nimport type { UIMessage, useChat } from \"@ai-sdk/react\";\nimport {\n useExternalStoreRuntime,\n ExternalStoreAdapter,\n ThreadHistoryAdapter,\n AssistantRuntime,\n ThreadMessage,\n MessageFormatAdapter,\n useRuntimeAdapters,\n INTERNAL,\n type ToolExecutionStatus,\n} from \"@assistant-ui/react\";\nimport { sliceMessagesUntil } from \"../utils/sliceMessagesUntil\";\nimport { toCreateMessage } from \"../utils/toCreateMessage\";\nimport { vercelAttachmentAdapter } from \"../utils/vercelAttachmentAdapter\";\nimport { getVercelAIMessages } from \"../getVercelAIMessages\";\nimport { AISDKMessageConverter } from \"../utils/convertMessage\";\nimport {\n AISDKStorageFormat,\n aiSDKV5FormatAdapter,\n} from \"../adapters/aiSDKFormatAdapter\";\nimport { useExternalHistory } from \"./useExternalHistory\";\n\nexport type AISDKRuntimeAdapter = {\n adapters?:\n | (NonNullable<ExternalStoreAdapter[\"adapters\"]> & {\n history?: ThreadHistoryAdapter | undefined;\n })\n | undefined;\n};\n\nexport const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(\n chatHelpers: ReturnType<typeof useChat<UI_MESSAGE>>,\n { adapters }: AISDKRuntimeAdapter = {},\n) => {\n const contextAdapters = useRuntimeAdapters();\n const isRunning =\n chatHelpers.status === \"submitted\" || chatHelpers.status == \"streaming\";\n\n const [toolStatuses, setToolStatuses] = useState<\n Record<string, ToolExecutionStatus>\n >({});\n\n const messages = AISDKMessageConverter.useThreadMessages({\n isRunning,\n messages: chatHelpers.messages,\n metadata: useMemo(() => ({ toolStatuses }), [toolStatuses]),\n });\n\n const runtimeRef = useMemo(\n () => ({\n get current(): AssistantRuntime {\n return runtime;\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const toolInvocations = INTERNAL.useToolInvocations({\n state: {\n messages,\n isRunning,\n },\n getTools: () => runtimeRef.current.thread.getModelContext().tools,\n onResult: (command: any) => {\n if (command.type === \"add-tool-result\") {\n chatHelpers.addToolResult({\n tool: command.toolName,\n toolCallId: command.toolCallId,\n output: command.result,\n });\n }\n },\n setToolStatuses,\n });\n\n const isLoading = useExternalHistory(\n runtimeRef,\n adapters?.history ?? contextAdapters?.history,\n AISDKMessageConverter.toThreadMessages as (\n messages: UI_MESSAGE[],\n ) => ThreadMessage[],\n aiSDKV5FormatAdapter as MessageFormatAdapter<\n UI_MESSAGE,\n AISDKStorageFormat\n >,\n (messages) => {\n chatHelpers.setMessages(messages);\n },\n );\n\n const runtime = useExternalStoreRuntime({\n isRunning,\n messages,\n setMessages: (messages) =>\n chatHelpers.setMessages(\n messages\n .map(getVercelAIMessages<UI_MESSAGE>)\n .filter(Boolean)\n .flat(),\n ),\n onImport: (messages) =>\n chatHelpers.setMessages(\n messages\n .map(getVercelAIMessages<UI_MESSAGE>)\n .filter(Boolean)\n .flat(),\n ),\n onCancel: async () => {\n chatHelpers.stop();\n toolInvocations.abort();\n },\n onNew: async (message) => {\n const createMessage = toCreateMessage<UI_MESSAGE>(message);\n await chatHelpers.sendMessage(createMessage, {\n metadata: message.runConfig,\n });\n },\n onEdit: async (message) => {\n const newMessages = sliceMessagesUntil(\n chatHelpers.messages,\n message.parentId,\n );\n chatHelpers.setMessages(newMessages);\n\n const createMessage = toCreateMessage<UI_MESSAGE>(message);\n await chatHelpers.sendMessage(createMessage, {\n metadata: message.runConfig,\n });\n },\n onReload: async (parentId: string | null, config) => {\n const newMessages = sliceMessagesUntil(chatHelpers.messages, parentId);\n chatHelpers.setMessages(newMessages);\n\n await chatHelpers.regenerate({ metadata: config.runConfig });\n },\n onAddToolResult: ({ toolCallId, result }) => {\n chatHelpers.addToolResult({\n tool: toolCallId,\n toolCallId,\n output: result,\n });\n },\n onResumeToolCall: (options) =>\n toolInvocations.resume(options.toolCallId, options.payload),\n adapters: {\n attachments: vercelAttachmentAdapter,\n ...contextAdapters,\n ...adapters,\n },\n isLoading,\n });\n\n return runtime;\n};\n"],"mappings":"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","names":["messages"]}
1
+ {"version":3,"sources":["../../../src/ui/use-chat/useAISDKRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useMemo } from \"react\";\nimport type { UIMessage, useChat } from \"@ai-sdk/react\";\nimport {\n useExternalStoreRuntime,\n ExternalStoreAdapter,\n ThreadHistoryAdapter,\n AssistantRuntime,\n ThreadMessage,\n MessageFormatAdapter,\n useRuntimeAdapters,\n INTERNAL,\n type ToolExecutionStatus,\n} from \"@assistant-ui/react\";\nimport { sliceMessagesUntil } from \"../utils/sliceMessagesUntil\";\nimport { toCreateMessage } from \"../utils/toCreateMessage\";\nimport { vercelAttachmentAdapter } from \"../utils/vercelAttachmentAdapter\";\nimport { getVercelAIMessages } from \"../getVercelAIMessages\";\nimport { AISDKMessageConverter } from \"../utils/convertMessage\";\nimport {\n AISDKStorageFormat,\n aiSDKV5FormatAdapter,\n} from \"../adapters/aiSDKFormatAdapter\";\nimport { useExternalHistory } from \"./useExternalHistory\";\n\nexport type AISDKRuntimeAdapter = {\n adapters?:\n | (NonNullable<ExternalStoreAdapter[\"adapters\"]> & {\n history?: ThreadHistoryAdapter | undefined;\n })\n | undefined;\n};\n\nexport const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(\n chatHelpers: ReturnType<typeof useChat<UI_MESSAGE>>,\n { adapters }: AISDKRuntimeAdapter = {},\n) => {\n const contextAdapters = useRuntimeAdapters();\n const isRunning =\n chatHelpers.status === \"submitted\" || chatHelpers.status == \"streaming\";\n\n const [toolStatuses, setToolStatuses] = useState<\n Record<string, ToolExecutionStatus>\n >({});\n\n const messages = AISDKMessageConverter.useThreadMessages({\n isRunning,\n messages: chatHelpers.messages,\n metadata: useMemo(\n () => ({\n toolStatuses,\n ...(chatHelpers.error && { error: chatHelpers.error.message }),\n }),\n [toolStatuses, chatHelpers.error],\n ),\n });\n\n const [runtimeRef] = useState(() => ({\n get current(): AssistantRuntime {\n return runtime;\n },\n }));\n\n const toolInvocations = INTERNAL.useToolInvocations({\n state: {\n messages,\n isRunning,\n },\n getTools: () => runtimeRef.current.thread.getModelContext().tools,\n onResult: (command: any) => {\n if (command.type === \"add-tool-result\") {\n chatHelpers.addToolResult({\n tool: command.toolName,\n toolCallId: command.toolCallId,\n output: command.result,\n });\n }\n },\n setToolStatuses,\n });\n\n const isLoading = useExternalHistory(\n runtimeRef,\n adapters?.history ?? contextAdapters?.history,\n AISDKMessageConverter.toThreadMessages as (\n messages: UI_MESSAGE[],\n ) => ThreadMessage[],\n aiSDKV5FormatAdapter as MessageFormatAdapter<\n UI_MESSAGE,\n AISDKStorageFormat\n >,\n (messages) => {\n chatHelpers.setMessages(messages);\n },\n );\n\n const runtime = useExternalStoreRuntime({\n isRunning,\n messages,\n setMessages: (messages) =>\n chatHelpers.setMessages(\n messages\n .map(getVercelAIMessages<UI_MESSAGE>)\n .filter(Boolean)\n .flat(),\n ),\n onImport: (messages) =>\n chatHelpers.setMessages(\n messages\n .map(getVercelAIMessages<UI_MESSAGE>)\n .filter(Boolean)\n .flat(),\n ),\n onCancel: async () => {\n chatHelpers.stop();\n toolInvocations.abort();\n },\n onNew: async (message) => {\n const createMessage = toCreateMessage<UI_MESSAGE>(message);\n await chatHelpers.sendMessage(createMessage, {\n metadata: message.runConfig,\n });\n },\n onEdit: async (message) => {\n const newMessages = sliceMessagesUntil(\n chatHelpers.messages,\n message.parentId,\n );\n chatHelpers.setMessages(newMessages);\n\n const createMessage = toCreateMessage<UI_MESSAGE>(message);\n await chatHelpers.sendMessage(createMessage, {\n metadata: message.runConfig,\n });\n },\n onReload: async (parentId: string | null, config) => {\n const newMessages = sliceMessagesUntil(chatHelpers.messages, parentId);\n chatHelpers.setMessages(newMessages);\n\n await chatHelpers.regenerate({ metadata: config.runConfig });\n },\n onAddToolResult: ({ toolCallId, result }) => {\n chatHelpers.addToolResult({\n tool: toolCallId,\n toolCallId,\n output: result,\n });\n },\n onResumeToolCall: (options) =>\n toolInvocations.resume(options.toolCallId, options.payload),\n adapters: {\n attachments: vercelAttachmentAdapter,\n ...contextAdapters,\n ...adapters,\n },\n isLoading,\n });\n\n return runtime;\n};\n"],"mappings":"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","names":["messages"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useChatRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAGjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAmB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAG9B,MAAM,MAAM,qBAAqB,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IACxE,QAAQ,CAAC,UAAU,CAAC,GAAG;IACrB,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CACxD,CAAC;AAEJ,eAAO,MAAM,oBAAoB,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EAC3E,UAAU,qBAAqB,CAAC,UAAU,CAAC,KAC1C,gBAsBF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EAAE,wBAGtE,qBAAqB,CAAC,UAAU,CAAM,KAAG,gBAQ3C,CAAC"}
1
+ {"version":3,"file":"useChatRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAmB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAG9B,MAAM,MAAM,qBAAqB,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IACxE,QAAQ,CAAC,UAAU,CAAC,GAAG;IACrB,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CACxD,CAAC;AAEJ,eAAO,MAAM,oBAAoB,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EAC3E,UAAU,qBAAqB,CAAC,UAAU,CAAC,KAC1C,gBAwBF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EAAE,wBAGtE,qBAAqB,CAAC,UAAU,CAAM,KAAG,gBAQ3C,CAAC"}
@@ -4,7 +4,8 @@
4
4
  import { useChat } from "@ai-sdk/react";
5
5
  import {
6
6
  unstable_useCloudThreadListAdapter,
7
- unstable_useRemoteThreadListRuntime
7
+ unstable_useRemoteThreadListRuntime,
8
+ useAssistantState
8
9
  } from "@assistant-ui/react";
9
10
  import { useAISDKRuntime } from "./useAISDKRuntime.js";
10
11
  import { AssistantChatTransport } from "./AssistantChatTransport.js";
@@ -15,8 +16,10 @@ var useChatThreadRuntime = (options) => {
15
16
  ...chatOptions
16
17
  } = options ?? {};
17
18
  const transport = transportOptions ?? new AssistantChatTransport();
19
+ const id = useAssistantState(({ threadListItem }) => threadListItem.id);
18
20
  const chat = useChat({
19
21
  ...chatOptions,
22
+ id,
20
23
  transport
21
24
  });
22
25
  const runtime = useAISDKRuntime(chat, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/use-chat/useChatRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport { useChat, type UIMessage } from \"@ai-sdk/react\";\nimport type { AssistantCloud } from \"assistant-cloud\";\nimport {\n AssistantRuntime,\n unstable_useCloudThreadListAdapter,\n unstable_useRemoteThreadListRuntime,\n} from \"@assistant-ui/react\";\nimport { useAISDKRuntime, type AISDKRuntimeAdapter } from \"./useAISDKRuntime\";\nimport { ChatInit } from \"ai\";\nimport { AssistantChatTransport } from \"./AssistantChatTransport\";\n\nexport type UseChatRuntimeOptions<UI_MESSAGE extends UIMessage = UIMessage> =\n ChatInit<UI_MESSAGE> & {\n cloud?: AssistantCloud | undefined;\n adapters?: AISDKRuntimeAdapter[\"adapters\"] | undefined;\n };\n\nexport const useChatThreadRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(\n options?: UseChatRuntimeOptions<UI_MESSAGE>,\n): AssistantRuntime => {\n const {\n adapters,\n transport: transportOptions,\n ...chatOptions\n } = options ?? {};\n const transport = transportOptions ?? new AssistantChatTransport();\n\n const chat = useChat({\n ...chatOptions,\n transport,\n });\n\n const runtime = useAISDKRuntime(chat, {\n adapters,\n });\n\n if (transport instanceof AssistantChatTransport) {\n transport.setRuntime(runtime);\n }\n\n return runtime;\n};\n\nexport const useChatRuntime = <UI_MESSAGE extends UIMessage = UIMessage>({\n cloud,\n ...options\n}: UseChatRuntimeOptions<UI_MESSAGE> = {}): AssistantRuntime => {\n const cloudAdapter = unstable_useCloudThreadListAdapter({ cloud });\n return unstable_useRemoteThreadListRuntime({\n runtimeHook: function RuntimeHook() {\n return useChatThreadRuntime(options);\n },\n adapter: cloudAdapter,\n });\n};\n"],"mappings":";;;AAEA,SAAS,eAA+B;AAExC;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AACP,SAAS,uBAAiD;AAE1D,SAAS,8BAA8B;AAQhC,IAAM,uBAAuB,CAClC,YACqB;AACrB,QAAM;AAAA,IACJ;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,IAAI,WAAW,CAAC;AAChB,QAAM,YAAY,oBAAoB,IAAI,uBAAuB;AAEjE,QAAM,OAAO,QAAQ;AAAA,IACnB,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AAED,QAAM,UAAU,gBAAgB,MAAM;AAAA,IACpC;AAAA,EACF,CAAC;AAED,MAAI,qBAAqB,wBAAwB;AAC/C,cAAU,WAAW,OAAO;AAAA,EAC9B;AAEA,SAAO;AACT;AAEO,IAAM,iBAAiB,CAA2C;AAAA,EACvE;AAAA,EACA,GAAG;AACL,IAAuC,CAAC,MAAwB;AAC9D,QAAM,eAAe,mCAAmC,EAAE,MAAM,CAAC;AACjE,SAAO,oCAAoC;AAAA,IACzC,aAAa,SAAS,cAAc;AAClC,aAAO,qBAAqB,OAAO;AAAA,IACrC;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/use-chat/useChatRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport { useChat, type UIMessage } from \"@ai-sdk/react\";\nimport type { AssistantCloud } from \"assistant-cloud\";\nimport {\n AssistantRuntime,\n unstable_useCloudThreadListAdapter,\n unstable_useRemoteThreadListRuntime,\n useAssistantState,\n} from \"@assistant-ui/react\";\nimport { useAISDKRuntime, type AISDKRuntimeAdapter } from \"./useAISDKRuntime\";\nimport { ChatInit } from \"ai\";\nimport { AssistantChatTransport } from \"./AssistantChatTransport\";\n\nexport type UseChatRuntimeOptions<UI_MESSAGE extends UIMessage = UIMessage> =\n ChatInit<UI_MESSAGE> & {\n cloud?: AssistantCloud | undefined;\n adapters?: AISDKRuntimeAdapter[\"adapters\"] | undefined;\n };\n\nexport const useChatThreadRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(\n options?: UseChatRuntimeOptions<UI_MESSAGE>,\n): AssistantRuntime => {\n const {\n adapters,\n transport: transportOptions,\n ...chatOptions\n } = options ?? {};\n const transport = transportOptions ?? new AssistantChatTransport();\n\n const id = useAssistantState(({ threadListItem }) => threadListItem.id);\n const chat = useChat({\n ...chatOptions,\n id,\n transport,\n });\n\n const runtime = useAISDKRuntime(chat, {\n adapters,\n });\n\n if (transport instanceof AssistantChatTransport) {\n transport.setRuntime(runtime);\n }\n\n return runtime;\n};\n\nexport const useChatRuntime = <UI_MESSAGE extends UIMessage = UIMessage>({\n cloud,\n ...options\n}: UseChatRuntimeOptions<UI_MESSAGE> = {}): AssistantRuntime => {\n const cloudAdapter = unstable_useCloudThreadListAdapter({ cloud });\n return unstable_useRemoteThreadListRuntime({\n runtimeHook: function RuntimeHook() {\n return useChatThreadRuntime(options);\n },\n adapter: cloudAdapter,\n });\n};\n"],"mappings":";;;AAEA,SAAS,eAA+B;AAExC;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,uBAAiD;AAE1D,SAAS,8BAA8B;AAQhC,IAAM,uBAAuB,CAClC,YACqB;AACrB,QAAM;AAAA,IACJ;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,IAAI,WAAW,CAAC;AAChB,QAAM,YAAY,oBAAoB,IAAI,uBAAuB;AAEjE,QAAM,KAAK,kBAAkB,CAAC,EAAE,eAAe,MAAM,eAAe,EAAE;AACtE,QAAM,OAAO,QAAQ;AAAA,IACnB,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,UAAU,gBAAgB,MAAM;AAAA,IACpC;AAAA,EACF,CAAC;AAED,MAAI,qBAAqB,wBAAwB;AAC/C,cAAU,WAAW,OAAO;AAAA,EAC9B;AAEA,SAAO;AACT;AAEO,IAAM,iBAAiB,CAA2C;AAAA,EACvE;AAAA,EACA,GAAG;AACL,IAAuC,CAAC,MAAwB;AAC9D,QAAM,eAAe,mCAAmC,EAAE,MAAM,CAAC;AACjE,SAAO,oCAAoC;AAAA,IACzC,aAAa,SAAS,cAAc;AAClC,aAAO,qBAAqB,OAAO;AAAA,IACrC;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AACH;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react-ai-sdk",
3
- "version": "1.1.8",
3
+ "version": "1.1.9",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -19,17 +19,17 @@
19
19
  "sideEffects": false,
20
20
  "dependencies": {
21
21
  "@ai-sdk/provider": "^2.0.0",
22
- "@ai-sdk/react": "^2.0.76",
23
- "ai": "^5.0.76",
22
+ "@ai-sdk/react": "^2.0.86",
23
+ "ai": "^5.0.86",
24
24
  "@radix-ui/react-use-callback-ref": "^1.1.1",
25
25
  "@types/json-schema": "^7.0.15",
26
- "assistant-stream": "^0.2.37",
26
+ "assistant-stream": "^0.2.39",
27
27
  "json-schema": "^0.4.0",
28
28
  "zod": "^4.1.12",
29
29
  "zustand": "^5.0.8"
30
30
  },
31
31
  "peerDependencies": {
32
- "@assistant-ui/react": "^0.11.34",
32
+ "@assistant-ui/react": "^0.11.36",
33
33
  "@types/react": "*",
34
34
  "assistant-cloud": "*",
35
35
  "react": "^18 || ^19 || ^19.0.0-rc"
@@ -43,13 +43,13 @@
43
43
  }
44
44
  },
45
45
  "devDependencies": {
46
- "@types/node": "^24.9.1",
46
+ "@types/node": "^24.10.0",
47
47
  "@types/react": "^19.2.2",
48
48
  "eslint": "^9",
49
- "eslint-config-next": "16.0.0",
49
+ "eslint-config-next": "16.0.1",
50
50
  "react": "19.2.0",
51
51
  "tsx": "^4.20.6",
52
- "@assistant-ui/react": "0.11.34",
52
+ "@assistant-ui/react": "0.11.36",
53
53
  "@assistant-ui/x-buildutils": "0.0.1"
54
54
  },
55
55
  "publishConfig": {
@@ -38,6 +38,9 @@ export class AssistantChatTransport<
38
38
  ...initOptions,
39
39
  prepareSendMessagesRequest: async (options) => {
40
40
  const context = this.runtime?.thread.getModelContext();
41
+ const id =
42
+ (await this.runtime?.threads.mainItem.initialize())?.remoteId ??
43
+ options.id;
41
44
 
42
45
  const optionsEx = {
43
46
  ...options,
@@ -55,7 +58,7 @@ export class AssistantChatTransport<
55
58
  ...preparedRequest,
56
59
  body: preparedRequest?.body ?? {
57
60
  ...optionsEx.body,
58
- id: options.id,
61
+ id,
59
62
  messages: options.messages,
60
63
  trigger: options.trigger,
61
64
  messageId: options.messageId,
@@ -47,18 +47,20 @@ export const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
47
47
  const messages = AISDKMessageConverter.useThreadMessages({
48
48
  isRunning,
49
49
  messages: chatHelpers.messages,
50
- metadata: useMemo(() => ({ toolStatuses }), [toolStatuses]),
50
+ metadata: useMemo(
51
+ () => ({
52
+ toolStatuses,
53
+ ...(chatHelpers.error && { error: chatHelpers.error.message }),
54
+ }),
55
+ [toolStatuses, chatHelpers.error],
56
+ ),
51
57
  });
52
58
 
53
- const runtimeRef = useMemo(
54
- () => ({
55
- get current(): AssistantRuntime {
56
- return runtime;
57
- },
58
- }),
59
- // eslint-disable-next-line react-hooks/exhaustive-deps
60
- [],
61
- );
59
+ const [runtimeRef] = useState(() => ({
60
+ get current(): AssistantRuntime {
61
+ return runtime;
62
+ },
63
+ }));
62
64
 
63
65
  const toolInvocations = INTERNAL.useToolInvocations({
64
66
  state: {
@@ -6,6 +6,7 @@ import {
6
6
  AssistantRuntime,
7
7
  unstable_useCloudThreadListAdapter,
8
8
  unstable_useRemoteThreadListRuntime,
9
+ useAssistantState,
9
10
  } from "@assistant-ui/react";
10
11
  import { useAISDKRuntime, type AISDKRuntimeAdapter } from "./useAISDKRuntime";
11
12
  import { ChatInit } from "ai";
@@ -27,8 +28,10 @@ export const useChatThreadRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
27
28
  } = options ?? {};
28
29
  const transport = transportOptions ?? new AssistantChatTransport();
29
30
 
31
+ const id = useAssistantState(({ threadListItem }) => threadListItem.id);
30
32
  const chat = useChat({
31
33
  ...chatOptions,
34
+ id,
32
35
  transport,
33
36
  });
34
37