@assistant-ui/react 0.7.12 → 0.7.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,4EAmIrC"}
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 (currentToolCall && type !== import_AssistantStreamChunkType.AssistantStreamChunkType.ToolCallDelta && type !== import_AssistantStreamChunkType.AssistantStreamChunkType.Error) {
33
- controller.enqueue({
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 return new TransformStream<\n StreamPart<AssistantStreamChunk>,\n ToolResultStreamPart\n >({\n transform({ type, value }, controller) {\n if (\n currentToolCall &&\n type !== AssistantStreamChunkType.ToolCallDelta &&\n type !== AssistantStreamChunkType.Error\n ) {\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 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 });\n}\n"],"mappings":"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","names":[]}
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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAGO;AAIA,SAAS,yBAAyB;AACvC,QAAM,gBAAgB,oBAAI,IAAoB;AAC9C,MAAI;AAIJ,QAAM,qBAAqB,CACzB,eACG;AACH,QAAI,CAAC,gBAAiB;AACtB,eAAW,QAAQ;AAAA,MACjB,MAAM;AAAA,MACN,cAAc;AAAA,MACd,YAAY,gBAAgB;AAAA,MAC5B,UAAU,gBAAgB;AAAA,MAC1B,MAAM,gBAAgB;AAAA,IACxB,CAAC;AACD,sBAAkB;AAAA,EACpB;AAEA,SAAO,IAAI,gBAGT;AAAA,IACA,UAAU,EAAE,MAAM,MAAM,GAAG,YAAY;AACrC,UACE,SAAS,yDAAyB,iBAClC,SAAS,yDAAyB,OAClC;AACA,2BAAmB,UAAU;AAAA,MAC/B;AAEA,cAAQ,MAAM;AAAA,QACZ,KAAK,yDAAyB,WAAW;AACvC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,WAAW;AAAA,UACb,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yDAAyB,eAAe;AAC3C,gBAAM,EAAE,YAAY,IAAI,UAAU,KAAK,IAAI;AAC3C,wBAAc,IAAI,IAAI,IAAI;AAE1B,4BAAkB,EAAE,IAAI,MAAM,UAAU,GAAG;AAE3C,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,eAAe;AAAA,UACjB,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yDAAyB,eAAe;AAC3C,gBAAM,EAAE,YAAY,cAAc,IAAI;AAEtC,gBAAM,WAAW,cAAc,IAAI,UAAU;AAC7C,cAAI,iBAAiB,OAAO,YAAY;AACtC,4BAAgB,YAAY;AAAA,UAC9B;AACA,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yDAAyB,gBAAgB;AAC5C,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd,YAAY,MAAM;AAAA,YAClB,UAAU,cAAc,IAAI,MAAM,UAAU;AAAA,YAC5C,QAAQ,MAAM;AAAA,UAChB,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yDAAyB,QAAQ;AACpC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,GAAG;AAAA,UACL,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yDAAyB,OAAO;AACnC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,yDAAyB,UAAU;AACtC,gBAAM,EAAE,YAAY,UAAU,KAAK,IAAI;AACvC,wBAAc,IAAI,YAAY,QAAQ;AAEtC,gBAAM,WAAW,KAAK,UAAU,IAAI;AACpC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd;AAAA,YACA;AAAA,YACA,eAAe;AAAA,UACjB,CAAC;AACD,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd;AAAA,YACA;AAAA,YACA,MAAM;AAAA,UACR,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,yDAAyB,YAAY;AACxC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,GAAG;AAAA,UACL,CAAC;AACD;AAAA,QACF;AAAA;AAAA,QAGA,KAAK,yDAAyB;AAC5B;AAAA,QAEF,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,YAAY;AAChB,yBAAmB,UAAU;AAAA,IAC/B;AAAA,EACF,CAAC;AACH;","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 (currentToolCall && type !== AssistantStreamChunkType.ToolCallDelta && type !== AssistantStreamChunkType.Error) {
11
- controller.enqueue({
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 return new TransformStream<\n StreamPart<AssistantStreamChunk>,\n ToolResultStreamPart\n >({\n transform({ type, value }, controller) {\n if (\n currentToolCall &&\n type !== AssistantStreamChunkType.ToolCallDelta &&\n type !== AssistantStreamChunkType.Error\n ) {\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 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 });\n}\n"],"mappings":";AAAA;AAAA,EAEE;AAAA,OACK;AAIA,SAAS,yBAAyB;AACvC,QAAM,gBAAgB,oBAAI,IAAoB;AAC9C,MAAI;AAIJ,SAAO,IAAI,gBAGT;AAAA,IACA,UAAU,EAAE,MAAM,MAAM,GAAG,YAAY;AACrC,UACE,mBACA,SAAS,yBAAyB,iBAClC,SAAS,yBAAyB,OAClC;AACA,mBAAW,QAAQ;AAAA,UACjB,MAAM;AAAA,UACN,cAAc;AAAA,UACd,YAAY,gBAAgB;AAAA,UAC5B,UAAU,gBAAgB;AAAA,UAC1B,MAAM,gBAAgB;AAAA,QACxB,CAAC;AACD,0BAAkB;AAAA,MACpB;AAEA,cAAQ,MAAM;AAAA,QACZ,KAAK,yBAAyB,WAAW;AACvC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,WAAW;AAAA,UACb,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yBAAyB,eAAe;AAC3C,gBAAM,EAAE,YAAY,IAAI,UAAU,KAAK,IAAI;AAC3C,wBAAc,IAAI,IAAI,IAAI;AAE1B,4BAAkB,EAAE,IAAI,MAAM,UAAU,GAAG;AAE3C,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,eAAe;AAAA,UACjB,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yBAAyB,eAAe;AAC3C,gBAAM,EAAE,YAAY,cAAc,IAAI;AAEtC,gBAAM,WAAW,cAAc,IAAI,UAAU;AAC7C,cAAI,iBAAiB,OAAO,YAAY;AACtC,4BAAgB,YAAY;AAAA,UAC9B;AACA,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yBAAyB,gBAAgB;AAC5C,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd,YAAY,MAAM;AAAA,YAClB,UAAU,cAAc,IAAI,MAAM,UAAU;AAAA,YAC5C,QAAQ,MAAM;AAAA,UAChB,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yBAAyB,QAAQ;AACpC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,GAAG;AAAA,UACL,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,yBAAyB,OAAO;AACnC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,yBAAyB,UAAU;AACtC,gBAAM,EAAE,YAAY,UAAU,KAAK,IAAI;AACvC,wBAAc,IAAI,YAAY,QAAQ;AAEtC,gBAAM,WAAW,KAAK,UAAU,IAAI;AACpC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd;AAAA,YACA;AAAA,YACA,eAAe;AAAA,UACjB,CAAC;AACD,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc;AAAA,YACd;AAAA,YACA;AAAA,YACA,MAAM;AAAA,UACR,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,yBAAyB,YAAY;AACxC,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,GAAG;AAAA,UACL,CAAC;AACD;AAAA,QACF;AAAA;AAAA,QAGA,KAAK,yBAAyB;AAC5B;AAAA,QAEF,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
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":[]}
package/package.json CHANGED
@@ -29,7 +29,7 @@
29
29
  "conversational-ui",
30
30
  "conversational-ai"
31
31
  ],
32
- "version": "0.7.12",
32
+ "version": "0.7.14",
33
33
  "license": "MIT",
34
34
  "exports": {
35
35
  ".": {
@@ -120,8 +120,8 @@
120
120
  "tailwindcss-animate": "^1.0.7",
121
121
  "tsup": "8.3.5",
122
122
  "tsx": "^4.19.2",
123
- "@assistant-ui/tailwindcss-transformer": "0.1.0",
124
123
  "@assistant-ui/tsbuildutils": "^0.0.0",
124
+ "@assistant-ui/tailwindcss-transformer": "0.1.0",
125
125
  "@assistant-ui/tsconfig": "0.0.0"
126
126
  },
127
127
  "publishConfig": {
@@ -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.enqueue({
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
  }