@assistant-ui/react-ai-sdk 1.0.1 → 1.0.2
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.
- package/dist/frontendTools.d.ts +1 -1
- package/dist/frontendTools.js +1 -1
- package/dist/frontendTools.js.map +1 -1
- package/dist/ui/use-chat/useChatRuntime.d.ts.map +1 -1
- package/dist/ui/use-chat/useChatRuntime.js +28 -1
- package/dist/ui/use-chat/useChatRuntime.js.map +1 -1
- package/package.json +11 -11
- package/src/frontendTools.ts +1 -1
- package/src/ui/use-chat/useChatRuntime.tsx +27 -0
package/dist/frontendTools.d.ts
CHANGED
package/dist/frontendTools.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/frontendTools.ts"],"sourcesContent":["import { jsonSchema } from \"ai\";\nimport type { JSONSchema7 } from \"json-schema\";\n\nexport const frontendTools = (\n tools: Record<string, { description?: string; parameters: JSONSchema7 }>,\n) =>\n Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n
|
|
1
|
+
{"version":3,"sources":["../src/frontendTools.ts"],"sourcesContent":["import { jsonSchema } from \"ai\";\nimport type { JSONSchema7 } from \"json-schema\";\n\nexport const frontendTools = (\n tools: Record<string, { description?: string; parameters: JSONSchema7 }>,\n) =>\n Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n inputSchema: jsonSchema(tool.parameters),\n },\n ]),\n );\n"],"mappings":";AAAA,SAAS,kBAAkB;AAGpB,IAAM,gBAAgB,CAC3B,UAEA,OAAO;AAAA,EACL,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AAAA,IAC1C;AAAA,IACA;AAAA,MACE,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI;AAAA,MAC3D,aAAa,WAAW,KAAK,UAAU;AAAA,IACzC;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -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,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,
|
|
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,gBAsDF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EAAE,wBAGtE,qBAAqB,CAAC,UAAU,CAAM,KAAG,gBAQ3C,CAAC"}
|
|
@@ -19,7 +19,34 @@ var useChatThreadRuntime = (options) => {
|
|
|
19
19
|
const contextAdapters = useRuntimeAdapters();
|
|
20
20
|
const chat = useChat({
|
|
21
21
|
...chatOptions,
|
|
22
|
-
transport
|
|
22
|
+
transport,
|
|
23
|
+
onToolCall: async ({ toolCall }) => {
|
|
24
|
+
await chatOptions.onToolCall?.({ toolCall });
|
|
25
|
+
const tools = runtime.thread.getModelContext().tools;
|
|
26
|
+
const tool = tools?.[toolCall.toolName];
|
|
27
|
+
if (tool) {
|
|
28
|
+
try {
|
|
29
|
+
const result = await tool.execute?.(toolCall.input, {
|
|
30
|
+
toolCallId: toolCall.toolCallId,
|
|
31
|
+
abortSignal: new AbortController().signal
|
|
32
|
+
// dummy signal for now
|
|
33
|
+
});
|
|
34
|
+
chat.addToolResult({
|
|
35
|
+
tool: toolCall.toolName,
|
|
36
|
+
toolCallId: toolCall.toolCallId,
|
|
37
|
+
output: result
|
|
38
|
+
});
|
|
39
|
+
} catch (error) {
|
|
40
|
+
chat.addToolResult({
|
|
41
|
+
tool: toolCall.toolName,
|
|
42
|
+
toolCallId: toolCall.toolCallId,
|
|
43
|
+
output: {
|
|
44
|
+
error: error instanceof Error ? error.message : String(error)
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
23
50
|
});
|
|
24
51
|
const runtime = useAISDKRuntime(chat, {
|
|
25
52
|
adapters: {
|
|
@@ -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 useRuntimeAdapters,\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 // Get adapters from context (including history adapter from cloud)\n const contextAdapters = useRuntimeAdapters();\n\n const chat = useChat({\n ...chatOptions,\n transport,\n });\n\n const runtime = useAISDKRuntime(chat as any, {\n adapters: {\n ...contextAdapters,\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;AAGjE,QAAM,kBAAkB,mBAAmB;AAE3C,QAAM,OAAO,QAAQ;AAAA,IACnB,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AAED,QAAM,UAAU,gBAAgB,MAAa;AAAA,IAC3C,UAAU;AAAA,MACR,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF,CAAC;AACD,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 useRuntimeAdapters,\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 // Get adapters from context (including history adapter from cloud)\n const contextAdapters = useRuntimeAdapters();\n\n const chat = useChat({\n ...chatOptions,\n transport,\n onToolCall: async ({ toolCall }) => {\n await chatOptions.onToolCall?.({ toolCall });\n\n const tools = runtime.thread.getModelContext().tools;\n const tool = tools?.[toolCall.toolName];\n if (tool) {\n try {\n const result = await tool.execute?.(toolCall.input, {\n toolCallId: toolCall.toolCallId,\n abortSignal: new AbortController().signal, // dummy signal for now\n });\n chat.addToolResult({\n tool: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n output: result,\n });\n } catch (error) {\n chat.addToolResult({\n tool: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n output: {\n error: error instanceof Error ? error.message : String(error),\n },\n });\n }\n }\n },\n });\n\n const runtime = useAISDKRuntime(chat as any, {\n adapters: {\n ...contextAdapters,\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;AAGjE,QAAM,kBAAkB,mBAAmB;AAE3C,QAAM,OAAO,QAAQ;AAAA,IACnB,GAAG;AAAA,IACH;AAAA,IACA,YAAY,OAAO,EAAE,SAAS,MAAM;AAClC,YAAM,YAAY,aAAa,EAAE,SAAS,CAAC;AAE3C,YAAM,QAAQ,QAAQ,OAAO,gBAAgB,EAAE;AAC/C,YAAM,OAAO,QAAQ,SAAS,QAAQ;AACtC,UAAI,MAAM;AACR,YAAI;AACF,gBAAM,SAAS,MAAM,KAAK,UAAU,SAAS,OAAO;AAAA,YAClD,YAAY,SAAS;AAAA,YACrB,aAAa,IAAI,gBAAgB,EAAE;AAAA;AAAA,UACrC,CAAC;AACD,eAAK,cAAc;AAAA,YACjB,MAAM,SAAS;AAAA,YACf,YAAY,SAAS;AAAA,YACrB,QAAQ;AAAA,UACV,CAAC;AAAA,QACH,SAAS,OAAO;AACd,eAAK,cAAc;AAAA,YACjB,MAAM,SAAS;AAAA,YACf,YAAY,SAAS;AAAA,YACrB,QAAQ;AAAA,cACN,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,YAC9D;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,UAAU,gBAAgB,MAAa;AAAA,IAC3C,UAAU;AAAA,MACR,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF,CAAC;AACD,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.0.
|
|
3
|
+
"version": "1.0.2",
|
|
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.
|
|
23
|
-
"ai": "^5.0.
|
|
22
|
+
"@ai-sdk/react": "^2.0.15",
|
|
23
|
+
"ai": "^5.0.15",
|
|
24
24
|
"@radix-ui/react-use-callback-ref": "^1.1.1",
|
|
25
25
|
"@types/json-schema": "^7.0.15",
|
|
26
|
-
"assistant-stream": "^0.2.
|
|
26
|
+
"assistant-stream": "^0.2.23",
|
|
27
27
|
"json-schema": "^0.4.0",
|
|
28
|
-
"zod": "^4.0.
|
|
28
|
+
"zod": "^4.0.17",
|
|
29
29
|
"zustand": "^5.0.7"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@assistant-ui/react": "^0.10.
|
|
32
|
+
"@assistant-ui/react": "^0.10.42",
|
|
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.
|
|
47
|
-
"@types/react": "^19.1.
|
|
46
|
+
"@types/node": "^24.3.0",
|
|
47
|
+
"@types/react": "^19.1.10",
|
|
48
48
|
"eslint": "^9",
|
|
49
|
-
"eslint-config-next": "15.4.
|
|
49
|
+
"eslint-config-next": "15.4.6",
|
|
50
50
|
"react": "19.1.1",
|
|
51
|
-
"tsx": "^4.20.
|
|
52
|
-
"@assistant-ui/react": "0.10.
|
|
51
|
+
"tsx": "^4.20.4",
|
|
52
|
+
"@assistant-ui/react": "0.10.42",
|
|
53
53
|
"@assistant-ui/x-buildutils": "0.0.1"
|
|
54
54
|
},
|
|
55
55
|
"publishConfig": {
|
package/src/frontendTools.ts
CHANGED
|
@@ -34,6 +34,33 @@ export const useChatThreadRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
34
34
|
const chat = useChat({
|
|
35
35
|
...chatOptions,
|
|
36
36
|
transport,
|
|
37
|
+
onToolCall: async ({ toolCall }) => {
|
|
38
|
+
await chatOptions.onToolCall?.({ toolCall });
|
|
39
|
+
|
|
40
|
+
const tools = runtime.thread.getModelContext().tools;
|
|
41
|
+
const tool = tools?.[toolCall.toolName];
|
|
42
|
+
if (tool) {
|
|
43
|
+
try {
|
|
44
|
+
const result = await tool.execute?.(toolCall.input, {
|
|
45
|
+
toolCallId: toolCall.toolCallId,
|
|
46
|
+
abortSignal: new AbortController().signal, // dummy signal for now
|
|
47
|
+
});
|
|
48
|
+
chat.addToolResult({
|
|
49
|
+
tool: toolCall.toolName,
|
|
50
|
+
toolCallId: toolCall.toolCallId,
|
|
51
|
+
output: result,
|
|
52
|
+
});
|
|
53
|
+
} catch (error) {
|
|
54
|
+
chat.addToolResult({
|
|
55
|
+
tool: toolCall.toolName,
|
|
56
|
+
toolCallId: toolCall.toolCallId,
|
|
57
|
+
output: {
|
|
58
|
+
error: error instanceof Error ? error.message : String(error),
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
37
64
|
});
|
|
38
65
|
|
|
39
66
|
const runtime = useAISDKRuntime(chat as any, {
|