@assistant-ui/react 0.7.12 → 0.7.15
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/runtimes/edge/streams/assistantDecoderStream.d.ts.map +1 -1
- package/dist/runtimes/edge/streams/assistantDecoderStream.js +16 -9
- package/dist/runtimes/edge/streams/assistantDecoderStream.js.map +1 -1
- package/dist/runtimes/edge/streams/assistantDecoderStream.mjs +16 -9
- package/dist/runtimes/edge/streams/assistantDecoderStream.mjs.map +1 -1
- package/dist/runtimes/edge/streams/toolResultStream.js +27 -28
- package/dist/runtimes/edge/streams/toolResultStream.js.map +1 -1
- package/dist/runtimes/edge/streams/toolResultStream.mjs +27 -28
- package/dist/runtimes/edge/streams/toolResultStream.mjs.map +1 -1
- package/package.json +3 -3
- package/src/runtimes/edge/streams/assistantDecoderStream.ts +18 -9
- package/src/runtimes/edge/streams/toolResultStream.ts +30 -30
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistantDecoderStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/assistantDecoderStream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAErB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"assistantDecoderStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/assistantDecoderStream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAErB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,sBAAsB,4EA4IrC"}
|
|
@@ -27,17 +27,21 @@ var import_AssistantStreamChunkType = require("./AssistantStreamChunkType.js");
|
|
|
27
27
|
function assistantDecoderStream() {
|
|
28
28
|
const toolCallNames = /* @__PURE__ */ new Map();
|
|
29
29
|
let currentToolCall;
|
|
30
|
+
const endCurrentToolCall = (controller) => {
|
|
31
|
+
if (!currentToolCall) return;
|
|
32
|
+
controller.enqueue({
|
|
33
|
+
type: "tool-call",
|
|
34
|
+
toolCallType: "function",
|
|
35
|
+
toolCallId: currentToolCall.id,
|
|
36
|
+
toolName: currentToolCall.name,
|
|
37
|
+
args: currentToolCall.argsText
|
|
38
|
+
});
|
|
39
|
+
currentToolCall = void 0;
|
|
40
|
+
};
|
|
30
41
|
return new TransformStream({
|
|
31
42
|
transform({ type, value }, controller) {
|
|
32
|
-
if (
|
|
33
|
-
controller
|
|
34
|
-
type: "tool-call",
|
|
35
|
-
toolCallType: "function",
|
|
36
|
-
toolCallId: currentToolCall.id,
|
|
37
|
-
toolName: currentToolCall.name,
|
|
38
|
-
args: currentToolCall.argsText
|
|
39
|
-
});
|
|
40
|
-
currentToolCall = void 0;
|
|
43
|
+
if (type !== import_AssistantStreamChunkType.AssistantStreamChunkType.ToolCallDelta && type !== import_AssistantStreamChunkType.AssistantStreamChunkType.Error) {
|
|
44
|
+
endCurrentToolCall(controller);
|
|
41
45
|
}
|
|
42
46
|
switch (type) {
|
|
43
47
|
case import_AssistantStreamChunkType.AssistantStreamChunkType.TextDelta: {
|
|
@@ -134,6 +138,9 @@ function assistantDecoderStream() {
|
|
|
134
138
|
throw new Error(`Unhandled chunk type: ${unhandledType}`);
|
|
135
139
|
}
|
|
136
140
|
}
|
|
141
|
+
},
|
|
142
|
+
flush(controller) {
|
|
143
|
+
endCurrentToolCall(controller);
|
|
137
144
|
}
|
|
138
145
|
});
|
|
139
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/assistantDecoderStream.ts"],"sourcesContent":["import {\n AssistantStreamChunk,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { StreamPart } from \"./utils/StreamPart\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantDecoderStream() {\n const toolCallNames = new Map<string, string>();\n let currentToolCall:\n | { id: string; name: string; argsText: string }\n | undefined;\n\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/streams/assistantDecoderStream.ts"],"sourcesContent":["import {\n AssistantStreamChunk,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { StreamPart } from \"./utils/StreamPart\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantDecoderStream() {\n const toolCallNames = new Map<string, string>();\n let currentToolCall:\n | { id: string; name: string; argsText: string }\n | undefined;\n\n const endCurrentToolCall = (\n controller: TransformStreamDefaultController<ToolResultStreamPart>,\n ) => {\n if (!currentToolCall) return;\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: currentToolCall.id,\n toolName: currentToolCall.name,\n args: currentToolCall.argsText,\n });\n currentToolCall = undefined;\n };\n\n return new TransformStream<\n StreamPart<AssistantStreamChunk>,\n ToolResultStreamPart\n >({\n transform({ type, value }, controller) {\n if (\n type !== AssistantStreamChunkType.ToolCallDelta &&\n type !== AssistantStreamChunkType.Error\n ) {\n endCurrentToolCall(controller);\n }\n\n switch (type) {\n case AssistantStreamChunkType.TextDelta: {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: value,\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallBegin: {\n const { toolCallId: id, toolName: name } = value;\n toolCallNames.set(id, name);\n\n currentToolCall = { id, name, argsText: \"\" };\n\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: id,\n toolName: name,\n argsTextDelta: \"\",\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallDelta: {\n const { toolCallId, argsTextDelta } = value;\n\n const toolName = toolCallNames.get(toolCallId)!;\n if (currentToolCall?.id === toolCallId) {\n currentToolCall.argsText += argsTextDelta;\n }\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId,\n toolName,\n argsTextDelta: argsTextDelta,\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallResult: {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType: \"function\",\n toolCallId: value.toolCallId,\n toolName: toolCallNames.get(value.toolCallId)!,\n result: value.result,\n });\n break;\n }\n case AssistantStreamChunkType.Finish: {\n controller.enqueue({\n type: \"finish\",\n ...value,\n });\n break;\n }\n case AssistantStreamChunkType.Error: {\n controller.enqueue({\n type: \"error\",\n error: value,\n });\n break;\n }\n\n case AssistantStreamChunkType.ToolCall: {\n const { toolCallId, toolName, args } = value;\n toolCallNames.set(toolCallId, toolName);\n\n const argsText = JSON.stringify(args);\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId,\n toolName,\n argsTextDelta: argsText,\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCallId,\n toolName: toolName,\n args: argsText,\n });\n break;\n }\n\n case AssistantStreamChunkType.StepFinish: {\n controller.enqueue({\n type: \"step-finish\",\n ...value,\n });\n break;\n }\n\n // TODO\n case AssistantStreamChunkType.Data:\n break;\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n flush(controller) {\n endCurrentToolCall(controller);\n },\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -5,17 +5,21 @@ import {
|
|
|
5
5
|
function assistantDecoderStream() {
|
|
6
6
|
const toolCallNames = /* @__PURE__ */ new Map();
|
|
7
7
|
let currentToolCall;
|
|
8
|
+
const endCurrentToolCall = (controller) => {
|
|
9
|
+
if (!currentToolCall) return;
|
|
10
|
+
controller.enqueue({
|
|
11
|
+
type: "tool-call",
|
|
12
|
+
toolCallType: "function",
|
|
13
|
+
toolCallId: currentToolCall.id,
|
|
14
|
+
toolName: currentToolCall.name,
|
|
15
|
+
args: currentToolCall.argsText
|
|
16
|
+
});
|
|
17
|
+
currentToolCall = void 0;
|
|
18
|
+
};
|
|
8
19
|
return new TransformStream({
|
|
9
20
|
transform({ type, value }, controller) {
|
|
10
|
-
if (
|
|
11
|
-
controller
|
|
12
|
-
type: "tool-call",
|
|
13
|
-
toolCallType: "function",
|
|
14
|
-
toolCallId: currentToolCall.id,
|
|
15
|
-
toolName: currentToolCall.name,
|
|
16
|
-
args: currentToolCall.argsText
|
|
17
|
-
});
|
|
18
|
-
currentToolCall = void 0;
|
|
21
|
+
if (type !== AssistantStreamChunkType.ToolCallDelta && type !== AssistantStreamChunkType.Error) {
|
|
22
|
+
endCurrentToolCall(controller);
|
|
19
23
|
}
|
|
20
24
|
switch (type) {
|
|
21
25
|
case AssistantStreamChunkType.TextDelta: {
|
|
@@ -112,6 +116,9 @@ function assistantDecoderStream() {
|
|
|
112
116
|
throw new Error(`Unhandled chunk type: ${unhandledType}`);
|
|
113
117
|
}
|
|
114
118
|
}
|
|
119
|
+
},
|
|
120
|
+
flush(controller) {
|
|
121
|
+
endCurrentToolCall(controller);
|
|
115
122
|
}
|
|
116
123
|
});
|
|
117
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/assistantDecoderStream.ts"],"sourcesContent":["import {\n AssistantStreamChunk,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { StreamPart } from \"./utils/StreamPart\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantDecoderStream() {\n const toolCallNames = new Map<string, string>();\n let currentToolCall:\n | { id: string; name: string; argsText: string }\n | undefined;\n\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/streams/assistantDecoderStream.ts"],"sourcesContent":["import {\n AssistantStreamChunk,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { StreamPart } from \"./utils/StreamPart\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantDecoderStream() {\n const toolCallNames = new Map<string, string>();\n let currentToolCall:\n | { id: string; name: string; argsText: string }\n | undefined;\n\n const endCurrentToolCall = (\n controller: TransformStreamDefaultController<ToolResultStreamPart>,\n ) => {\n if (!currentToolCall) return;\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: currentToolCall.id,\n toolName: currentToolCall.name,\n args: currentToolCall.argsText,\n });\n currentToolCall = undefined;\n };\n\n return new TransformStream<\n StreamPart<AssistantStreamChunk>,\n ToolResultStreamPart\n >({\n transform({ type, value }, controller) {\n if (\n type !== AssistantStreamChunkType.ToolCallDelta &&\n type !== AssistantStreamChunkType.Error\n ) {\n endCurrentToolCall(controller);\n }\n\n switch (type) {\n case AssistantStreamChunkType.TextDelta: {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: value,\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallBegin: {\n const { toolCallId: id, toolName: name } = value;\n toolCallNames.set(id, name);\n\n currentToolCall = { id, name, argsText: \"\" };\n\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: id,\n toolName: name,\n argsTextDelta: \"\",\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallDelta: {\n const { toolCallId, argsTextDelta } = value;\n\n const toolName = toolCallNames.get(toolCallId)!;\n if (currentToolCall?.id === toolCallId) {\n currentToolCall.argsText += argsTextDelta;\n }\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId,\n toolName,\n argsTextDelta: argsTextDelta,\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallResult: {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType: \"function\",\n toolCallId: value.toolCallId,\n toolName: toolCallNames.get(value.toolCallId)!,\n result: value.result,\n });\n break;\n }\n case AssistantStreamChunkType.Finish: {\n controller.enqueue({\n type: \"finish\",\n ...value,\n });\n break;\n }\n case AssistantStreamChunkType.Error: {\n controller.enqueue({\n type: \"error\",\n error: value,\n });\n break;\n }\n\n case AssistantStreamChunkType.ToolCall: {\n const { toolCallId, toolName, args } = value;\n toolCallNames.set(toolCallId, toolName);\n\n const argsText = JSON.stringify(args);\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId,\n toolName,\n argsTextDelta: argsText,\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCallId,\n toolName: toolName,\n args: argsText,\n });\n break;\n }\n\n case AssistantStreamChunkType.StepFinish: {\n controller.enqueue({\n type: \"step-finish\",\n ...value,\n });\n break;\n }\n\n // TODO\n case AssistantStreamChunkType.Data:\n break;\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n flush(controller) {\n endCurrentToolCall(controller);\n },\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -59,36 +59,35 @@ function toolResultStream(tools, abortSignal) {
|
|
|
59
59
|
isError: true
|
|
60
60
|
});
|
|
61
61
|
return;
|
|
62
|
-
} else {
|
|
63
|
-
toolCallExecutions.set(
|
|
64
|
-
toolCallId,
|
|
65
|
-
(async () => {
|
|
66
|
-
if (!tool.execute) return;
|
|
67
|
-
try {
|
|
68
|
-
const result2 = await tool.execute(args, { abortSignal });
|
|
69
|
-
controller.enqueue({
|
|
70
|
-
type: "tool-result",
|
|
71
|
-
toolCallType,
|
|
72
|
-
toolCallId,
|
|
73
|
-
toolName,
|
|
74
|
-
result: result2
|
|
75
|
-
});
|
|
76
|
-
} catch (error) {
|
|
77
|
-
controller.enqueue({
|
|
78
|
-
type: "tool-result",
|
|
79
|
-
toolCallType,
|
|
80
|
-
toolCallId,
|
|
81
|
-
toolName,
|
|
82
|
-
result: "Error: " + error,
|
|
83
|
-
isError: true
|
|
84
|
-
});
|
|
85
|
-
} finally {
|
|
86
|
-
toolCallExecutions.delete(toolCallId);
|
|
87
|
-
}
|
|
88
|
-
})()
|
|
89
|
-
);
|
|
90
62
|
}
|
|
91
63
|
}
|
|
64
|
+
toolCallExecutions.set(
|
|
65
|
+
toolCallId,
|
|
66
|
+
(async () => {
|
|
67
|
+
if (!tool.execute) return;
|
|
68
|
+
try {
|
|
69
|
+
const result = await tool.execute(args, { abortSignal });
|
|
70
|
+
controller.enqueue({
|
|
71
|
+
type: "tool-result",
|
|
72
|
+
toolCallType,
|
|
73
|
+
toolCallId,
|
|
74
|
+
toolName,
|
|
75
|
+
result
|
|
76
|
+
});
|
|
77
|
+
} catch (error) {
|
|
78
|
+
controller.enqueue({
|
|
79
|
+
type: "tool-result",
|
|
80
|
+
toolCallType,
|
|
81
|
+
toolCallId,
|
|
82
|
+
toolName,
|
|
83
|
+
result: "Error: " + error,
|
|
84
|
+
isError: true
|
|
85
|
+
});
|
|
86
|
+
} finally {
|
|
87
|
+
toolCallExecutions.delete(toolCallId);
|
|
88
|
+
}
|
|
89
|
+
})()
|
|
90
|
+
);
|
|
92
91
|
break;
|
|
93
92
|
}
|
|
94
93
|
// ignore other parts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../types/ModelConfigTypes\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { z } from \"zod\";\nimport sjson from \"secure-json-parse\";\n\nexport type ToolResultStreamPart =\n | LanguageModelV1StreamPart\n | {\n type: \"tool-result\";\n toolCallType: \"function\";\n toolCallId: string;\n toolName: string;\n result: unknown;\n isError?: boolean;\n }\n | {\n type: \"step-finish\";\n finishReason:\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n usage: {\n promptTokens: number;\n completionTokens: number;\n };\n isContinued: boolean;\n };\n\nexport function toolResultStream(\n tools: Record<string, Tool> | undefined,\n abortSignal: AbortSignal,\n) {\n const toolCallExecutions = new Map<string, Promise<any>>();\n\n return new TransformStream<ToolResultStreamPart, ToolResultStreamPart>({\n transform(chunk, controller) {\n // forward everything\n controller.enqueue(chunk);\n\n // handle tool calls\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"tool-call\": {\n const { toolCallId, toolCallType, toolName, args: argsText } = chunk;\n const tool = tools?.[toolName];\n if (!tool || !tool.execute) return;\n\n const args = sjson.parse(argsText);\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(args);\n if (!result.success) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result:\n \"Function parameter validation failed. \" +\n JSON.stringify(result.error.issues),\n isError: true,\n });\n return;\n }
|
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../types/ModelConfigTypes\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { z } from \"zod\";\nimport sjson from \"secure-json-parse\";\n\nexport type ToolResultStreamPart =\n | LanguageModelV1StreamPart\n | {\n type: \"tool-result\";\n toolCallType: \"function\";\n toolCallId: string;\n toolName: string;\n result: unknown;\n isError?: boolean;\n }\n | {\n type: \"step-finish\";\n finishReason:\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n usage: {\n promptTokens: number;\n completionTokens: number;\n };\n isContinued: boolean;\n };\n\nexport function toolResultStream(\n tools: Record<string, Tool> | undefined,\n abortSignal: AbortSignal,\n) {\n const toolCallExecutions = new Map<string, Promise<any>>();\n\n return new TransformStream<ToolResultStreamPart, ToolResultStreamPart>({\n transform(chunk, controller) {\n // forward everything\n controller.enqueue(chunk);\n\n // handle tool calls\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"tool-call\": {\n const { toolCallId, toolCallType, toolName, args: argsText } = chunk;\n const tool = tools?.[toolName];\n if (!tool || !tool.execute) return;\n\n const args = sjson.parse(argsText);\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(args);\n if (!result.success) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result:\n \"Function parameter validation failed. \" +\n JSON.stringify(result.error.issues),\n isError: true,\n });\n return;\n }\n }\n\n toolCallExecutions.set(\n toolCallId,\n (async () => {\n if (!tool.execute) return;\n\n try {\n const result = await tool.execute(args, { abortSignal });\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result,\n });\n } catch (error) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result: \"Error: \" + error,\n isError: true,\n });\n } finally {\n toolCallExecutions.delete(toolCallId);\n }\n })(),\n );\n break;\n }\n\n // ignore other parts\n case \"text-delta\":\n case \"tool-call-delta\":\n case \"tool-result\":\n case \"step-finish\":\n case \"finish\":\n case \"error\":\n case \"response-metadata\":\n break;\n\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n\n async flush() {\n await Promise.all(toolCallExecutions.values());\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,iBAAkB;AAClB,+BAAkB;AA6BX,SAAS,iBACd,OACA,aACA;AACA,QAAM,qBAAqB,oBAAI,IAA0B;AAEzD,SAAO,IAAI,gBAA4D;AAAA,IACrE,UAAU,OAAO,YAAY;AAE3B,iBAAW,QAAQ,KAAK;AAGxB,YAAM,YAAY,MAAM;AACxB,cAAQ,WAAW;AAAA,QACjB,KAAK,aAAa;AAChB,gBAAM,EAAE,YAAY,cAAc,UAAU,MAAM,SAAS,IAAI;AAC/D,gBAAM,OAAO,QAAQ,QAAQ;AAC7B,cAAI,CAAC,QAAQ,CAAC,KAAK,QAAS;AAE5B,gBAAM,OAAO,yBAAAA,QAAM,MAAM,QAAQ;AACjC,cAAI,KAAK,sBAAsB,aAAE,SAAS;AACxC,kBAAM,SAAS,KAAK,WAAW,UAAU,IAAI;AAC7C,gBAAI,CAAC,OAAO,SAAS;AACnB,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,QACE,2CACA,KAAK,UAAU,OAAO,MAAM,MAAM;AAAA,gBACpC,SAAS;AAAA,cACX,CAAC;AACD;AAAA,YACF;AAAA,UACF;AAEA,6BAAmB;AAAA,YACjB;AAAA,aACC,YAAY;AACX,kBAAI,CAAC,KAAK,QAAS;AAEnB,kBAAI;AACF,sBAAM,SAAS,MAAM,KAAK,QAAQ,MAAM,EAAE,YAAY,CAAC;AAEvD,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF,CAAC;AAAA,cACH,SAAS,OAAO;AACd,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,QAAQ,YAAY;AAAA,kBACpB,SAAS;AAAA,gBACX,CAAC;AAAA,cACH,UAAE;AACA,mCAAmB,OAAO,UAAU;AAAA,cACtC;AAAA,YACF,GAAG;AAAA,UACL;AACA;AAAA,QACF;AAAA;AAAA,QAGA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH;AAAA,QAEF,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ;AACZ,YAAM,QAAQ,IAAI,mBAAmB,OAAO,CAAC;AAAA,IAC/C;AAAA,EACF,CAAC;AACH;","names":["sjson"]}
|
|
@@ -25,36 +25,35 @@ function toolResultStream(tools, abortSignal) {
|
|
|
25
25
|
isError: true
|
|
26
26
|
});
|
|
27
27
|
return;
|
|
28
|
-
} else {
|
|
29
|
-
toolCallExecutions.set(
|
|
30
|
-
toolCallId,
|
|
31
|
-
(async () => {
|
|
32
|
-
if (!tool.execute) return;
|
|
33
|
-
try {
|
|
34
|
-
const result2 = await tool.execute(args, { abortSignal });
|
|
35
|
-
controller.enqueue({
|
|
36
|
-
type: "tool-result",
|
|
37
|
-
toolCallType,
|
|
38
|
-
toolCallId,
|
|
39
|
-
toolName,
|
|
40
|
-
result: result2
|
|
41
|
-
});
|
|
42
|
-
} catch (error) {
|
|
43
|
-
controller.enqueue({
|
|
44
|
-
type: "tool-result",
|
|
45
|
-
toolCallType,
|
|
46
|
-
toolCallId,
|
|
47
|
-
toolName,
|
|
48
|
-
result: "Error: " + error,
|
|
49
|
-
isError: true
|
|
50
|
-
});
|
|
51
|
-
} finally {
|
|
52
|
-
toolCallExecutions.delete(toolCallId);
|
|
53
|
-
}
|
|
54
|
-
})()
|
|
55
|
-
);
|
|
56
28
|
}
|
|
57
29
|
}
|
|
30
|
+
toolCallExecutions.set(
|
|
31
|
+
toolCallId,
|
|
32
|
+
(async () => {
|
|
33
|
+
if (!tool.execute) return;
|
|
34
|
+
try {
|
|
35
|
+
const result = await tool.execute(args, { abortSignal });
|
|
36
|
+
controller.enqueue({
|
|
37
|
+
type: "tool-result",
|
|
38
|
+
toolCallType,
|
|
39
|
+
toolCallId,
|
|
40
|
+
toolName,
|
|
41
|
+
result
|
|
42
|
+
});
|
|
43
|
+
} catch (error) {
|
|
44
|
+
controller.enqueue({
|
|
45
|
+
type: "tool-result",
|
|
46
|
+
toolCallType,
|
|
47
|
+
toolCallId,
|
|
48
|
+
toolName,
|
|
49
|
+
result: "Error: " + error,
|
|
50
|
+
isError: true
|
|
51
|
+
});
|
|
52
|
+
} finally {
|
|
53
|
+
toolCallExecutions.delete(toolCallId);
|
|
54
|
+
}
|
|
55
|
+
})()
|
|
56
|
+
);
|
|
58
57
|
break;
|
|
59
58
|
}
|
|
60
59
|
// ignore other parts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../types/ModelConfigTypes\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { z } from \"zod\";\nimport sjson from \"secure-json-parse\";\n\nexport type ToolResultStreamPart =\n | LanguageModelV1StreamPart\n | {\n type: \"tool-result\";\n toolCallType: \"function\";\n toolCallId: string;\n toolName: string;\n result: unknown;\n isError?: boolean;\n }\n | {\n type: \"step-finish\";\n finishReason:\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n usage: {\n promptTokens: number;\n completionTokens: number;\n };\n isContinued: boolean;\n };\n\nexport function toolResultStream(\n tools: Record<string, Tool> | undefined,\n abortSignal: AbortSignal,\n) {\n const toolCallExecutions = new Map<string, Promise<any>>();\n\n return new TransformStream<ToolResultStreamPart, ToolResultStreamPart>({\n transform(chunk, controller) {\n // forward everything\n controller.enqueue(chunk);\n\n // handle tool calls\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"tool-call\": {\n const { toolCallId, toolCallType, toolName, args: argsText } = chunk;\n const tool = tools?.[toolName];\n if (!tool || !tool.execute) return;\n\n const args = sjson.parse(argsText);\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(args);\n if (!result.success) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result:\n \"Function parameter validation failed. \" +\n JSON.stringify(result.error.issues),\n isError: true,\n });\n return;\n }
|
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../types/ModelConfigTypes\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { z } from \"zod\";\nimport sjson from \"secure-json-parse\";\n\nexport type ToolResultStreamPart =\n | LanguageModelV1StreamPart\n | {\n type: \"tool-result\";\n toolCallType: \"function\";\n toolCallId: string;\n toolName: string;\n result: unknown;\n isError?: boolean;\n }\n | {\n type: \"step-finish\";\n finishReason:\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n usage: {\n promptTokens: number;\n completionTokens: number;\n };\n isContinued: boolean;\n };\n\nexport function toolResultStream(\n tools: Record<string, Tool> | undefined,\n abortSignal: AbortSignal,\n) {\n const toolCallExecutions = new Map<string, Promise<any>>();\n\n return new TransformStream<ToolResultStreamPart, ToolResultStreamPart>({\n transform(chunk, controller) {\n // forward everything\n controller.enqueue(chunk);\n\n // handle tool calls\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"tool-call\": {\n const { toolCallId, toolCallType, toolName, args: argsText } = chunk;\n const tool = tools?.[toolName];\n if (!tool || !tool.execute) return;\n\n const args = sjson.parse(argsText);\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(args);\n if (!result.success) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result:\n \"Function parameter validation failed. \" +\n JSON.stringify(result.error.issues),\n isError: true,\n });\n return;\n }\n }\n\n toolCallExecutions.set(\n toolCallId,\n (async () => {\n if (!tool.execute) return;\n\n try {\n const result = await tool.execute(args, { abortSignal });\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result,\n });\n } catch (error) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result: \"Error: \" + error,\n isError: true,\n });\n } finally {\n toolCallExecutions.delete(toolCallId);\n }\n })(),\n );\n break;\n }\n\n // ignore other parts\n case \"text-delta\":\n case \"tool-call-delta\":\n case \"tool-result\":\n case \"step-finish\":\n case \"finish\":\n case \"error\":\n case \"response-metadata\":\n break;\n\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n\n async flush() {\n await Promise.all(toolCallExecutions.values());\n },\n });\n}\n"],"mappings":";AAEA,SAAS,SAAS;AAClB,OAAO,WAAW;AA6BX,SAAS,iBACd,OACA,aACA;AACA,QAAM,qBAAqB,oBAAI,IAA0B;AAEzD,SAAO,IAAI,gBAA4D;AAAA,IACrE,UAAU,OAAO,YAAY;AAE3B,iBAAW,QAAQ,KAAK;AAGxB,YAAM,YAAY,MAAM;AACxB,cAAQ,WAAW;AAAA,QACjB,KAAK,aAAa;AAChB,gBAAM,EAAE,YAAY,cAAc,UAAU,MAAM,SAAS,IAAI;AAC/D,gBAAM,OAAO,QAAQ,QAAQ;AAC7B,cAAI,CAAC,QAAQ,CAAC,KAAK,QAAS;AAE5B,gBAAM,OAAO,MAAM,MAAM,QAAQ;AACjC,cAAI,KAAK,sBAAsB,EAAE,SAAS;AACxC,kBAAM,SAAS,KAAK,WAAW,UAAU,IAAI;AAC7C,gBAAI,CAAC,OAAO,SAAS;AACnB,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,QACE,2CACA,KAAK,UAAU,OAAO,MAAM,MAAM;AAAA,gBACpC,SAAS;AAAA,cACX,CAAC;AACD;AAAA,YACF;AAAA,UACF;AAEA,6BAAmB;AAAA,YACjB;AAAA,aACC,YAAY;AACX,kBAAI,CAAC,KAAK,QAAS;AAEnB,kBAAI;AACF,sBAAM,SAAS,MAAM,KAAK,QAAQ,MAAM,EAAE,YAAY,CAAC;AAEvD,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF,CAAC;AAAA,cACH,SAAS,OAAO;AACd,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,QAAQ,YAAY;AAAA,kBACpB,SAAS;AAAA,gBACX,CAAC;AAAA,cACH,UAAE;AACA,mCAAmB,OAAO,UAAU;AAAA,cACtC;AAAA,YACF,GAAG;AAAA,UACL;AACA;AAAA,QACF;AAAA;AAAA,QAGA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH;AAAA,QAEF,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ;AACZ,YAAM,QAAQ,IAAI,mBAAmB,OAAO,CAAC;AAAA,IAC/C;AAAA,EACF,CAAC;AACH;","names":[]}
|
package/package.json
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"conversational-ui",
|
|
30
30
|
"conversational-ai"
|
|
31
31
|
],
|
|
32
|
-
"version": "0.7.
|
|
32
|
+
"version": "0.7.15",
|
|
33
33
|
"license": "MIT",
|
|
34
34
|
"exports": {
|
|
35
35
|
".": {
|
|
@@ -121,8 +121,8 @@
|
|
|
121
121
|
"tsup": "8.3.5",
|
|
122
122
|
"tsx": "^4.19.2",
|
|
123
123
|
"@assistant-ui/tailwindcss-transformer": "0.1.0",
|
|
124
|
-
"@assistant-ui/
|
|
125
|
-
"@assistant-ui/
|
|
124
|
+
"@assistant-ui/tsconfig": "0.0.0",
|
|
125
|
+
"@assistant-ui/tsbuildutils": "^0.0.0"
|
|
126
126
|
},
|
|
127
127
|
"publishConfig": {
|
|
128
128
|
"access": "public",
|
|
@@ -11,24 +11,30 @@ export function assistantDecoderStream() {
|
|
|
11
11
|
| { id: string; name: string; argsText: string }
|
|
12
12
|
| undefined;
|
|
13
13
|
|
|
14
|
+
const endCurrentToolCall = (
|
|
15
|
+
controller: TransformStreamDefaultController<ToolResultStreamPart>,
|
|
16
|
+
) => {
|
|
17
|
+
if (!currentToolCall) return;
|
|
18
|
+
controller.enqueue({
|
|
19
|
+
type: "tool-call",
|
|
20
|
+
toolCallType: "function",
|
|
21
|
+
toolCallId: currentToolCall.id,
|
|
22
|
+
toolName: currentToolCall.name,
|
|
23
|
+
args: currentToolCall.argsText,
|
|
24
|
+
});
|
|
25
|
+
currentToolCall = undefined;
|
|
26
|
+
};
|
|
27
|
+
|
|
14
28
|
return new TransformStream<
|
|
15
29
|
StreamPart<AssistantStreamChunk>,
|
|
16
30
|
ToolResultStreamPart
|
|
17
31
|
>({
|
|
18
32
|
transform({ type, value }, controller) {
|
|
19
33
|
if (
|
|
20
|
-
currentToolCall &&
|
|
21
34
|
type !== AssistantStreamChunkType.ToolCallDelta &&
|
|
22
35
|
type !== AssistantStreamChunkType.Error
|
|
23
36
|
) {
|
|
24
|
-
controller
|
|
25
|
-
type: "tool-call",
|
|
26
|
-
toolCallType: "function",
|
|
27
|
-
toolCallId: currentToolCall.id,
|
|
28
|
-
toolName: currentToolCall.name,
|
|
29
|
-
args: currentToolCall.argsText,
|
|
30
|
-
});
|
|
31
|
-
currentToolCall = undefined;
|
|
37
|
+
endCurrentToolCall(controller);
|
|
32
38
|
}
|
|
33
39
|
|
|
34
40
|
switch (type) {
|
|
@@ -135,5 +141,8 @@ export function assistantDecoderStream() {
|
|
|
135
141
|
}
|
|
136
142
|
}
|
|
137
143
|
},
|
|
144
|
+
flush(controller) {
|
|
145
|
+
endCurrentToolCall(controller);
|
|
146
|
+
},
|
|
138
147
|
});
|
|
139
148
|
}
|
|
@@ -64,38 +64,38 @@ export function toolResultStream(
|
|
|
64
64
|
isError: true,
|
|
65
65
|
});
|
|
66
66
|
return;
|
|
67
|
-
} else {
|
|
68
|
-
toolCallExecutions.set(
|
|
69
|
-
toolCallId,
|
|
70
|
-
(async () => {
|
|
71
|
-
if (!tool.execute) return;
|
|
72
|
-
|
|
73
|
-
try {
|
|
74
|
-
const result = await tool.execute(args, { abortSignal });
|
|
75
|
-
|
|
76
|
-
controller.enqueue({
|
|
77
|
-
type: "tool-result",
|
|
78
|
-
toolCallType,
|
|
79
|
-
toolCallId,
|
|
80
|
-
toolName,
|
|
81
|
-
result,
|
|
82
|
-
});
|
|
83
|
-
} catch (error) {
|
|
84
|
-
controller.enqueue({
|
|
85
|
-
type: "tool-result",
|
|
86
|
-
toolCallType,
|
|
87
|
-
toolCallId,
|
|
88
|
-
toolName,
|
|
89
|
-
result: "Error: " + error,
|
|
90
|
-
isError: true,
|
|
91
|
-
});
|
|
92
|
-
} finally {
|
|
93
|
-
toolCallExecutions.delete(toolCallId);
|
|
94
|
-
}
|
|
95
|
-
})(),
|
|
96
|
-
);
|
|
97
67
|
}
|
|
98
68
|
}
|
|
69
|
+
|
|
70
|
+
toolCallExecutions.set(
|
|
71
|
+
toolCallId,
|
|
72
|
+
(async () => {
|
|
73
|
+
if (!tool.execute) return;
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
const result = await tool.execute(args, { abortSignal });
|
|
77
|
+
|
|
78
|
+
controller.enqueue({
|
|
79
|
+
type: "tool-result",
|
|
80
|
+
toolCallType,
|
|
81
|
+
toolCallId,
|
|
82
|
+
toolName,
|
|
83
|
+
result,
|
|
84
|
+
});
|
|
85
|
+
} catch (error) {
|
|
86
|
+
controller.enqueue({
|
|
87
|
+
type: "tool-result",
|
|
88
|
+
toolCallType,
|
|
89
|
+
toolCallId,
|
|
90
|
+
toolName,
|
|
91
|
+
result: "Error: " + error,
|
|
92
|
+
isError: true,
|
|
93
|
+
});
|
|
94
|
+
} finally {
|
|
95
|
+
toolCallExecutions.delete(toolCallId);
|
|
96
|
+
}
|
|
97
|
+
})(),
|
|
98
|
+
);
|
|
99
99
|
break;
|
|
100
100
|
}
|
|
101
101
|
|