@assistant-ui/react 0.8.1 → 0.8.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/cloud/auiV0.d.ts +6 -0
- package/dist/cloud/auiV0.d.ts.map +1 -1
- package/dist/cloud/auiV0.js +2 -0
- package/dist/cloud/auiV0.js.map +1 -1
- package/dist/cloud/auiV0.mjs +2 -0
- package/dist/cloud/auiV0.mjs.map +1 -1
- package/dist/primitives/message/MessageContent.d.ts +3 -2
- package/dist/primitives/message/MessageContent.d.ts.map +1 -1
- package/dist/primitives/message/MessageContent.js +5 -1
- package/dist/primitives/message/MessageContent.js.map +1 -1
- package/dist/primitives/message/MessageContent.mjs +5 -1
- package/dist/primitives/message/MessageContent.mjs.map +1 -1
- package/dist/runtimes/edge/converters/toCoreMessages.d.ts.map +1 -1
- package/dist/runtimes/edge/converters/toCoreMessages.js +2 -1
- package/dist/runtimes/edge/converters/toCoreMessages.js.map +1 -1
- package/dist/runtimes/edge/converters/toCoreMessages.mjs +2 -1
- package/dist/runtimes/edge/converters/toCoreMessages.mjs.map +1 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts.map +1 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.js +2 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.js.map +1 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs +2 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs.map +1 -1
- package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts +8 -1
- package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts.map +1 -1
- package/dist/runtimes/edge/streams/AssistantStreamChunkType.js +1 -0
- package/dist/runtimes/edge/streams/AssistantStreamChunkType.js.map +1 -1
- package/dist/runtimes/edge/streams/AssistantStreamChunkType.mjs +1 -0
- package/dist/runtimes/edge/streams/AssistantStreamChunkType.mjs.map +1 -1
- package/dist/runtimes/edge/streams/assistantDecoderStream.d.ts.map +1 -1
- package/dist/runtimes/edge/streams/assistantDecoderStream.js +6 -0
- package/dist/runtimes/edge/streams/assistantDecoderStream.js.map +1 -1
- package/dist/runtimes/edge/streams/assistantDecoderStream.mjs +6 -0
- package/dist/runtimes/edge/streams/assistantDecoderStream.mjs.map +1 -1
- package/dist/runtimes/edge/streams/assistantEncoderStream.d.ts.map +1 -1
- package/dist/runtimes/edge/streams/assistantEncoderStream.js +6 -0
- package/dist/runtimes/edge/streams/assistantEncoderStream.js.map +1 -1
- package/dist/runtimes/edge/streams/assistantEncoderStream.mjs +6 -0
- package/dist/runtimes/edge/streams/assistantEncoderStream.mjs.map +1 -1
- package/dist/runtimes/edge/streams/runResultStream.d.ts.map +1 -1
- package/dist/runtimes/edge/streams/runResultStream.js +17 -0
- package/dist/runtimes/edge/streams/runResultStream.js.map +1 -1
- package/dist/runtimes/edge/streams/runResultStream.mjs +17 -0
- package/dist/runtimes/edge/streams/runResultStream.mjs.map +1 -1
- package/dist/runtimes/edge/streams/toolResultStream.d.ts +8 -0
- package/dist/runtimes/edge/streams/toolResultStream.d.ts.map +1 -1
- package/dist/runtimes/edge/streams/toolResultStream.js +1 -0
- package/dist/runtimes/edge/streams/toolResultStream.js.map +1 -1
- package/dist/runtimes/edge/streams/toolResultStream.mjs +1 -0
- package/dist/runtimes/edge/streams/toolResultStream.mjs.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.d.ts +2 -2
- package/dist/runtimes/external-store/ThreadMessageLike.d.ts.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.js +2 -0
- package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.mjs +2 -0
- package/dist/runtimes/external-store/ThreadMessageLike.mjs.map +1 -1
- package/dist/runtimes/local/ChatModelAdapter.d.ts +2 -2
- package/dist/runtimes/local/ChatModelAdapter.d.ts.map +1 -1
- package/dist/runtimes/local/ChatModelAdapter.js.map +1 -1
- package/dist/types/AssistantTypes.d.ts +9 -1
- package/dist/types/AssistantTypes.d.ts.map +1 -1
- package/dist/types/AssistantTypes.js.map +1 -1
- package/dist/types/ContentPartComponentTypes.d.ts +3 -1
- package/dist/types/ContentPartComponentTypes.d.ts.map +1 -1
- package/dist/types/ContentPartComponentTypes.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cloud/auiV0.ts +10 -0
- package/src/primitives/message/MessageContent.tsx +10 -2
- package/src/runtimes/edge/converters/toCoreMessages.ts +2 -1
- package/src/runtimes/edge/converters/toLanguageModelMessages.ts +3 -2
- package/src/runtimes/edge/streams/AssistantStreamChunkType.ts +7 -0
- package/src/runtimes/edge/streams/assistantDecoderStream.ts +7 -0
- package/src/runtimes/edge/streams/assistantEncoderStream.ts +7 -0
- package/src/runtimes/edge/streams/runResultStream.ts +25 -3
- package/src/runtimes/edge/streams/toolResultStream.ts +10 -0
- package/src/runtimes/external-store/ThreadMessageLike.tsx +10 -2
- package/src/runtimes/local/ChatModelAdapter.tsx +7 -1
- package/src/types/AssistantTypes.ts +11 -2
- package/src/types/ContentPartComponentTypes.tsx +4 -0
- package/src/types/index.ts +3 -0
@@ -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 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.FinishMessage: {\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.FinishStep: {\n controller.enqueue({\n type: \"step-finish\",\n ...value,\n });\n break;\n }\n\n case AssistantStreamChunkType.Annotation:\n controller.enqueue({\n type: \"annotations\",\n annotations: value,\n });\n break;\n\n case AssistantStreamChunkType.Data:\n controller.enqueue({\n type: \"data\",\n data: value,\n });\n break;\n\n // TODO\n case AssistantStreamChunkType.ReasoningDelta:\n case AssistantStreamChunkType.StartStep:\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":[]}
|
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.FinishMessage: {\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.FinishStep: {\n controller.enqueue({\n type: \"step-finish\",\n ...value,\n });\n break;\n }\n\n case AssistantStreamChunkType.Annotation:\n controller.enqueue({\n type: \"annotations\",\n annotations: value,\n });\n break;\n\n case AssistantStreamChunkType.Data:\n controller.enqueue({\n type: \"data\",\n data: value,\n });\n break;\n\n case AssistantStreamChunkType.Source:\n controller.enqueue({\n type: \"source\",\n source: value,\n });\n break;\n\n // TODO\n case AssistantStreamChunkType.ReasoningDelta:\n case AssistantStreamChunkType.StartStep:\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":[]}
|
@@ -120,6 +120,12 @@ function assistantDecoderStream() {
|
|
120
120
|
data: value
|
121
121
|
});
|
122
122
|
break;
|
123
|
+
case AssistantStreamChunkType.Source:
|
124
|
+
controller.enqueue({
|
125
|
+
type: "source",
|
126
|
+
source: value
|
127
|
+
});
|
128
|
+
break;
|
123
129
|
// TODO
|
124
130
|
case AssistantStreamChunkType.ReasoningDelta:
|
125
131
|
case AssistantStreamChunkType.StartStep:
|
@@ -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 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.FinishMessage: {\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.FinishStep: {\n controller.enqueue({\n type: \"step-finish\",\n ...value,\n });\n break;\n }\n\n case AssistantStreamChunkType.Annotation:\n controller.enqueue({\n type: \"annotations\",\n annotations: value,\n });\n break;\n\n case AssistantStreamChunkType.Data:\n controller.enqueue({\n type: \"data\",\n data: value,\n });\n break;\n\n // TODO\n case AssistantStreamChunkType.ReasoningDelta:\n case AssistantStreamChunkType.StartStep:\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":[]}
|
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.FinishMessage: {\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.FinishStep: {\n controller.enqueue({\n type: \"step-finish\",\n ...value,\n });\n break;\n }\n\n case AssistantStreamChunkType.Annotation:\n controller.enqueue({\n type: \"annotations\",\n annotations: value,\n });\n break;\n\n case AssistantStreamChunkType.Data:\n controller.enqueue({\n type: \"data\",\n data: value,\n });\n break;\n\n case AssistantStreamChunkType.Source:\n controller.enqueue({\n type: \"source\",\n source: value,\n });\n break;\n\n // TODO\n case AssistantStreamChunkType.ReasoningDelta:\n case AssistantStreamChunkType.StartStep:\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":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"assistantEncoderStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/assistantEncoderStream.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":"assistantEncoderStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/assistantEncoderStream.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,4EAsHrC"}
|
@@ -37,6 +37,12 @@ function assistantEncoderStream() {
|
|
37
37
|
});
|
38
38
|
break;
|
39
39
|
}
|
40
|
+
case "source":
|
41
|
+
controller.enqueue({
|
42
|
+
type: import_AssistantStreamChunkType.AssistantStreamChunkType.Source,
|
43
|
+
value: chunk.source
|
44
|
+
});
|
45
|
+
break;
|
40
46
|
case "text-delta": {
|
41
47
|
if (!chunk.textDelta) break;
|
42
48
|
controller.enqueue({
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/assistantEncoderStream.ts"],"sourcesContent":["import {\n AssistantStreamChunk,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { StreamPart } from \"./utils/StreamPart\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantEncoderStream() {\n const toolCalls = new Set<string>();\n return new TransformStream<\n ToolResultStreamPart,\n StreamPart<AssistantStreamChunk>\n >({\n transform(chunk, controller) {\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"reasoning\": {\n controller.enqueue({\n type: AssistantStreamChunkType.ReasoningDelta,\n value: chunk.textDelta,\n });\n break;\n }\n\n case \"text-delta\": {\n if (!chunk.textDelta) break; // ignore empty text deltas\n controller.enqueue({\n type: AssistantStreamChunkType.TextDelta,\n value: chunk.textDelta,\n });\n break;\n }\n case \"tool-call-delta\": {\n if (!toolCalls.has(chunk.toolCallId)) {\n toolCalls.add(chunk.toolCallId);\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallBegin,\n value: {\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n },\n });\n }\n\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallDelta,\n value: {\n toolCallId: chunk.toolCallId,\n argsTextDelta: chunk.argsTextDelta,\n },\n });\n break;\n }\n\n case \"annotations\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Annotation,\n value: chunk.annotations,\n });\n break;\n }\n\n case \"data\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Data,\n value: chunk.data,\n });\n break;\n }\n\n // ignore\n case \"tool-call\":\n case \"response-metadata\":\n break;\n\n case \"tool-result\": {\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallResult,\n value: {\n toolCallId: chunk.toolCallId,\n result: chunk.result,\n },\n });\n break;\n }\n\n case \"step-finish\": {\n const { type, ...rest } = chunk;\n controller.enqueue({\n type: AssistantStreamChunkType.FinishStep,\n value: rest,\n });\n break;\n }\n\n case \"finish\": {\n const { type, ...rest } = chunk;\n controller.enqueue({\n type: AssistantStreamChunkType.FinishMessage,\n value: rest,\n });\n break;\n }\n\n case \"error\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Error,\n value: chunk.error,\n });\n break;\n }\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAGO;AAIA,SAAS,yBAAyB;AACvC,QAAM,YAAY,oBAAI,IAAY;AAClC,SAAO,IAAI,gBAGT;AAAA,IACA,UAAU,OAAO,YAAY;AAC3B,YAAM,YAAY,MAAM;AACxB,cAAQ,WAAW;AAAA,QACjB,KAAK,aAAa;AAChB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,cAAc;AACjB,cAAI,CAAC,MAAM,UAAW;AACtB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,cAAI,CAAC,UAAU,IAAI,MAAM,UAAU,GAAG;AACpC,sBAAU,IAAI,MAAM,UAAU;AAC9B,uBAAW,QAAQ;AAAA,cACjB,MAAM,yDAAyB;AAAA,cAC/B,OAAO;AAAA,gBACL,YAAY,MAAM;AAAA,gBAClB,UAAU,MAAM;AAAA,cAClB;AAAA,YACF,CAAC;AAAA,UACH;AAEA,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO;AAAA,cACL,YAAY,MAAM;AAAA,cAClB,eAAe,MAAM;AAAA,YACvB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,QAAQ;AACX,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA;AAAA,QAGA,KAAK;AAAA,QACL,KAAK;AACH;AAAA,QAEF,KAAK,eAAe;AAClB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO;AAAA,cACL,YAAY,MAAM;AAAA,cAClB,QAAQ,MAAM;AAAA,YAChB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,gBAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,gBAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,SAAS;AACZ,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QACA,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/assistantEncoderStream.ts"],"sourcesContent":["import {\n AssistantStreamChunk,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { StreamPart } from \"./utils/StreamPart\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantEncoderStream() {\n const toolCalls = new Set<string>();\n return new TransformStream<\n ToolResultStreamPart,\n StreamPart<AssistantStreamChunk>\n >({\n transform(chunk, controller) {\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"reasoning\": {\n controller.enqueue({\n type: AssistantStreamChunkType.ReasoningDelta,\n value: chunk.textDelta,\n });\n break;\n }\n\n case \"source\":\n controller.enqueue({\n type: AssistantStreamChunkType.Source,\n value: chunk.source,\n });\n break;\n\n case \"text-delta\": {\n if (!chunk.textDelta) break; // ignore empty text deltas\n controller.enqueue({\n type: AssistantStreamChunkType.TextDelta,\n value: chunk.textDelta,\n });\n break;\n }\n case \"tool-call-delta\": {\n if (!toolCalls.has(chunk.toolCallId)) {\n toolCalls.add(chunk.toolCallId);\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallBegin,\n value: {\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n },\n });\n }\n\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallDelta,\n value: {\n toolCallId: chunk.toolCallId,\n argsTextDelta: chunk.argsTextDelta,\n },\n });\n break;\n }\n\n case \"annotations\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Annotation,\n value: chunk.annotations,\n });\n break;\n }\n\n case \"data\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Data,\n value: chunk.data,\n });\n break;\n }\n\n // ignore\n case \"tool-call\":\n case \"response-metadata\":\n break;\n\n case \"tool-result\": {\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallResult,\n value: {\n toolCallId: chunk.toolCallId,\n result: chunk.result,\n },\n });\n break;\n }\n\n case \"step-finish\": {\n const { type, ...rest } = chunk;\n controller.enqueue({\n type: AssistantStreamChunkType.FinishStep,\n value: rest,\n });\n break;\n }\n\n case \"finish\": {\n const { type, ...rest } = chunk;\n controller.enqueue({\n type: AssistantStreamChunkType.FinishMessage,\n value: rest,\n });\n break;\n }\n\n case \"error\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Error,\n value: chunk.error,\n });\n break;\n }\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAGO;AAIA,SAAS,yBAAyB;AACvC,QAAM,YAAY,oBAAI,IAAY;AAClC,SAAO,IAAI,gBAGT;AAAA,IACA,UAAU,OAAO,YAAY;AAC3B,YAAM,YAAY,MAAM;AACxB,cAAQ,WAAW;AAAA,QACjB,KAAK,aAAa;AAChB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK;AACH,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QAEF,KAAK,cAAc;AACjB,cAAI,CAAC,MAAM,UAAW;AACtB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,cAAI,CAAC,UAAU,IAAI,MAAM,UAAU,GAAG;AACpC,sBAAU,IAAI,MAAM,UAAU;AAC9B,uBAAW,QAAQ;AAAA,cACjB,MAAM,yDAAyB;AAAA,cAC/B,OAAO;AAAA,gBACL,YAAY,MAAM;AAAA,gBAClB,UAAU,MAAM;AAAA,cAClB;AAAA,YACF,CAAC;AAAA,UACH;AAEA,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO;AAAA,cACL,YAAY,MAAM;AAAA,cAClB,eAAe,MAAM;AAAA,YACvB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,QAAQ;AACX,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA;AAAA,QAGA,KAAK;AAAA,QACL,KAAK;AACH;AAAA,QAEF,KAAK,eAAe;AAClB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO;AAAA,cACL,YAAY,MAAM;AAAA,cAClB,QAAQ,MAAM;AAAA,YAChB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,gBAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,gBAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,SAAS;AACZ,qBAAW,QAAQ;AAAA,YACjB,MAAM,yDAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QACA,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
|
@@ -15,6 +15,12 @@ function assistantEncoderStream() {
|
|
15
15
|
});
|
16
16
|
break;
|
17
17
|
}
|
18
|
+
case "source":
|
19
|
+
controller.enqueue({
|
20
|
+
type: AssistantStreamChunkType.Source,
|
21
|
+
value: chunk.source
|
22
|
+
});
|
23
|
+
break;
|
18
24
|
case "text-delta": {
|
19
25
|
if (!chunk.textDelta) break;
|
20
26
|
controller.enqueue({
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/assistantEncoderStream.ts"],"sourcesContent":["import {\n AssistantStreamChunk,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { StreamPart } from \"./utils/StreamPart\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantEncoderStream() {\n const toolCalls = new Set<string>();\n return new TransformStream<\n ToolResultStreamPart,\n StreamPart<AssistantStreamChunk>\n >({\n transform(chunk, controller) {\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"reasoning\": {\n controller.enqueue({\n type: AssistantStreamChunkType.ReasoningDelta,\n value: chunk.textDelta,\n });\n break;\n }\n\n case \"text-delta\": {\n if (!chunk.textDelta) break; // ignore empty text deltas\n controller.enqueue({\n type: AssistantStreamChunkType.TextDelta,\n value: chunk.textDelta,\n });\n break;\n }\n case \"tool-call-delta\": {\n if (!toolCalls.has(chunk.toolCallId)) {\n toolCalls.add(chunk.toolCallId);\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallBegin,\n value: {\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n },\n });\n }\n\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallDelta,\n value: {\n toolCallId: chunk.toolCallId,\n argsTextDelta: chunk.argsTextDelta,\n },\n });\n break;\n }\n\n case \"annotations\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Annotation,\n value: chunk.annotations,\n });\n break;\n }\n\n case \"data\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Data,\n value: chunk.data,\n });\n break;\n }\n\n // ignore\n case \"tool-call\":\n case \"response-metadata\":\n break;\n\n case \"tool-result\": {\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallResult,\n value: {\n toolCallId: chunk.toolCallId,\n result: chunk.result,\n },\n });\n break;\n }\n\n case \"step-finish\": {\n const { type, ...rest } = chunk;\n controller.enqueue({\n type: AssistantStreamChunkType.FinishStep,\n value: rest,\n });\n break;\n }\n\n case \"finish\": {\n const { type, ...rest } = chunk;\n controller.enqueue({\n type: AssistantStreamChunkType.FinishMessage,\n value: rest,\n });\n break;\n }\n\n case \"error\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Error,\n value: chunk.error,\n });\n break;\n }\n default: {\n const unhandledType: never = chunkType;\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,YAAY,oBAAI,IAAY;AAClC,SAAO,IAAI,gBAGT;AAAA,IACA,UAAU,OAAO,YAAY;AAC3B,YAAM,YAAY,MAAM;AACxB,cAAQ,WAAW;AAAA,QACjB,KAAK,aAAa;AAChB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,cAAc;AACjB,cAAI,CAAC,MAAM,UAAW;AACtB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,cAAI,CAAC,UAAU,IAAI,MAAM,UAAU,GAAG;AACpC,sBAAU,IAAI,MAAM,UAAU;AAC9B,uBAAW,QAAQ;AAAA,cACjB,MAAM,yBAAyB;AAAA,cAC/B,OAAO;AAAA,gBACL,YAAY,MAAM;AAAA,gBAClB,UAAU,MAAM;AAAA,cAClB;AAAA,YACF,CAAC;AAAA,UACH;AAEA,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO;AAAA,cACL,YAAY,MAAM;AAAA,cAClB,eAAe,MAAM;AAAA,YACvB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,QAAQ;AACX,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA;AAAA,QAGA,KAAK;AAAA,QACL,KAAK;AACH;AAAA,QAEF,KAAK,eAAe;AAClB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO;AAAA,cACL,YAAY,MAAM;AAAA,cAClB,QAAQ,MAAM;AAAA,YAChB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,gBAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,gBAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,SAAS;AACZ,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QACA,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/assistantEncoderStream.ts"],"sourcesContent":["import {\n AssistantStreamChunk,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { StreamPart } from \"./utils/StreamPart\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantEncoderStream() {\n const toolCalls = new Set<string>();\n return new TransformStream<\n ToolResultStreamPart,\n StreamPart<AssistantStreamChunk>\n >({\n transform(chunk, controller) {\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"reasoning\": {\n controller.enqueue({\n type: AssistantStreamChunkType.ReasoningDelta,\n value: chunk.textDelta,\n });\n break;\n }\n\n case \"source\":\n controller.enqueue({\n type: AssistantStreamChunkType.Source,\n value: chunk.source,\n });\n break;\n\n case \"text-delta\": {\n if (!chunk.textDelta) break; // ignore empty text deltas\n controller.enqueue({\n type: AssistantStreamChunkType.TextDelta,\n value: chunk.textDelta,\n });\n break;\n }\n case \"tool-call-delta\": {\n if (!toolCalls.has(chunk.toolCallId)) {\n toolCalls.add(chunk.toolCallId);\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallBegin,\n value: {\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n },\n });\n }\n\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallDelta,\n value: {\n toolCallId: chunk.toolCallId,\n argsTextDelta: chunk.argsTextDelta,\n },\n });\n break;\n }\n\n case \"annotations\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Annotation,\n value: chunk.annotations,\n });\n break;\n }\n\n case \"data\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Data,\n value: chunk.data,\n });\n break;\n }\n\n // ignore\n case \"tool-call\":\n case \"response-metadata\":\n break;\n\n case \"tool-result\": {\n controller.enqueue({\n type: AssistantStreamChunkType.ToolCallResult,\n value: {\n toolCallId: chunk.toolCallId,\n result: chunk.result,\n },\n });\n break;\n }\n\n case \"step-finish\": {\n const { type, ...rest } = chunk;\n controller.enqueue({\n type: AssistantStreamChunkType.FinishStep,\n value: rest,\n });\n break;\n }\n\n case \"finish\": {\n const { type, ...rest } = chunk;\n controller.enqueue({\n type: AssistantStreamChunkType.FinishMessage,\n value: rest,\n });\n break;\n }\n\n case \"error\": {\n controller.enqueue({\n type: AssistantStreamChunkType.Error,\n value: chunk.error,\n });\n break;\n }\n default: {\n const unhandledType: never = chunkType;\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,YAAY,oBAAI,IAAY;AAClC,SAAO,IAAI,gBAGT;AAAA,IACA,UAAU,OAAO,YAAY;AAC3B,YAAM,YAAY,MAAM;AACxB,cAAQ,WAAW;AAAA,QACjB,KAAK,aAAa;AAChB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK;AACH,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QAEF,KAAK,cAAc;AACjB,cAAI,CAAC,MAAM,UAAW;AACtB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,cAAI,CAAC,UAAU,IAAI,MAAM,UAAU,GAAG;AACpC,sBAAU,IAAI,MAAM,UAAU;AAC9B,uBAAW,QAAQ;AAAA,cACjB,MAAM,yBAAyB;AAAA,cAC/B,OAAO;AAAA,gBACL,YAAY,MAAM;AAAA,gBAClB,UAAU,MAAM;AAAA,cAClB;AAAA,YACF,CAAC;AAAA,UACH;AAEA,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO;AAAA,cACL,YAAY,MAAM;AAAA,cAClB,eAAe,MAAM;AAAA,YACvB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,QAAQ;AACX,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA;AAAA,QAGA,KAAK;AAAA,QACL,KAAK;AACH;AAAA,QAEF,KAAK,eAAe;AAClB,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO;AAAA,cACL,YAAY,MAAM;AAAA,cAClB,QAAQ,MAAM;AAAA,YAChB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,gBAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,gBAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAAA,QAEA,KAAK,SAAS;AACZ,qBAAW,QAAQ;AAAA,YACjB,MAAM,yBAAyB;AAAA,YAC/B,OAAO,MAAM;AAAA,UACf,CAAC;AACD;AAAA,QACF;AAAA,QACA,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"runResultStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/runResultStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,wBAAgB,eAAe,
|
1
|
+
{"version":3,"file":"runResultStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/runResultStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,wBAAgB,eAAe,kEA+G9B"}
|
@@ -68,6 +68,11 @@ function runResultStream() {
|
|
68
68
|
controller.enqueue(message);
|
69
69
|
break;
|
70
70
|
}
|
71
|
+
case "source": {
|
72
|
+
message = appendSource(message, chunk);
|
73
|
+
controller.enqueue(message);
|
74
|
+
break;
|
75
|
+
}
|
71
76
|
case "tool-result": {
|
72
77
|
message = appendOrUpdateToolResult(
|
73
78
|
message,
|
@@ -262,6 +267,18 @@ var appendOrUpdateFinish = (message, chunk) => {
|
|
262
267
|
}
|
263
268
|
};
|
264
269
|
};
|
270
|
+
var appendSource = (message, chunk) => {
|
271
|
+
return {
|
272
|
+
...message,
|
273
|
+
content: [
|
274
|
+
...message.content,
|
275
|
+
{
|
276
|
+
type: "source",
|
277
|
+
...chunk.source
|
278
|
+
}
|
279
|
+
]
|
280
|
+
};
|
281
|
+
};
|
265
282
|
var getStatus = (chunk) => {
|
266
283
|
if (chunk.finishReason === "tool-calls") {
|
267
284
|
return {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/runResultStream.ts"],"sourcesContent":["import { CoreChatModelRunResult } from \"../../local/ChatModelAdapter\";\nimport { parsePartialJson } from \"../../../utils/json/parse-partial-json\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\nimport { MessageStatus, ToolCallContentPart } from \"../../../types\";\n\nexport function runResultStream() {\n let message: CoreChatModelRunResult = {\n content: [],\n status: { type: \"running\" },\n };\n\n return new TransformStream<ToolResultStreamPart, CoreChatModelRunResult>({\n transform(chunk, controller) {\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"reasoning\": {\n message = appendOrUpdateReasoning(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"text-delta\": {\n message = appendOrUpdateText(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call-delta\": {\n const { toolCallId, toolName, argsTextDelta } = chunk;\n\n message = appendOrUpdateToolCall(\n message,\n toolCallId,\n toolName,\n argsTextDelta,\n );\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call\":\n // ignoring tool call events because they are converted to tool-call-delta as well\n case \"response-metadata\":\n break;\n\n case \"annotations\": {\n message = appendAnnotations(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"data\": {\n message = appendData(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-result\": {\n message = appendOrUpdateToolResult(\n message,\n chunk.toolCallId,\n chunk.toolName,\n chunk.result,\n );\n controller.enqueue(message);\n break;\n }\n case \"step-finish\": {\n message = appendStepFinish(message, chunk);\n controller.enqueue(message);\n break;\n }\n case \"finish\": {\n message = appendOrUpdateFinish(message, chunk);\n controller.enqueue(message);\n break;\n }\n case \"error\": {\n if (\n chunk.error instanceof Error &&\n chunk.error.name === \"AbortError\"\n ) {\n message = appendOrUpdateCancel(message);\n controller.enqueue(message);\n break;\n } else {\n throw chunk.error;\n }\n }\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n flush(controller) {\n if (message.status?.type === \"running\") {\n const requiresAction = message.content?.at(-1)?.type === \"tool-call\";\n message = appendOrUpdateFinish(message, {\n type: \"finish\",\n finishReason: requiresAction ? \"tool-calls\" : \"unknown\",\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n },\n });\n controller.enqueue(message);\n }\n },\n });\n}\n\nconst appendOrUpdateReasoning= (\n message: CoreChatModelRunResult,\n textDelta: string,\n) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"reasoning\") {\n contentPart = { type: \"reasoning\", text: textDelta };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = { type: \"reasoning\", text: contentPart.text + textDelta };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateText = (\n message: CoreChatModelRunResult,\n textDelta: string,\n) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"text\") {\n contentPart = { type: \"text\", text: textDelta };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = { type: \"text\", text: contentPart.text + textDelta };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateToolCall = (\n message: CoreChatModelRunResult,\n toolCallId: string,\n toolName: string,\n argsTextDelta: string,\n): CoreChatModelRunResult => {\n let contentParts = message.content ?? [];\n const contentPartIdx = contentParts.findIndex(\n (c) => c.type === \"tool-call\" && c.toolCallId === toolCallId,\n );\n let contentPart =\n contentPartIdx === -1\n ? null\n : (contentParts[contentPartIdx] as ToolCallContentPart);\n\n if (contentPart == null) {\n contentPart = {\n type: \"tool-call\",\n toolCallId,\n toolName,\n argsText: argsTextDelta,\n args: argsTextDelta ? parsePartialJson(argsTextDelta) : {}, \n };\n contentParts = [...contentParts, contentPart];\n } else {\n const argsText = contentPart.argsText + argsTextDelta;\n contentPart = {\n ...contentPart,\n argsText,\n args: argsTextDelta ? parsePartialJson(argsText) : {}, \n };\n contentParts = [\n ...contentParts.slice(0, contentPartIdx),\n contentPart,\n ...contentParts.slice(contentPartIdx + 1),\n ];\n }\n\n return {\n ...message,\n content: contentParts,\n };\n};\n\nconst appendOrUpdateToolResult = (\n message: CoreChatModelRunResult,\n toolCallId: string,\n toolName: string,\n result: any,\n) => {\n let found = false;\n const newContentParts = message.content?.map((part) => {\n if (part.type !== \"tool-call\" || part.toolCallId !== toolCallId)\n return part;\n found = true;\n\n if (part.toolName !== toolName)\n throw new Error(\n `Tool call ${toolCallId} found with tool name ${part.toolName}, but expected ${toolName}`,\n );\n\n return {\n ...part,\n result,\n };\n });\n if (!found)\n throw new Error(\n `Received tool result for unknown tool call \"${toolName}\" / \"${toolCallId}\". This is likely an internal bug in assistant-ui.`,\n );\n\n return {\n ...message,\n content: newContentParts!,\n };\n};\n\nconst appendAnnotations = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"annotations\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n metadata: {\n ...message.metadata,\n unstable_annotations: [\n ...(message.metadata?.unstable_annotations ?? []),\n ...chunk.annotations,\n ],\n },\n };\n};\n\nconst appendData = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"data\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n metadata: {\n ...message.metadata,\n unstable_data: [\n ...(message.metadata?.unstable_data ?? []),\n ...chunk.data,\n ],\n },\n };\n};\n\nconst appendStepFinish = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"step-finish\" },\n): CoreChatModelRunResult => {\n const { type, ...rest } = chunk;\n const steps = [\n ...(message.metadata?.steps ?? []),\n {\n usage: rest.usage,\n },\n ];\n return {\n ...message,\n metadata: {\n ...message.metadata,\n steps,\n },\n };\n};\n\nconst appendOrUpdateFinish = (\n message: CoreChatModelRunResult,\n chunk: LanguageModelV1StreamPart & { type: \"finish\" },\n): CoreChatModelRunResult => {\n const { type, ...rest } = chunk;\n\n const steps = [\n ...(message.metadata?.steps ?? []),\n {\n logprobs: rest.logprobs,\n usage: rest.usage,\n },\n ];\n return {\n ...message,\n status: getStatus(chunk),\n metadata: {\n ...message.metadata,\n steps,\n },\n };\n};\n\nconst getStatus = (\n chunk:\n | (LanguageModelV1StreamPart & { type: \"finish\" })\n | (ToolResultStreamPart & { type: \"step-finish\" }),\n): MessageStatus => {\n if (chunk.finishReason === \"tool-calls\") {\n return {\n type: \"requires-action\",\n reason: \"tool-calls\",\n };\n } else if (\n chunk.finishReason === \"stop\" ||\n chunk.finishReason === \"unknown\"\n ) {\n return {\n type: \"complete\",\n reason: chunk.finishReason,\n };\n } else {\n return {\n type: \"incomplete\",\n reason: chunk.finishReason,\n };\n }\n};\n\nconst appendOrUpdateCancel = (\n message: CoreChatModelRunResult,\n): CoreChatModelRunResult => {\n return {\n ...message,\n status: {\n type: \"incomplete\",\n reason: \"cancelled\",\n },\n };\n};\n"],"mappings":"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","names":[]}
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/streams/runResultStream.ts"],"sourcesContent":["import { CoreChatModelRunResult } from \"../../local/ChatModelAdapter\";\nimport { parsePartialJson } from \"../../../utils/json/parse-partial-json\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\nimport { MessageStatus, ToolCallContentPart } from \"../../../types\";\n\nexport function runResultStream() {\n let message: CoreChatModelRunResult = {\n content: [],\n status: { type: \"running\" },\n };\n\n return new TransformStream<ToolResultStreamPart, CoreChatModelRunResult>({\n transform(chunk, controller) {\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"reasoning\": {\n message = appendOrUpdateReasoning(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"text-delta\": {\n message = appendOrUpdateText(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call-delta\": {\n const { toolCallId, toolName, argsTextDelta } = chunk;\n\n message = appendOrUpdateToolCall(\n message,\n toolCallId,\n toolName,\n argsTextDelta,\n );\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call\":\n // ignoring tool call events because they are converted to tool-call-delta as well\n case \"response-metadata\":\n break;\n\n case \"annotations\": {\n message = appendAnnotations(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"data\": {\n message = appendData(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"source\": {\n message = appendSource(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-result\": {\n message = appendOrUpdateToolResult(\n message,\n chunk.toolCallId,\n chunk.toolName,\n chunk.result,\n );\n controller.enqueue(message);\n break;\n }\n case \"step-finish\": {\n message = appendStepFinish(message, chunk);\n controller.enqueue(message);\n break;\n }\n case \"finish\": {\n message = appendOrUpdateFinish(message, chunk);\n controller.enqueue(message);\n break;\n }\n case \"error\": {\n if (\n chunk.error instanceof Error &&\n chunk.error.name === \"AbortError\"\n ) {\n message = appendOrUpdateCancel(message);\n controller.enqueue(message);\n break;\n } else {\n throw chunk.error;\n }\n }\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n flush(controller) {\n if (message.status?.type === \"running\") {\n const requiresAction = message.content?.at(-1)?.type === \"tool-call\";\n message = appendOrUpdateFinish(message, {\n type: \"finish\",\n finishReason: requiresAction ? \"tool-calls\" : \"unknown\",\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n },\n });\n controller.enqueue(message);\n }\n },\n });\n}\n\nconst appendOrUpdateReasoning = (\n message: CoreChatModelRunResult,\n textDelta: string,\n) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"reasoning\") {\n contentPart = { type: \"reasoning\", text: textDelta };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = { type: \"reasoning\", text: contentPart.text + textDelta };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateText = (\n message: CoreChatModelRunResult,\n textDelta: string,\n) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"text\") {\n contentPart = { type: \"text\", text: textDelta };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = { type: \"text\", text: contentPart.text + textDelta };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateToolCall = (\n message: CoreChatModelRunResult,\n toolCallId: string,\n toolName: string,\n argsTextDelta: string,\n): CoreChatModelRunResult => {\n let contentParts = message.content ?? [];\n const contentPartIdx = contentParts.findIndex(\n (c) => c.type === \"tool-call\" && c.toolCallId === toolCallId,\n );\n let contentPart =\n contentPartIdx === -1\n ? null\n : (contentParts[contentPartIdx] as ToolCallContentPart);\n\n if (contentPart == null) {\n contentPart = {\n type: \"tool-call\",\n toolCallId,\n toolName,\n argsText: argsTextDelta,\n args: argsTextDelta ? parsePartialJson(argsTextDelta) : {},\n };\n contentParts = [...contentParts, contentPart];\n } else {\n const argsText = contentPart.argsText + argsTextDelta;\n contentPart = {\n ...contentPart,\n argsText,\n args: argsTextDelta ? parsePartialJson(argsText) : {},\n };\n contentParts = [\n ...contentParts.slice(0, contentPartIdx),\n contentPart,\n ...contentParts.slice(contentPartIdx + 1),\n ];\n }\n\n return {\n ...message,\n content: contentParts,\n };\n};\n\nconst appendOrUpdateToolResult = (\n message: CoreChatModelRunResult,\n toolCallId: string,\n toolName: string,\n result: any,\n) => {\n let found = false;\n const newContentParts = message.content?.map((part) => {\n if (part.type !== \"tool-call\" || part.toolCallId !== toolCallId)\n return part;\n found = true;\n\n if (part.toolName !== toolName)\n throw new Error(\n `Tool call ${toolCallId} found with tool name ${part.toolName}, but expected ${toolName}`,\n );\n\n return {\n ...part,\n result,\n };\n });\n if (!found)\n throw new Error(\n `Received tool result for unknown tool call \"${toolName}\" / \"${toolCallId}\". This is likely an internal bug in assistant-ui.`,\n );\n\n return {\n ...message,\n content: newContentParts!,\n };\n};\n\nconst appendAnnotations = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"annotations\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n metadata: {\n ...message.metadata,\n unstable_annotations: [\n ...(message.metadata?.unstable_annotations ?? []),\n ...chunk.annotations,\n ],\n },\n };\n};\n\nconst appendData = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"data\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n metadata: {\n ...message.metadata,\n unstable_data: [\n ...(message.metadata?.unstable_data ?? []),\n ...chunk.data,\n ],\n },\n };\n};\n\nconst appendStepFinish = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"step-finish\" },\n): CoreChatModelRunResult => {\n const { type, ...rest } = chunk;\n const steps = [\n ...(message.metadata?.steps ?? []),\n {\n usage: rest.usage,\n },\n ];\n return {\n ...message,\n metadata: {\n ...message.metadata,\n steps,\n },\n };\n};\n\nconst appendOrUpdateFinish = (\n message: CoreChatModelRunResult,\n chunk: LanguageModelV1StreamPart & { type: \"finish\" },\n): CoreChatModelRunResult => {\n const { type, ...rest } = chunk;\n\n const steps = [\n ...(message.metadata?.steps ?? []),\n {\n logprobs: rest.logprobs,\n usage: rest.usage,\n },\n ];\n return {\n ...message,\n status: getStatus(chunk),\n metadata: {\n ...message.metadata,\n steps,\n },\n };\n};\n\nconst appendSource = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"source\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n content: [\n ...message.content,\n {\n type: \"source\",\n ...chunk.source,\n },\n ],\n };\n};\n\nconst getStatus = (\n chunk:\n | (LanguageModelV1StreamPart & { type: \"finish\" })\n | (ToolResultStreamPart & { type: \"step-finish\" }),\n): MessageStatus => {\n if (chunk.finishReason === \"tool-calls\") {\n return {\n type: \"requires-action\",\n reason: \"tool-calls\",\n };\n } else if (\n chunk.finishReason === \"stop\" ||\n chunk.finishReason === \"unknown\"\n ) {\n return {\n type: \"complete\",\n reason: chunk.finishReason,\n };\n } else {\n return {\n type: \"incomplete\",\n reason: chunk.finishReason,\n };\n }\n};\n\nconst appendOrUpdateCancel = (\n message: CoreChatModelRunResult,\n): CoreChatModelRunResult => {\n return {\n ...message,\n status: {\n type: \"incomplete\",\n reason: \"cancelled\",\n },\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gCAAiC;AAK1B,SAAS,kBAAkB;AAChC,MAAI,UAAkC;AAAA,IACpC,SAAS,CAAC;AAAA,IACV,QAAQ,EAAE,MAAM,UAAU;AAAA,EAC5B;AAEA,SAAO,IAAI,gBAA8D;AAAA,IACvE,UAAU,OAAO,YAAY;AAC3B,YAAM,YAAY,MAAM;AACxB,cAAQ,WAAW;AAAA,QACjB,KAAK,aAAa;AAChB,oBAAU,wBAAwB,SAAS,MAAM,SAAS;AAC1D,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,cAAc;AACjB,oBAAU,mBAAmB,SAAS,MAAM,SAAS;AACrD,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,mBAAmB;AACtB,gBAAM,EAAE,YAAY,UAAU,cAAc,IAAI;AAEhD,oBAAU;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK;AAAA;AAAA,QAEL,KAAK;AACH;AAAA,QAEF,KAAK,eAAe;AAClB,oBAAU,kBAAkB,SAAS,KAAK;AAC1C,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,QAAQ;AACX,oBAAU,WAAW,SAAS,KAAK;AACnC,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,oBAAU,aAAa,SAAS,KAAK;AACrC,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,oBAAU;AAAA,YACR;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AACA,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,eAAe;AAClB,oBAAU,iBAAiB,SAAS,KAAK;AACzC,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,oBAAU,qBAAqB,SAAS,KAAK;AAC7C,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,SAAS;AACZ,cACE,MAAM,iBAAiB,SACvB,MAAM,MAAM,SAAS,cACrB;AACA,sBAAU,qBAAqB,OAAO;AACtC,uBAAW,QAAQ,OAAO;AAC1B;AAAA,UACF,OAAO;AACL,kBAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,QACA,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,YAAY;AAChB,UAAI,QAAQ,QAAQ,SAAS,WAAW;AACtC,cAAM,iBAAiB,QAAQ,SAAS,GAAG,EAAE,GAAG,SAAS;AACzD,kBAAU,qBAAqB,SAAS;AAAA,UACtC,MAAM;AAAA,UACN,cAAc,iBAAiB,eAAe;AAAA,UAC9C,OAAO;AAAA,YACL,cAAc;AAAA,YACd,kBAAkB;AAAA,UACpB;AAAA,QACF,CAAC;AACD,mBAAW,QAAQ,OAAO;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,IAAM,0BAA0B,CAC9B,SACA,cACG;AACH,MAAI,eAAe,QAAQ,WAAW,CAAC;AACvC,MAAI,cAAc,QAAQ,SAAS,GAAG,EAAE;AACxC,MAAI,aAAa,SAAS,aAAa;AACrC,kBAAc,EAAE,MAAM,aAAa,MAAM,UAAU;AAAA,EACrD,OAAO;AACL,mBAAe,aAAa,MAAM,GAAG,EAAE;AACvC,kBAAc,EAAE,MAAM,aAAa,MAAM,YAAY,OAAO,UAAU;AAAA,EACxE;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,aAAa,OAAO,CAAC,WAAW,CAAC;AAAA,EAC5C;AACF;AAEA,IAAM,qBAAqB,CACzB,SACA,cACG;AACH,MAAI,eAAe,QAAQ,WAAW,CAAC;AACvC,MAAI,cAAc,QAAQ,SAAS,GAAG,EAAE;AACxC,MAAI,aAAa,SAAS,QAAQ;AAChC,kBAAc,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,EAChD,OAAO;AACL,mBAAe,aAAa,MAAM,GAAG,EAAE;AACvC,kBAAc,EAAE,MAAM,QAAQ,MAAM,YAAY,OAAO,UAAU;AAAA,EACnE;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,aAAa,OAAO,CAAC,WAAW,CAAC;AAAA,EAC5C;AACF;AAEA,IAAM,yBAAyB,CAC7B,SACA,YACA,UACA,kBAC2B;AAC3B,MAAI,eAAe,QAAQ,WAAW,CAAC;AACvC,QAAM,iBAAiB,aAAa;AAAA,IAClC,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,eAAe;AAAA,EACpD;AACA,MAAI,cACF,mBAAmB,KACf,OACC,aAAa,cAAc;AAElC,MAAI,eAAe,MAAM;AACvB,kBAAc;AAAA,MACZ,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,MAAM,oBAAgB,4CAAiB,aAAa,IAAI,CAAC;AAAA,IAC3D;AACA,mBAAe,CAAC,GAAG,cAAc,WAAW;AAAA,EAC9C,OAAO;AACL,UAAM,WAAW,YAAY,WAAW;AACxC,kBAAc;AAAA,MACZ,GAAG;AAAA,MACH;AAAA,MACA,MAAM,oBAAgB,4CAAiB,QAAQ,IAAI,CAAC;AAAA,IACtD;AACA,mBAAe;AAAA,MACb,GAAG,aAAa,MAAM,GAAG,cAAc;AAAA,MACvC;AAAA,MACA,GAAG,aAAa,MAAM,iBAAiB,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,EACX;AACF;AAEA,IAAM,2BAA2B,CAC/B,SACA,YACA,UACA,WACG;AACH,MAAI,QAAQ;AACZ,QAAM,kBAAkB,QAAQ,SAAS,IAAI,CAAC,SAAS;AACrD,QAAI,KAAK,SAAS,eAAe,KAAK,eAAe;AACnD,aAAO;AACT,YAAQ;AAER,QAAI,KAAK,aAAa;AACpB,YAAM,IAAI;AAAA,QACR,aAAa,UAAU,yBAAyB,KAAK,QAAQ,kBAAkB,QAAQ;AAAA,MACzF;AAEF,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACD,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR,+CAA+C,QAAQ,QAAQ,UAAU;AAAA,IAC3E;AAEF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,EACX;AACF;AAEA,IAAM,oBAAoB,CACxB,SACA,UAC2B;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,MACR,GAAG,QAAQ;AAAA,MACX,sBAAsB;AAAA,QACpB,GAAI,QAAQ,UAAU,wBAAwB,CAAC;AAAA,QAC/C,GAAG,MAAM;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,aAAa,CACjB,SACA,UAC2B;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,MACR,GAAG,QAAQ;AAAA,MACX,eAAe;AAAA,QACb,GAAI,QAAQ,UAAU,iBAAiB,CAAC;AAAA,QACxC,GAAG,MAAM;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,mBAAmB,CACvB,SACA,UAC2B;AAC3B,QAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,QAAM,QAAQ;AAAA,IACZ,GAAI,QAAQ,UAAU,SAAS,CAAC;AAAA,IAChC;AAAA,MACE,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,MACR,GAAG,QAAQ;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,uBAAuB,CAC3B,SACA,UAC2B;AAC3B,QAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAE1B,QAAM,QAAQ;AAAA,IACZ,GAAI,QAAQ,UAAU,SAAS,CAAC;AAAA,IAChC;AAAA,MACE,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ,UAAU,KAAK;AAAA,IACvB,UAAU;AAAA,MACR,GAAG,QAAQ;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,eAAe,CACnB,SACA,UAC2B;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,MACP,GAAG,QAAQ;AAAA,MACX;AAAA,QACE,MAAM;AAAA,QACN,GAAG,MAAM;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,YAAY,CAChB,UAGkB;AAClB,MAAI,MAAM,iBAAiB,cAAc;AACvC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF,WACE,MAAM,iBAAiB,UACvB,MAAM,iBAAiB,WACvB;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF,OAAO;AACL,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF;AACF;AAEA,IAAM,uBAAuB,CAC3B,YAC2B;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF;AACF;","names":[]}
|
@@ -44,6 +44,11 @@ function runResultStream() {
|
|
44
44
|
controller.enqueue(message);
|
45
45
|
break;
|
46
46
|
}
|
47
|
+
case "source": {
|
48
|
+
message = appendSource(message, chunk);
|
49
|
+
controller.enqueue(message);
|
50
|
+
break;
|
51
|
+
}
|
47
52
|
case "tool-result": {
|
48
53
|
message = appendOrUpdateToolResult(
|
49
54
|
message,
|
@@ -238,6 +243,18 @@ var appendOrUpdateFinish = (message, chunk) => {
|
|
238
243
|
}
|
239
244
|
};
|
240
245
|
};
|
246
|
+
var appendSource = (message, chunk) => {
|
247
|
+
return {
|
248
|
+
...message,
|
249
|
+
content: [
|
250
|
+
...message.content,
|
251
|
+
{
|
252
|
+
type: "source",
|
253
|
+
...chunk.source
|
254
|
+
}
|
255
|
+
]
|
256
|
+
};
|
257
|
+
};
|
241
258
|
var getStatus = (chunk) => {
|
242
259
|
if (chunk.finishReason === "tool-calls") {
|
243
260
|
return {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/runResultStream.ts"],"sourcesContent":["import { CoreChatModelRunResult } from \"../../local/ChatModelAdapter\";\nimport { parsePartialJson } from \"../../../utils/json/parse-partial-json\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\nimport { MessageStatus, ToolCallContentPart } from \"../../../types\";\n\nexport function runResultStream() {\n let message: CoreChatModelRunResult = {\n content: [],\n status: { type: \"running\" },\n };\n\n return new TransformStream<ToolResultStreamPart, CoreChatModelRunResult>({\n transform(chunk, controller) {\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"reasoning\": {\n message = appendOrUpdateReasoning(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"text-delta\": {\n message = appendOrUpdateText(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call-delta\": {\n const { toolCallId, toolName, argsTextDelta } = chunk;\n\n message = appendOrUpdateToolCall(\n message,\n toolCallId,\n toolName,\n argsTextDelta,\n );\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call\":\n // ignoring tool call events because they are converted to tool-call-delta as well\n case \"response-metadata\":\n break;\n\n case \"annotations\": {\n message = appendAnnotations(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"data\": {\n message = appendData(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-result\": {\n message = appendOrUpdateToolResult(\n message,\n chunk.toolCallId,\n chunk.toolName,\n chunk.result,\n );\n controller.enqueue(message);\n break;\n }\n case \"step-finish\": {\n message = appendStepFinish(message, chunk);\n controller.enqueue(message);\n break;\n }\n case \"finish\": {\n message = appendOrUpdateFinish(message, chunk);\n controller.enqueue(message);\n break;\n }\n case \"error\": {\n if (\n chunk.error instanceof Error &&\n chunk.error.name === \"AbortError\"\n ) {\n message = appendOrUpdateCancel(message);\n controller.enqueue(message);\n break;\n } else {\n throw chunk.error;\n }\n }\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n flush(controller) {\n if (message.status?.type === \"running\") {\n const requiresAction = message.content?.at(-1)?.type === \"tool-call\";\n message = appendOrUpdateFinish(message, {\n type: \"finish\",\n finishReason: requiresAction ? \"tool-calls\" : \"unknown\",\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n },\n });\n controller.enqueue(message);\n }\n },\n });\n}\n\nconst appendOrUpdateReasoning= (\n message: CoreChatModelRunResult,\n textDelta: string,\n) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"reasoning\") {\n contentPart = { type: \"reasoning\", text: textDelta };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = { type: \"reasoning\", text: contentPart.text + textDelta };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateText = (\n message: CoreChatModelRunResult,\n textDelta: string,\n) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"text\") {\n contentPart = { type: \"text\", text: textDelta };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = { type: \"text\", text: contentPart.text + textDelta };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateToolCall = (\n message: CoreChatModelRunResult,\n toolCallId: string,\n toolName: string,\n argsTextDelta: string,\n): CoreChatModelRunResult => {\n let contentParts = message.content ?? [];\n const contentPartIdx = contentParts.findIndex(\n (c) => c.type === \"tool-call\" && c.toolCallId === toolCallId,\n );\n let contentPart =\n contentPartIdx === -1\n ? null\n : (contentParts[contentPartIdx] as ToolCallContentPart);\n\n if (contentPart == null) {\n contentPart = {\n type: \"tool-call\",\n toolCallId,\n toolName,\n argsText: argsTextDelta,\n args: argsTextDelta ? parsePartialJson(argsTextDelta) : {}, \n };\n contentParts = [...contentParts, contentPart];\n } else {\n const argsText = contentPart.argsText + argsTextDelta;\n contentPart = {\n ...contentPart,\n argsText,\n args: argsTextDelta ? parsePartialJson(argsText) : {}, \n };\n contentParts = [\n ...contentParts.slice(0, contentPartIdx),\n contentPart,\n ...contentParts.slice(contentPartIdx + 1),\n ];\n }\n\n return {\n ...message,\n content: contentParts,\n };\n};\n\nconst appendOrUpdateToolResult = (\n message: CoreChatModelRunResult,\n toolCallId: string,\n toolName: string,\n result: any,\n) => {\n let found = false;\n const newContentParts = message.content?.map((part) => {\n if (part.type !== \"tool-call\" || part.toolCallId !== toolCallId)\n return part;\n found = true;\n\n if (part.toolName !== toolName)\n throw new Error(\n `Tool call ${toolCallId} found with tool name ${part.toolName}, but expected ${toolName}`,\n );\n\n return {\n ...part,\n result,\n };\n });\n if (!found)\n throw new Error(\n `Received tool result for unknown tool call \"${toolName}\" / \"${toolCallId}\". This is likely an internal bug in assistant-ui.`,\n );\n\n return {\n ...message,\n content: newContentParts!,\n };\n};\n\nconst appendAnnotations = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"annotations\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n metadata: {\n ...message.metadata,\n unstable_annotations: [\n ...(message.metadata?.unstable_annotations ?? []),\n ...chunk.annotations,\n ],\n },\n };\n};\n\nconst appendData = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"data\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n metadata: {\n ...message.metadata,\n unstable_data: [\n ...(message.metadata?.unstable_data ?? []),\n ...chunk.data,\n ],\n },\n };\n};\n\nconst appendStepFinish = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"step-finish\" },\n): CoreChatModelRunResult => {\n const { type, ...rest } = chunk;\n const steps = [\n ...(message.metadata?.steps ?? []),\n {\n usage: rest.usage,\n },\n ];\n return {\n ...message,\n metadata: {\n ...message.metadata,\n steps,\n },\n };\n};\n\nconst appendOrUpdateFinish = (\n message: CoreChatModelRunResult,\n chunk: LanguageModelV1StreamPart & { type: \"finish\" },\n): CoreChatModelRunResult => {\n const { type, ...rest } = chunk;\n\n const steps = [\n ...(message.metadata?.steps ?? []),\n {\n logprobs: rest.logprobs,\n usage: rest.usage,\n },\n ];\n return {\n ...message,\n status: getStatus(chunk),\n metadata: {\n ...message.metadata,\n steps,\n },\n };\n};\n\nconst getStatus = (\n chunk:\n | (LanguageModelV1StreamPart & { type: \"finish\" })\n | (ToolResultStreamPart & { type: \"step-finish\" }),\n): MessageStatus => {\n if (chunk.finishReason === \"tool-calls\") {\n return {\n type: \"requires-action\",\n reason: \"tool-calls\",\n };\n } else if (\n chunk.finishReason === \"stop\" ||\n chunk.finishReason === \"unknown\"\n ) {\n return {\n type: \"complete\",\n reason: chunk.finishReason,\n };\n } else {\n return {\n type: \"incomplete\",\n reason: chunk.finishReason,\n };\n }\n};\n\nconst appendOrUpdateCancel = (\n message: CoreChatModelRunResult,\n): CoreChatModelRunResult => {\n return {\n ...message,\n status: {\n type: \"incomplete\",\n reason: \"cancelled\",\n },\n };\n};\n"],"mappings":";AACA,SAAS,wBAAwB;AAK1B,SAAS,kBAAkB;AAChC,MAAI,UAAkC;AAAA,IACpC,SAAS,CAAC;AAAA,IACV,QAAQ,EAAE,MAAM,UAAU;AAAA,EAC5B;AAEA,SAAO,IAAI,gBAA8D;AAAA,IACvE,UAAU,OAAO,YAAY;AAC3B,YAAM,YAAY,MAAM;AACxB,cAAQ,WAAW;AAAA,QACjB,KAAK,aAAa;AAChB,oBAAU,wBAAwB,SAAS,MAAM,SAAS;AAC1D,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,cAAc;AACjB,oBAAU,mBAAmB,SAAS,MAAM,SAAS;AACrD,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,mBAAmB;AACtB,gBAAM,EAAE,YAAY,UAAU,cAAc,IAAI;AAEhD,oBAAU;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK;AAAA;AAAA,QAEL,KAAK;AACH;AAAA,QAEF,KAAK,eAAe;AAClB,oBAAU,kBAAkB,SAAS,KAAK;AAC1C,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,QAAQ;AACX,oBAAU,WAAW,SAAS,KAAK;AACnC,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QAEA,KAAK,eAAe;AAClB,oBAAU;AAAA,YACR;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AACA,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,eAAe;AAClB,oBAAU,iBAAiB,SAAS,KAAK;AACzC,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,oBAAU,qBAAqB,SAAS,KAAK;AAC7C,qBAAW,QAAQ,OAAO;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,SAAS;AACZ,cACE,MAAM,iBAAiB,SACvB,MAAM,MAAM,SAAS,cACrB;AACA,sBAAU,qBAAqB,OAAO;AACtC,uBAAW,QAAQ,OAAO;AAC1B;AAAA,UACF,OAAO;AACL,kBAAM,MAAM;AAAA,UACd;AAAA,QACF;AAAA,QACA,SAAS;AACP,gBAAM,gBAAuB;AAC7B,gBAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,YAAY;AAChB,UAAI,QAAQ,QAAQ,SAAS,WAAW;AACtC,cAAM,iBAAiB,QAAQ,SAAS,GAAG,EAAE,GAAG,SAAS;AACzD,kBAAU,qBAAqB,SAAS;AAAA,UACtC,MAAM;AAAA,UACN,cAAc,iBAAiB,eAAe;AAAA,UAC9C,OAAO;AAAA,YACL,cAAc;AAAA,YACd,kBAAkB;AAAA,UACpB;AAAA,QACF,CAAC;AACD,mBAAW,QAAQ,OAAO;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,IAAM,0BAAyB,CAC7B,SACA,cACG;AACH,MAAI,eAAe,QAAQ,WAAW,CAAC;AACvC,MAAI,cAAc,QAAQ,SAAS,GAAG,EAAE;AACxC,MAAI,aAAa,SAAS,aAAa;AACrC,kBAAc,EAAE,MAAM,aAAa,MAAM,UAAU;AAAA,EACrD,OAAO;AACL,mBAAe,aAAa,MAAM,GAAG,EAAE;AACvC,kBAAc,EAAE,MAAM,aAAa,MAAM,YAAY,OAAO,UAAU;AAAA,EACxE;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,aAAa,OAAO,CAAC,WAAW,CAAC;AAAA,EAC5C;AACF;AAEA,IAAM,qBAAqB,CACzB,SACA,cACG;AACH,MAAI,eAAe,QAAQ,WAAW,CAAC;AACvC,MAAI,cAAc,QAAQ,SAAS,GAAG,EAAE;AACxC,MAAI,aAAa,SAAS,QAAQ;AAChC,kBAAc,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,EAChD,OAAO;AACL,mBAAe,aAAa,MAAM,GAAG,EAAE;AACvC,kBAAc,EAAE,MAAM,QAAQ,MAAM,YAAY,OAAO,UAAU;AAAA,EACnE;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,aAAa,OAAO,CAAC,WAAW,CAAC;AAAA,EAC5C;AACF;AAEA,IAAM,yBAAyB,CAC7B,SACA,YACA,UACA,kBAC2B;AAC3B,MAAI,eAAe,QAAQ,WAAW,CAAC;AACvC,QAAM,iBAAiB,aAAa;AAAA,IAClC,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,eAAe;AAAA,EACpD;AACA,MAAI,cACF,mBAAmB,KACf,OACC,aAAa,cAAc;AAElC,MAAI,eAAe,MAAM;AACvB,kBAAc;AAAA,MACZ,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,MAAM,gBAAgB,iBAAiB,aAAa,IAAI,CAAC;AAAA,IAC3D;AACA,mBAAe,CAAC,GAAG,cAAc,WAAW;AAAA,EAC9C,OAAO;AACL,UAAM,WAAW,YAAY,WAAW;AACxC,kBAAc;AAAA,MACZ,GAAG;AAAA,MACH;AAAA,MACA,MAAM,gBAAgB,iBAAiB,QAAQ,IAAI,CAAC;AAAA,IACtD;AACA,mBAAe;AAAA,MACb,GAAG,aAAa,MAAM,GAAG,cAAc;AAAA,MACvC;AAAA,MACA,GAAG,aAAa,MAAM,iBAAiB,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,EACX;AACF;AAEA,IAAM,2BAA2B,CAC/B,SACA,YACA,UACA,WACG;AACH,MAAI,QAAQ;AACZ,QAAM,kBAAkB,QAAQ,SAAS,IAAI,CAAC,SAAS;AACrD,QAAI,KAAK,SAAS,eAAe,KAAK,eAAe;AACnD,aAAO;AACT,YAAQ;AAER,QAAI,KAAK,aAAa;AACpB,YAAM,IAAI;AAAA,QACR,aAAa,UAAU,yBAAyB,KAAK,QAAQ,kBAAkB,QAAQ;AAAA,MACzF;AAEF,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACD,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR,+CAA+C,QAAQ,QAAQ,UAAU;AAAA,IAC3E;AAEF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,EACX;AACF;AAEA,IAAM,oBAAoB,CACxB,SACA,UAC2B;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,MACR,GAAG,QAAQ;AAAA,MACX,sBAAsB;AAAA,QACpB,GAAI,QAAQ,UAAU,wBAAwB,CAAC;AAAA,QAC/C,GAAG,MAAM;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,aAAa,CACjB,SACA,UAC2B;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,MACR,GAAG,QAAQ;AAAA,MACX,eAAe;AAAA,QACb,GAAI,QAAQ,UAAU,iBAAiB,CAAC;AAAA,QACxC,GAAG,MAAM;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,mBAAmB,CACvB,SACA,UAC2B;AAC3B,QAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAC1B,QAAM,QAAQ;AAAA,IACZ,GAAI,QAAQ,UAAU,SAAS,CAAC;AAAA,IAChC;AAAA,MACE,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,MACR,GAAG,QAAQ;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,uBAAuB,CAC3B,SACA,UAC2B;AAC3B,QAAM,EAAE,MAAM,GAAG,KAAK,IAAI;AAE1B,QAAM,QAAQ;AAAA,IACZ,GAAI,QAAQ,UAAU,SAAS,CAAC;AAAA,IAChC;AAAA,MACE,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ,UAAU,KAAK;AAAA,IACvB,UAAU;AAAA,MACR,GAAG,QAAQ;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,YAAY,CAChB,UAGkB;AAClB,MAAI,MAAM,iBAAiB,cAAc;AACvC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF,WACE,MAAM,iBAAiB,UACvB,MAAM,iBAAiB,WACvB;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF,OAAO;AACL,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF;AACF;AAEA,IAAM,uBAAuB,CAC3B,YAC2B;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF;AACF;","names":[]}
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/streams/runResultStream.ts"],"sourcesContent":["import { CoreChatModelRunResult } from \"../../local/ChatModelAdapter\";\nimport { parsePartialJson } from \"../../../utils/json/parse-partial-json\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\nimport { MessageStatus, ToolCallContentPart } from \"../../../types\";\n\nexport function runResultStream() {\n let message: CoreChatModelRunResult = {\n content: [],\n status: { type: \"running\" },\n };\n\n return new TransformStream<ToolResultStreamPart, CoreChatModelRunResult>({\n transform(chunk, controller) {\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"reasoning\": {\n message = appendOrUpdateReasoning(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"text-delta\": {\n message = appendOrUpdateText(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call-delta\": {\n const { toolCallId, toolName, argsTextDelta } = chunk;\n\n message = appendOrUpdateToolCall(\n message,\n toolCallId,\n toolName,\n argsTextDelta,\n );\n controller.enqueue(message);\n break;\n }\n\n case \"tool-call\":\n // ignoring tool call events because they are converted to tool-call-delta as well\n case \"response-metadata\":\n break;\n\n case \"annotations\": {\n message = appendAnnotations(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"data\": {\n message = appendData(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"source\": {\n message = appendSource(message, chunk);\n controller.enqueue(message);\n break;\n }\n\n case \"tool-result\": {\n message = appendOrUpdateToolResult(\n message,\n chunk.toolCallId,\n chunk.toolName,\n chunk.result,\n );\n controller.enqueue(message);\n break;\n }\n case \"step-finish\": {\n message = appendStepFinish(message, chunk);\n controller.enqueue(message);\n break;\n }\n case \"finish\": {\n message = appendOrUpdateFinish(message, chunk);\n controller.enqueue(message);\n break;\n }\n case \"error\": {\n if (\n chunk.error instanceof Error &&\n chunk.error.name === \"AbortError\"\n ) {\n message = appendOrUpdateCancel(message);\n controller.enqueue(message);\n break;\n } else {\n throw chunk.error;\n }\n }\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n flush(controller) {\n if (message.status?.type === \"running\") {\n const requiresAction = message.content?.at(-1)?.type === \"tool-call\";\n message = appendOrUpdateFinish(message, {\n type: \"finish\",\n finishReason: requiresAction ? \"tool-calls\" : \"unknown\",\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n },\n });\n controller.enqueue(message);\n }\n },\n });\n}\n\nconst appendOrUpdateReasoning = (\n message: CoreChatModelRunResult,\n textDelta: string,\n) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"reasoning\") {\n contentPart = { type: \"reasoning\", text: textDelta };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = { type: \"reasoning\", text: contentPart.text + textDelta };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateText = (\n message: CoreChatModelRunResult,\n textDelta: string,\n) => {\n let contentParts = message.content ?? [];\n let contentPart = message.content?.at(-1);\n if (contentPart?.type !== \"text\") {\n contentPart = { type: \"text\", text: textDelta };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = { type: \"text\", text: contentPart.text + textDelta };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateToolCall = (\n message: CoreChatModelRunResult,\n toolCallId: string,\n toolName: string,\n argsTextDelta: string,\n): CoreChatModelRunResult => {\n let contentParts = message.content ?? [];\n const contentPartIdx = contentParts.findIndex(\n (c) => c.type === \"tool-call\" && c.toolCallId === toolCallId,\n );\n let contentPart =\n contentPartIdx === -1\n ? null\n : (contentParts[contentPartIdx] as ToolCallContentPart);\n\n if (contentPart == null) {\n contentPart = {\n type: \"tool-call\",\n toolCallId,\n toolName,\n argsText: argsTextDelta,\n args: argsTextDelta ? parsePartialJson(argsTextDelta) : {},\n };\n contentParts = [...contentParts, contentPart];\n } else {\n const argsText = contentPart.argsText + argsTextDelta;\n contentPart = {\n ...contentPart,\n argsText,\n args: argsTextDelta ? parsePartialJson(argsText) : {},\n };\n contentParts = [\n ...contentParts.slice(0, contentPartIdx),\n contentPart,\n ...contentParts.slice(contentPartIdx + 1),\n ];\n }\n\n return {\n ...message,\n content: contentParts,\n };\n};\n\nconst appendOrUpdateToolResult = (\n message: CoreChatModelRunResult,\n toolCallId: string,\n toolName: string,\n result: any,\n) => {\n let found = false;\n const newContentParts = message.content?.map((part) => {\n if (part.type !== \"tool-call\" || part.toolCallId !== toolCallId)\n return part;\n found = true;\n\n if (part.toolName !== toolName)\n throw new Error(\n `Tool call ${toolCallId} found with tool name ${part.toolName}, but expected ${toolName}`,\n );\n\n return {\n ...part,\n result,\n };\n });\n if (!found)\n throw new Error(\n `Received tool result for unknown tool call \"${toolName}\" / \"${toolCallId}\". This is likely an internal bug in assistant-ui.`,\n );\n\n return {\n ...message,\n content: newContentParts!,\n };\n};\n\nconst appendAnnotations = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"annotations\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n metadata: {\n ...message.metadata,\n unstable_annotations: [\n ...(message.metadata?.unstable_annotations ?? []),\n ...chunk.annotations,\n ],\n },\n };\n};\n\nconst appendData = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"data\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n metadata: {\n ...message.metadata,\n unstable_data: [\n ...(message.metadata?.unstable_data ?? []),\n ...chunk.data,\n ],\n },\n };\n};\n\nconst appendStepFinish = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"step-finish\" },\n): CoreChatModelRunResult => {\n const { type, ...rest } = chunk;\n const steps = [\n ...(message.metadata?.steps ?? []),\n {\n usage: rest.usage,\n },\n ];\n return {\n ...message,\n metadata: {\n ...message.metadata,\n steps,\n },\n };\n};\n\nconst appendOrUpdateFinish = (\n message: CoreChatModelRunResult,\n chunk: LanguageModelV1StreamPart & { type: \"finish\" },\n): CoreChatModelRunResult => {\n const { type, ...rest } = chunk;\n\n const steps = [\n ...(message.metadata?.steps ?? []),\n {\n logprobs: rest.logprobs,\n usage: rest.usage,\n },\n ];\n return {\n ...message,\n status: getStatus(chunk),\n metadata: {\n ...message.metadata,\n steps,\n },\n };\n};\n\nconst appendSource = (\n message: CoreChatModelRunResult,\n chunk: ToolResultStreamPart & { type: \"source\" },\n): CoreChatModelRunResult => {\n return {\n ...message,\n content: [\n ...message.content,\n {\n type: \"source\",\n ...chunk.source,\n },\n ],\n };\n};\n\nconst getStatus = (\n chunk:\n | (LanguageModelV1StreamPart & { type: \"finish\" })\n | (ToolResultStreamPart & { type: \"step-finish\" }),\n): MessageStatus => {\n if (chunk.finishReason === \"tool-calls\") {\n return {\n type: \"requires-action\",\n reason: \"tool-calls\",\n };\n } else if (\n chunk.finishReason === \"stop\" ||\n chunk.finishReason === \"unknown\"\n ) {\n return {\n type: \"complete\",\n reason: chunk.finishReason,\n };\n } else {\n return {\n type: \"incomplete\",\n reason: chunk.finishReason,\n };\n }\n};\n\nconst appendOrUpdateCancel = (\n message: CoreChatModelRunResult,\n): CoreChatModelRunResult => {\n return {\n ...message,\n status: {\n type: \"incomplete\",\n reason: \"cancelled\",\n },\n };\n};\n"],"mappings":"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","names":[]}
|
@@ -7,6 +7,14 @@ export type ToolResultStreamPart = LanguageModelV1StreamPart | {
|
|
7
7
|
} | {
|
8
8
|
type: "data";
|
9
9
|
data: ReadonlyJSONValue[];
|
10
|
+
} | {
|
11
|
+
type: "source";
|
12
|
+
source: {
|
13
|
+
readonly sourceType: "url";
|
14
|
+
readonly id: string;
|
15
|
+
readonly url: string;
|
16
|
+
readonly title?: string;
|
17
|
+
};
|
10
18
|
} | {
|
11
19
|
type: "tool-result";
|
12
20
|
toolCallType: "function";
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"toolResultStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,MAAM,oBAAoB,GAC5B,yBAAyB,GACzB;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EACR,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,CAAC;IACd,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEN,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,EACjD,WAAW,EAAE,WAAW,+
|
1
|
+
{"version":3,"file":"toolResultStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,MAAM,oBAAoB,GAC5B,yBAAyB,GACzB;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE;QACN,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;QAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EACR,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,CAAC;IACd,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEN,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,EACjD,WAAW,EAAE,WAAW,+DA8GzB"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../model-context/ModelContextTypes\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { z } from \"zod\";\nimport sjson from \"secure-json-parse\";\nimport { ReadonlyJSONValue } from \"../../../utils/json/json-value\";\n\nexport type ToolResultStreamPart =\n | LanguageModelV1StreamPart\n | {\n type: \"annotations\";\n annotations: ReadonlyJSONValue[];\n }\n | {\n type: \"data\";\n data: ReadonlyJSONValue[];\n }\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<any, any>> | 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 let args;\n try {\n args = sjson.parse(argsText);\n } catch (e) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result:\n \"Function parameter parsing failed. \" +\n JSON.stringify((e as Error).message),\n isError: true,\n });\n return;\n }\n\n toolCallExecutions.set(\n toolCallId,\n (async () => {\n if (!tool.execute) return;\n\n let executeFn = tool.execute;\n\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(args);\n if (!result.success) {\n executeFn =\n tool.experimental_onSchemaValidationError ??\n (() => {\n throw (\n \"Function parameter validation failed. \" +\n JSON.stringify(result.error.issues)\n );\n });\n }\n }\n\n try {\n const result = await executeFn(args, {\n toolCallId,\n abortSignal,\n });\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result: result === undefined ? \"<no result>\" : 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 \"reasoning\":\n case \"tool-call-delta\":\n case \"tool-result\":\n case \"step-finish\":\n case \"finish\":\n case \"error\":\n case \"response-metadata\":\n case \"annotations\":\n case \"data\":\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;
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../model-context/ModelContextTypes\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { z } from \"zod\";\nimport sjson from \"secure-json-parse\";\nimport { ReadonlyJSONValue } from \"../../../utils/json/json-value\";\n\nexport type ToolResultStreamPart =\n | LanguageModelV1StreamPart\n | {\n type: \"annotations\";\n annotations: ReadonlyJSONValue[];\n }\n | {\n type: \"data\";\n data: ReadonlyJSONValue[];\n }\n | {\n type: \"source\";\n source: {\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n };\n }\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<any, any>> | 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 let args;\n try {\n args = sjson.parse(argsText);\n } catch (e) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result:\n \"Function parameter parsing failed. \" +\n JSON.stringify((e as Error).message),\n isError: true,\n });\n return;\n }\n\n toolCallExecutions.set(\n toolCallId,\n (async () => {\n if (!tool.execute) return;\n\n let executeFn = tool.execute;\n\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(args);\n if (!result.success) {\n executeFn =\n tool.experimental_onSchemaValidationError ??\n (() => {\n throw (\n \"Function parameter validation failed. \" +\n JSON.stringify(result.error.issues)\n );\n });\n }\n }\n\n try {\n const result = await executeFn(args, {\n toolCallId,\n abortSignal,\n });\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result: result === undefined ? \"<no result>\" : 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 \"reasoning\":\n case \"source\":\n case \"tool-call-delta\":\n case \"tool-result\":\n case \"step-finish\":\n case \"finish\":\n case \"error\":\n case \"response-metadata\":\n case \"annotations\":\n case \"data\":\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;AA+CX,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,cAAI;AACJ,cAAI;AACF,mBAAO,yBAAAA,QAAM,MAAM,QAAQ;AAAA,UAC7B,SAAS,GAAG;AACV,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA;AAAA,cACA,QACE,wCACA,KAAK,UAAW,EAAY,OAAO;AAAA,cACrC,SAAS;AAAA,YACX,CAAC;AACD;AAAA,UACF;AAEA,6BAAmB;AAAA,YACjB;AAAA,aACC,YAAY;AACX,kBAAI,CAAC,KAAK,QAAS;AAEnB,kBAAI,YAAY,KAAK;AAErB,kBAAI,KAAK,sBAAsB,aAAE,SAAS;AACxC,sBAAM,SAAS,KAAK,WAAW,UAAU,IAAI;AAC7C,oBAAI,CAAC,OAAO,SAAS;AACnB,8BACE,KAAK,yCACJ,MAAM;AACL,0BACE,2CACA,KAAK,UAAU,OAAO,MAAM,MAAM;AAAA,kBAEtC;AAAA,gBACJ;AAAA,cACF;AAEA,kBAAI;AACF,sBAAM,SAAS,MAAM,UAAU,MAAM;AAAA,kBACnC;AAAA,kBACA;AAAA,gBACF,CAAC;AAED,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,QAAQ,WAAW,SAAY,gBAAgB;AAAA,gBACjD,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;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"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../model-context/ModelContextTypes\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { z } from \"zod\";\nimport sjson from \"secure-json-parse\";\nimport { ReadonlyJSONValue } from \"../../../utils/json/json-value\";\n\nexport type ToolResultStreamPart =\n | LanguageModelV1StreamPart\n | {\n type: \"annotations\";\n annotations: ReadonlyJSONValue[];\n }\n | {\n type: \"data\";\n data: ReadonlyJSONValue[];\n }\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<any, any>> | 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 let args;\n try {\n args = sjson.parse(argsText);\n } catch (e) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result:\n \"Function parameter parsing failed. \" +\n JSON.stringify((e as Error).message),\n isError: true,\n });\n return;\n }\n\n toolCallExecutions.set(\n toolCallId,\n (async () => {\n if (!tool.execute) return;\n\n let executeFn = tool.execute;\n\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(args);\n if (!result.success) {\n executeFn =\n tool.experimental_onSchemaValidationError ??\n (() => {\n throw (\n \"Function parameter validation failed. \" +\n JSON.stringify(result.error.issues)\n );\n });\n }\n }\n\n try {\n const result = await executeFn(args, {\n toolCallId,\n abortSignal,\n });\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result: result === undefined ? \"<no result>\" : 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 \"reasoning\":\n case \"tool-call-delta\":\n case \"tool-result\":\n case \"step-finish\":\n case \"finish\":\n case \"error\":\n case \"response-metadata\":\n case \"annotations\":\n case \"data\":\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;
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../model-context/ModelContextTypes\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { z } from \"zod\";\nimport sjson from \"secure-json-parse\";\nimport { ReadonlyJSONValue } from \"../../../utils/json/json-value\";\n\nexport type ToolResultStreamPart =\n | LanguageModelV1StreamPart\n | {\n type: \"annotations\";\n annotations: ReadonlyJSONValue[];\n }\n | {\n type: \"data\";\n data: ReadonlyJSONValue[];\n }\n | {\n type: \"source\";\n source: {\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n };\n }\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<any, any>> | 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 let args;\n try {\n args = sjson.parse(argsText);\n } catch (e) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result:\n \"Function parameter parsing failed. \" +\n JSON.stringify((e as Error).message),\n isError: true,\n });\n return;\n }\n\n toolCallExecutions.set(\n toolCallId,\n (async () => {\n if (!tool.execute) return;\n\n let executeFn = tool.execute;\n\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(args);\n if (!result.success) {\n executeFn =\n tool.experimental_onSchemaValidationError ??\n (() => {\n throw (\n \"Function parameter validation failed. \" +\n JSON.stringify(result.error.issues)\n );\n });\n }\n }\n\n try {\n const result = await executeFn(args, {\n toolCallId,\n abortSignal,\n });\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result: result === undefined ? \"<no result>\" : 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 \"reasoning\":\n case \"source\":\n case \"tool-call-delta\":\n case \"tool-result\":\n case \"step-finish\":\n case \"finish\":\n case \"error\":\n case \"response-metadata\":\n case \"annotations\":\n case \"data\":\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;AA+CX,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,cAAI;AACJ,cAAI;AACF,mBAAO,MAAM,MAAM,QAAQ;AAAA,UAC7B,SAAS,GAAG;AACV,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA;AAAA,cACA,QACE,wCACA,KAAK,UAAW,EAAY,OAAO;AAAA,cACrC,SAAS;AAAA,YACX,CAAC;AACD;AAAA,UACF;AAEA,6BAAmB;AAAA,YACjB;AAAA,aACC,YAAY;AACX,kBAAI,CAAC,KAAK,QAAS;AAEnB,kBAAI,YAAY,KAAK;AAErB,kBAAI,KAAK,sBAAsB,EAAE,SAAS;AACxC,sBAAM,SAAS,KAAK,WAAW,UAAU,IAAI;AAC7C,oBAAI,CAAC,OAAO,SAAS;AACnB,8BACE,KAAK,yCACJ,MAAM;AACL,0BACE,2CACA,KAAK,UAAU,OAAO,MAAM,MAAM;AAAA,kBAEtC;AAAA,gBACJ;AAAA,cACF;AAEA,kBAAI;AACF,sBAAM,SAAS,MAAM,UAAU,MAAM;AAAA,kBACnC;AAAA,kBACA;AAAA,gBACF,CAAC;AAED,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,QAAQ,WAAW,SAAY,gBAAgB;AAAA,gBACjD,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;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":[]}
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { MessageStatus, TextContentPart, ImageContentPart, ThreadMessage, CompleteAttachment, FileContentPart, Unstable_AudioContentPart } from "../../types";
|
2
|
-
import { ReasoningContentPart, ThreadStep } from "../../types/AssistantTypes";
|
2
|
+
import { ReasoningContentPart, SourceContentPart, ThreadStep } from "../../types/AssistantTypes";
|
3
3
|
import { ReadonlyJSONObject, ReadonlyJSONValue } from "../../utils/json/json-value";
|
4
4
|
export type ThreadMessageLike = {
|
5
5
|
readonly role: "assistant" | "user" | "system";
|
6
|
-
readonly content: string | readonly (TextContentPart | ReasoningContentPart | ImageContentPart | FileContentPart | Unstable_AudioContentPart | {
|
6
|
+
readonly content: string | readonly (TextContentPart | ReasoningContentPart | SourceContentPart | ImageContentPart | FileContentPart | Unstable_AudioContentPart | {
|
7
7
|
readonly type: "tool-call";
|
8
8
|
readonly toolCallId?: string;
|
9
9
|
readonly toolName: string;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ThreadMessageLike.d.ts","sourceRoot":"","sources":["../../../src/runtimes/external-store/ThreadMessageLike.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EAMb,kBAAkB,EAClB,eAAe,EACf,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,
|
1
|
+
{"version":3,"file":"ThreadMessageLike.d.ts","sourceRoot":"","sources":["../../../src/runtimes/external-store/ThreadMessageLike.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EAMb,kBAAkB,EAClB,eAAe,EACf,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAGrC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC/C,QAAQ,CAAC,OAAO,EACZ,MAAM,GACN,SAAS,CACL,eAAe,GACf,oBAAoB,GACpB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,yBAAyB,GACzB;QACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;QAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC;QACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KACxC,CACJ,EAAE,CAAC;IACR,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,QAAQ,CAAC,EACd;QACE,QAAQ,CAAC,oBAAoB,CAAC,EAC1B,SAAS,iBAAiB,EAAE,GAC5B,SAAS,CAAC;QACd,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,CAAC;QAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,CAAC;QACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;KACvD,GACD,SAAS,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAC1B,iBAAiB,cACX,MAAM,kBACF,aAAa,KAC5B,aAwHF,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/runtimes/external-store/ThreadMessageLike.tsx"],"sourcesContent":["import { generateId } from \"../../internal\";\nimport {\n MessageStatus,\n TextContentPart,\n ImageContentPart,\n ThreadMessage,\n ThreadAssistantContentPart,\n ThreadAssistantMessage,\n ThreadUserContentPart,\n ThreadUserMessage,\n ThreadSystemMessage,\n CompleteAttachment,\n FileContentPart,\n Unstable_AudioContentPart,\n} from \"../../types\";\nimport {
|
1
|
+
{"version":3,"sources":["../../../src/runtimes/external-store/ThreadMessageLike.tsx"],"sourcesContent":["import { generateId } from \"../../internal\";\nimport {\n MessageStatus,\n TextContentPart,\n ImageContentPart,\n ThreadMessage,\n ThreadAssistantContentPart,\n ThreadAssistantMessage,\n ThreadUserContentPart,\n ThreadUserMessage,\n ThreadSystemMessage,\n CompleteAttachment,\n FileContentPart,\n Unstable_AudioContentPart,\n} from \"../../types\";\nimport {\n ReasoningContentPart,\n SourceContentPart,\n ThreadStep,\n} from \"../../types/AssistantTypes\";\nimport {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"../../utils/json/json-value\";\nimport { parsePartialJson } from \"../../utils/json/parse-partial-json\";\n\nexport type ThreadMessageLike = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly content:\n | string\n | readonly (\n | TextContentPart\n | ReasoningContentPart\n | SourceContentPart\n | ImageContentPart\n | FileContentPart\n | Unstable_AudioContentPart\n | {\n readonly type: \"tool-call\";\n readonly toolCallId?: string;\n readonly toolName: string;\n readonly args?: ReadonlyJSONObject;\n readonly argsText?: string;\n readonly result?: any | undefined;\n readonly isError?: boolean | undefined;\n }\n )[];\n readonly id?: string | undefined;\n readonly createdAt?: Date | undefined;\n readonly status?: MessageStatus | undefined;\n readonly attachments?: readonly CompleteAttachment[] | undefined;\n readonly metadata?:\n | {\n readonly unstable_annotations?:\n | readonly ReadonlyJSONValue[]\n | undefined;\n readonly unstable_data?: readonly ReadonlyJSONValue[] | undefined;\n readonly steps?: readonly ThreadStep[] | undefined;\n readonly custom?: Record<string, unknown> | undefined;\n }\n | undefined;\n};\n\nexport const fromThreadMessageLike = (\n like: ThreadMessageLike,\n fallbackId: string,\n fallbackStatus: MessageStatus,\n): ThreadMessage => {\n const { role, id, createdAt, attachments, status, metadata } = like;\n const common = {\n id: id ?? fallbackId,\n createdAt: createdAt ?? new Date(),\n };\n\n const content =\n typeof like.content === \"string\"\n ? [{ type: \"text\" as const, text: like.content }]\n : like.content;\n\n if (role !== \"user\" && attachments)\n throw new Error(\"attachments are only supported for user messages\");\n\n if (role !== \"assistant\" && status)\n throw new Error(\"status is only supported for assistant messages\");\n\n if (role !== \"assistant\" && metadata?.steps)\n throw new Error(\"metadata.steps is only supported for assistant messages\");\n\n switch (role) {\n case \"assistant\":\n return {\n ...common,\n role,\n content: content\n .map((part): ThreadAssistantContentPart | null => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"reasoning\":\n if (part.text.trim().length === 0) return null;\n return part;\n\n case \"source\":\n return part;\n\n case \"tool-call\": {\n if (part.args) {\n return {\n ...part,\n toolCallId: part.toolCallId ?? \"tool-\" + generateId(),\n args: part.args,\n argsText: JSON.stringify(part.args),\n };\n }\n return {\n ...part,\n toolCallId: part.toolCallId ?? \"tool-\" + generateId(),\n args: part.args ?? parsePartialJson(part.argsText ?? \"{}\"),\n argsText: part.argsText ?? \"\",\n };\n }\n\n default: {\n const unhandledType: \"image\" | \"audio\" | \"file\" = type;\n throw new Error(\n `Unsupported assistant content part type: ${unhandledType}`,\n );\n }\n }\n })\n .filter((c) => !!c),\n status: status ?? fallbackStatus,\n metadata: {\n unstable_annotations: metadata?.unstable_annotations ?? [],\n unstable_data: metadata?.unstable_data ?? [],\n custom: metadata?.custom ?? {},\n steps: metadata?.steps ?? [],\n },\n } satisfies ThreadAssistantMessage;\n\n case \"user\":\n return {\n ...common,\n role,\n content: content.map((part): ThreadUserContentPart => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"image\":\n case \"audio\":\n case \"file\":\n return part;\n\n default: {\n const unhandledType: \"tool-call\" | \"reasoning\" | \"source\" = type;\n throw new Error(\n `Unsupported user content part type: ${unhandledType}`,\n );\n }\n }\n }),\n attachments: attachments ?? [],\n metadata: {\n custom: metadata?.custom ?? {},\n },\n } satisfies ThreadUserMessage;\n\n case \"system\":\n if (content.length !== 1 || content[0]!.type !== \"text\")\n throw new Error(\n \"System messages must have exactly one text content part.\",\n );\n\n return {\n ...common,\n role,\n content: content as [TextContentPart],\n metadata: {\n custom: metadata?.custom ?? {},\n },\n } satisfies ThreadSystemMessage;\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n"],"mappings":"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","names":[]}
|