ai 3.1.37 → 3.2.1
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/index.d.mts +45 -23
- package/dist/index.d.ts +45 -23
- package/dist/index.js +143 -415
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +117 -386
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
- package/rsc/dist/index.d.ts +68 -3
- package/rsc/dist/rsc-server.d.mts +68 -3
- package/rsc/dist/rsc-server.mjs +17 -0
- package/rsc/dist/rsc-server.mjs.map +1 -1
package/dist/index.js
CHANGED
@@ -92,14 +92,14 @@ __export(streams_exports, {
|
|
92
92
|
experimental_generateText: () => experimental_generateText,
|
93
93
|
experimental_streamObject: () => experimental_streamObject,
|
94
94
|
experimental_streamText: () => experimental_streamText,
|
95
|
-
formatStreamPart: () =>
|
95
|
+
formatStreamPart: () => import_ui_utils6.formatStreamPart,
|
96
96
|
generateId: () => generateId2,
|
97
97
|
generateObject: () => generateObject,
|
98
98
|
generateText: () => generateText,
|
99
99
|
nanoid: () => nanoid,
|
100
|
-
parseComplexResponse: () =>
|
101
|
-
parseStreamPart: () =>
|
102
|
-
readDataStream: () =>
|
100
|
+
parseComplexResponse: () => import_ui_utils6.parseComplexResponse,
|
101
|
+
parseStreamPart: () => import_ui_utils6.parseStreamPart,
|
102
|
+
readDataStream: () => import_ui_utils6.readDataStream,
|
103
103
|
readableFromAsyncIterable: () => readableFromAsyncIterable,
|
104
104
|
streamObject: () => streamObject,
|
105
105
|
streamText: () => streamText,
|
@@ -108,7 +108,7 @@ __export(streams_exports, {
|
|
108
108
|
trimStartOfStreamHelper: () => trimStartOfStreamHelper
|
109
109
|
});
|
110
110
|
module.exports = __toCommonJS(streams_exports);
|
111
|
-
var
|
111
|
+
var import_ui_utils6 = require("@ai-sdk/ui-utils");
|
112
112
|
var import_provider_utils7 = require("@ai-sdk/provider-utils");
|
113
113
|
|
114
114
|
// core/util/retry-with-exponential-backoff.ts
|
@@ -683,7 +683,7 @@ async function generateObject({
|
|
683
683
|
const generateResult = await retry(
|
684
684
|
() => model.doGenerate({
|
685
685
|
mode: { type: "object-grammar", schema: jsonSchema },
|
686
|
-
...settings,
|
686
|
+
...prepareCallSettings(settings),
|
687
687
|
inputFormat: validatedPrompt.type,
|
688
688
|
prompt: convertToLanguageModelPrompt(validatedPrompt),
|
689
689
|
abortSignal
|
@@ -717,7 +717,7 @@ async function generateObject({
|
|
717
717
|
parameters: jsonSchema
|
718
718
|
}
|
719
719
|
},
|
720
|
-
...settings,
|
720
|
+
...prepareCallSettings(settings),
|
721
721
|
inputFormat: validatedPrompt.type,
|
722
722
|
prompt: convertToLanguageModelPrompt(validatedPrompt),
|
723
723
|
abortSignal
|
@@ -768,6 +768,10 @@ var GenerateObjectResult = class {
|
|
768
768
|
};
|
769
769
|
var experimental_generateObject = generateObject;
|
770
770
|
|
771
|
+
// core/generate-object/stream-object.ts
|
772
|
+
var import_provider_utils5 = require("@ai-sdk/provider-utils");
|
773
|
+
var import_ui_utils = require("@ai-sdk/ui-utils");
|
774
|
+
|
771
775
|
// core/util/async-iterable-stream.ts
|
772
776
|
function createAsyncIterableStream(source, transformer) {
|
773
777
|
const transformedStream = source.pipeThrough(
|
@@ -785,381 +789,17 @@ function createAsyncIterableStream(source, transformer) {
|
|
785
789
|
return transformedStream;
|
786
790
|
}
|
787
791
|
|
788
|
-
// core/util/
|
789
|
-
function
|
790
|
-
|
791
|
-
|
792
|
-
if (
|
793
|
-
|
794
|
-
if (typeof obj1 !== "object" && typeof obj2 !== "object")
|
795
|
-
return obj1 === obj2;
|
796
|
-
if (obj1.constructor !== obj2.constructor)
|
797
|
-
return false;
|
798
|
-
if (obj1 instanceof Date && obj2 instanceof Date) {
|
799
|
-
return obj1.getTime() === obj2.getTime();
|
800
|
-
}
|
801
|
-
if (Array.isArray(obj1)) {
|
802
|
-
if (obj1.length !== obj2.length)
|
803
|
-
return false;
|
804
|
-
for (let i = 0; i < obj1.length; i++) {
|
805
|
-
if (!isDeepEqualData(obj1[i], obj2[i]))
|
806
|
-
return false;
|
807
|
-
}
|
808
|
-
return true;
|
809
|
-
}
|
810
|
-
const keys1 = Object.keys(obj1);
|
811
|
-
const keys2 = Object.keys(obj2);
|
812
|
-
if (keys1.length !== keys2.length)
|
813
|
-
return false;
|
814
|
-
for (const key of keys1) {
|
815
|
-
if (!keys2.includes(key))
|
816
|
-
return false;
|
817
|
-
if (!isDeepEqualData(obj1[key], obj2[key]))
|
818
|
-
return false;
|
819
|
-
}
|
820
|
-
return true;
|
821
|
-
}
|
822
|
-
|
823
|
-
// core/util/parse-partial-json.ts
|
824
|
-
var import_secure_json_parse = __toESM(require("secure-json-parse"));
|
825
|
-
|
826
|
-
// core/util/fix-json.ts
|
827
|
-
function fixJson(input) {
|
828
|
-
const stack = ["ROOT"];
|
829
|
-
let lastValidIndex = -1;
|
830
|
-
let literalStart = null;
|
831
|
-
function processValueStart(char, i, swapState) {
|
832
|
-
{
|
833
|
-
switch (char) {
|
834
|
-
case '"': {
|
835
|
-
lastValidIndex = i;
|
836
|
-
stack.pop();
|
837
|
-
stack.push(swapState);
|
838
|
-
stack.push("INSIDE_STRING");
|
839
|
-
break;
|
840
|
-
}
|
841
|
-
case "f":
|
842
|
-
case "t":
|
843
|
-
case "n": {
|
844
|
-
lastValidIndex = i;
|
845
|
-
literalStart = i;
|
846
|
-
stack.pop();
|
847
|
-
stack.push(swapState);
|
848
|
-
stack.push("INSIDE_LITERAL");
|
849
|
-
break;
|
850
|
-
}
|
851
|
-
case "-": {
|
852
|
-
stack.pop();
|
853
|
-
stack.push(swapState);
|
854
|
-
stack.push("INSIDE_NUMBER");
|
855
|
-
break;
|
856
|
-
}
|
857
|
-
case "0":
|
858
|
-
case "1":
|
859
|
-
case "2":
|
860
|
-
case "3":
|
861
|
-
case "4":
|
862
|
-
case "5":
|
863
|
-
case "6":
|
864
|
-
case "7":
|
865
|
-
case "8":
|
866
|
-
case "9": {
|
867
|
-
lastValidIndex = i;
|
868
|
-
stack.pop();
|
869
|
-
stack.push(swapState);
|
870
|
-
stack.push("INSIDE_NUMBER");
|
871
|
-
break;
|
872
|
-
}
|
873
|
-
case "{": {
|
874
|
-
lastValidIndex = i;
|
875
|
-
stack.pop();
|
876
|
-
stack.push(swapState);
|
877
|
-
stack.push("INSIDE_OBJECT_START");
|
878
|
-
break;
|
879
|
-
}
|
880
|
-
case "[": {
|
881
|
-
lastValidIndex = i;
|
882
|
-
stack.pop();
|
883
|
-
stack.push(swapState);
|
884
|
-
stack.push("INSIDE_ARRAY_START");
|
885
|
-
break;
|
886
|
-
}
|
887
|
-
}
|
888
|
-
}
|
889
|
-
}
|
890
|
-
function processAfterObjectValue(char, i) {
|
891
|
-
switch (char) {
|
892
|
-
case ",": {
|
893
|
-
stack.pop();
|
894
|
-
stack.push("INSIDE_OBJECT_AFTER_COMMA");
|
895
|
-
break;
|
896
|
-
}
|
897
|
-
case "}": {
|
898
|
-
lastValidIndex = i;
|
899
|
-
stack.pop();
|
900
|
-
break;
|
901
|
-
}
|
902
|
-
}
|
903
|
-
}
|
904
|
-
function processAfterArrayValue(char, i) {
|
905
|
-
switch (char) {
|
906
|
-
case ",": {
|
907
|
-
stack.pop();
|
908
|
-
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
909
|
-
break;
|
910
|
-
}
|
911
|
-
case "]": {
|
912
|
-
lastValidIndex = i;
|
913
|
-
stack.pop();
|
914
|
-
break;
|
915
|
-
}
|
916
|
-
}
|
917
|
-
}
|
918
|
-
for (let i = 0; i < input.length; i++) {
|
919
|
-
const char = input[i];
|
920
|
-
const currentState = stack[stack.length - 1];
|
921
|
-
switch (currentState) {
|
922
|
-
case "ROOT":
|
923
|
-
processValueStart(char, i, "FINISH");
|
924
|
-
break;
|
925
|
-
case "INSIDE_OBJECT_START": {
|
926
|
-
switch (char) {
|
927
|
-
case '"': {
|
928
|
-
stack.pop();
|
929
|
-
stack.push("INSIDE_OBJECT_KEY");
|
930
|
-
break;
|
931
|
-
}
|
932
|
-
case "}": {
|
933
|
-
lastValidIndex = i;
|
934
|
-
stack.pop();
|
935
|
-
break;
|
936
|
-
}
|
937
|
-
}
|
938
|
-
break;
|
939
|
-
}
|
940
|
-
case "INSIDE_OBJECT_AFTER_COMMA": {
|
941
|
-
switch (char) {
|
942
|
-
case '"': {
|
943
|
-
stack.pop();
|
944
|
-
stack.push("INSIDE_OBJECT_KEY");
|
945
|
-
break;
|
946
|
-
}
|
947
|
-
}
|
948
|
-
break;
|
949
|
-
}
|
950
|
-
case "INSIDE_OBJECT_KEY": {
|
951
|
-
switch (char) {
|
952
|
-
case '"': {
|
953
|
-
stack.pop();
|
954
|
-
stack.push("INSIDE_OBJECT_AFTER_KEY");
|
955
|
-
break;
|
956
|
-
}
|
957
|
-
}
|
958
|
-
break;
|
959
|
-
}
|
960
|
-
case "INSIDE_OBJECT_AFTER_KEY": {
|
961
|
-
switch (char) {
|
962
|
-
case ":": {
|
963
|
-
stack.pop();
|
964
|
-
stack.push("INSIDE_OBJECT_BEFORE_VALUE");
|
965
|
-
break;
|
966
|
-
}
|
967
|
-
}
|
968
|
-
break;
|
969
|
-
}
|
970
|
-
case "INSIDE_OBJECT_BEFORE_VALUE": {
|
971
|
-
processValueStart(char, i, "INSIDE_OBJECT_AFTER_VALUE");
|
972
|
-
break;
|
973
|
-
}
|
974
|
-
case "INSIDE_OBJECT_AFTER_VALUE": {
|
975
|
-
processAfterObjectValue(char, i);
|
976
|
-
break;
|
977
|
-
}
|
978
|
-
case "INSIDE_STRING": {
|
979
|
-
switch (char) {
|
980
|
-
case '"': {
|
981
|
-
stack.pop();
|
982
|
-
lastValidIndex = i;
|
983
|
-
break;
|
984
|
-
}
|
985
|
-
case "\\": {
|
986
|
-
stack.push("INSIDE_STRING_ESCAPE");
|
987
|
-
break;
|
988
|
-
}
|
989
|
-
default: {
|
990
|
-
lastValidIndex = i;
|
991
|
-
}
|
992
|
-
}
|
993
|
-
break;
|
994
|
-
}
|
995
|
-
case "INSIDE_ARRAY_START": {
|
996
|
-
switch (char) {
|
997
|
-
case "]": {
|
998
|
-
lastValidIndex = i;
|
999
|
-
stack.pop();
|
1000
|
-
break;
|
1001
|
-
}
|
1002
|
-
default: {
|
1003
|
-
lastValidIndex = i;
|
1004
|
-
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
1005
|
-
break;
|
1006
|
-
}
|
1007
|
-
}
|
1008
|
-
break;
|
1009
|
-
}
|
1010
|
-
case "INSIDE_ARRAY_AFTER_VALUE": {
|
1011
|
-
switch (char) {
|
1012
|
-
case ",": {
|
1013
|
-
stack.pop();
|
1014
|
-
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
1015
|
-
break;
|
1016
|
-
}
|
1017
|
-
case "]": {
|
1018
|
-
lastValidIndex = i;
|
1019
|
-
stack.pop();
|
1020
|
-
break;
|
1021
|
-
}
|
1022
|
-
default: {
|
1023
|
-
lastValidIndex = i;
|
1024
|
-
break;
|
1025
|
-
}
|
1026
|
-
}
|
1027
|
-
break;
|
1028
|
-
}
|
1029
|
-
case "INSIDE_ARRAY_AFTER_COMMA": {
|
1030
|
-
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
1031
|
-
break;
|
1032
|
-
}
|
1033
|
-
case "INSIDE_STRING_ESCAPE": {
|
1034
|
-
stack.pop();
|
1035
|
-
lastValidIndex = i;
|
1036
|
-
break;
|
1037
|
-
}
|
1038
|
-
case "INSIDE_NUMBER": {
|
1039
|
-
switch (char) {
|
1040
|
-
case "0":
|
1041
|
-
case "1":
|
1042
|
-
case "2":
|
1043
|
-
case "3":
|
1044
|
-
case "4":
|
1045
|
-
case "5":
|
1046
|
-
case "6":
|
1047
|
-
case "7":
|
1048
|
-
case "8":
|
1049
|
-
case "9": {
|
1050
|
-
lastValidIndex = i;
|
1051
|
-
break;
|
1052
|
-
}
|
1053
|
-
case "e":
|
1054
|
-
case "E":
|
1055
|
-
case "-":
|
1056
|
-
case ".": {
|
1057
|
-
break;
|
1058
|
-
}
|
1059
|
-
case ",": {
|
1060
|
-
stack.pop();
|
1061
|
-
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
|
1062
|
-
processAfterArrayValue(char, i);
|
1063
|
-
}
|
1064
|
-
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
|
1065
|
-
processAfterObjectValue(char, i);
|
1066
|
-
}
|
1067
|
-
break;
|
1068
|
-
}
|
1069
|
-
case "}": {
|
1070
|
-
stack.pop();
|
1071
|
-
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
|
1072
|
-
processAfterObjectValue(char, i);
|
1073
|
-
}
|
1074
|
-
break;
|
1075
|
-
}
|
1076
|
-
case "]": {
|
1077
|
-
stack.pop();
|
1078
|
-
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
|
1079
|
-
processAfterArrayValue(char, i);
|
1080
|
-
}
|
1081
|
-
break;
|
1082
|
-
}
|
1083
|
-
default: {
|
1084
|
-
stack.pop();
|
1085
|
-
break;
|
1086
|
-
}
|
1087
|
-
}
|
1088
|
-
break;
|
1089
|
-
}
|
1090
|
-
case "INSIDE_LITERAL": {
|
1091
|
-
const partialLiteral = input.substring(literalStart, i + 1);
|
1092
|
-
if (!"false".startsWith(partialLiteral) && !"true".startsWith(partialLiteral) && !"null".startsWith(partialLiteral)) {
|
1093
|
-
stack.pop();
|
1094
|
-
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
|
1095
|
-
processAfterObjectValue(char, i);
|
1096
|
-
} else if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
|
1097
|
-
processAfterArrayValue(char, i);
|
1098
|
-
}
|
1099
|
-
} else {
|
1100
|
-
lastValidIndex = i;
|
1101
|
-
}
|
1102
|
-
break;
|
1103
|
-
}
|
1104
|
-
}
|
1105
|
-
}
|
1106
|
-
let result = input.slice(0, lastValidIndex + 1);
|
1107
|
-
for (let i = stack.length - 1; i >= 0; i--) {
|
1108
|
-
const state = stack[i];
|
1109
|
-
switch (state) {
|
1110
|
-
case "INSIDE_STRING": {
|
1111
|
-
result += '"';
|
1112
|
-
break;
|
1113
|
-
}
|
1114
|
-
case "INSIDE_OBJECT_KEY":
|
1115
|
-
case "INSIDE_OBJECT_AFTER_KEY":
|
1116
|
-
case "INSIDE_OBJECT_AFTER_COMMA":
|
1117
|
-
case "INSIDE_OBJECT_START":
|
1118
|
-
case "INSIDE_OBJECT_BEFORE_VALUE":
|
1119
|
-
case "INSIDE_OBJECT_AFTER_VALUE": {
|
1120
|
-
result += "}";
|
1121
|
-
break;
|
1122
|
-
}
|
1123
|
-
case "INSIDE_ARRAY_START":
|
1124
|
-
case "INSIDE_ARRAY_AFTER_COMMA":
|
1125
|
-
case "INSIDE_ARRAY_AFTER_VALUE": {
|
1126
|
-
result += "]";
|
1127
|
-
break;
|
1128
|
-
}
|
1129
|
-
case "INSIDE_LITERAL": {
|
1130
|
-
const partialLiteral = input.substring(literalStart, input.length);
|
1131
|
-
if ("true".startsWith(partialLiteral)) {
|
1132
|
-
result += "true".slice(partialLiteral.length);
|
1133
|
-
} else if ("false".startsWith(partialLiteral)) {
|
1134
|
-
result += "false".slice(partialLiteral.length);
|
1135
|
-
} else if ("null".startsWith(partialLiteral)) {
|
1136
|
-
result += "null".slice(partialLiteral.length);
|
1137
|
-
}
|
1138
|
-
}
|
1139
|
-
}
|
1140
|
-
}
|
1141
|
-
return result;
|
1142
|
-
}
|
1143
|
-
|
1144
|
-
// core/util/parse-partial-json.ts
|
1145
|
-
function parsePartialJson(jsonText) {
|
1146
|
-
if (jsonText == null) {
|
1147
|
-
return void 0;
|
1148
|
-
}
|
1149
|
-
try {
|
1150
|
-
return import_secure_json_parse.default.parse(jsonText);
|
1151
|
-
} catch (ignored) {
|
1152
|
-
try {
|
1153
|
-
const fixedJsonText = fixJson(jsonText);
|
1154
|
-
return import_secure_json_parse.default.parse(fixedJsonText);
|
1155
|
-
} catch (ignored2) {
|
1156
|
-
}
|
792
|
+
// core/util/prepare-response-headers.ts
|
793
|
+
function prepareResponseHeaders(init, { contentType }) {
|
794
|
+
var _a;
|
795
|
+
const headers = new Headers((_a = init == null ? void 0 : init.headers) != null ? _a : {});
|
796
|
+
if (!headers.has("Content-Type")) {
|
797
|
+
headers.set("Content-Type", contentType);
|
1157
798
|
}
|
1158
|
-
return
|
799
|
+
return headers;
|
1159
800
|
}
|
1160
801
|
|
1161
802
|
// core/generate-object/stream-object.ts
|
1162
|
-
var import_provider_utils5 = require("@ai-sdk/provider-utils");
|
1163
803
|
async function streamObject({
|
1164
804
|
model,
|
1165
805
|
schema,
|
@@ -1216,7 +856,7 @@ async function streamObject({
|
|
1216
856
|
});
|
1217
857
|
callOptions = {
|
1218
858
|
mode: { type: "object-grammar", schema: jsonSchema },
|
1219
|
-
...settings,
|
859
|
+
...prepareCallSettings(settings),
|
1220
860
|
inputFormat: validatedPrompt.type,
|
1221
861
|
prompt: convertToLanguageModelPrompt(validatedPrompt),
|
1222
862
|
abortSignal
|
@@ -1252,7 +892,7 @@ async function streamObject({
|
|
1252
892
|
parameters: jsonSchema
|
1253
893
|
}
|
1254
894
|
},
|
1255
|
-
...settings,
|
895
|
+
...prepareCallSettings(settings),
|
1256
896
|
inputFormat: validatedPrompt.type,
|
1257
897
|
prompt: convertToLanguageModelPrompt(validatedPrompt),
|
1258
898
|
abortSignal
|
@@ -1313,23 +953,39 @@ var StreamObjectResult = class {
|
|
1313
953
|
let object;
|
1314
954
|
let error;
|
1315
955
|
let accumulatedText = "";
|
956
|
+
let delta = "";
|
1316
957
|
let latestObject = void 0;
|
1317
958
|
this.originalStream = stream.pipeThrough(
|
1318
959
|
new TransformStream({
|
1319
960
|
async transform(chunk, controller) {
|
1320
961
|
if (typeof chunk === "string") {
|
1321
962
|
accumulatedText += chunk;
|
1322
|
-
|
963
|
+
delta += chunk;
|
964
|
+
const currentObject = (0, import_ui_utils.parsePartialJson)(
|
1323
965
|
accumulatedText
|
1324
966
|
);
|
1325
|
-
if (!isDeepEqualData(latestObject, currentObject)) {
|
967
|
+
if (!(0, import_ui_utils.isDeepEqualData)(latestObject, currentObject)) {
|
1326
968
|
latestObject = currentObject;
|
1327
|
-
controller.enqueue({
|
969
|
+
controller.enqueue({
|
970
|
+
type: "object",
|
971
|
+
object: currentObject
|
972
|
+
});
|
973
|
+
controller.enqueue({
|
974
|
+
type: "text-delta",
|
975
|
+
textDelta: delta
|
976
|
+
});
|
977
|
+
delta = "";
|
1328
978
|
}
|
1329
979
|
return;
|
1330
980
|
}
|
1331
981
|
switch (chunk.type) {
|
1332
982
|
case "finish": {
|
983
|
+
if (delta !== "") {
|
984
|
+
controller.enqueue({
|
985
|
+
type: "text-delta",
|
986
|
+
textDelta: delta
|
987
|
+
});
|
988
|
+
}
|
1333
989
|
usage = calculateTokenUsage(chunk.usage);
|
1334
990
|
controller.enqueue({ ...chunk, usage });
|
1335
991
|
resolveUsage(usage);
|
@@ -1373,6 +1029,12 @@ var StreamObjectResult = class {
|
|
1373
1029
|
})
|
1374
1030
|
);
|
1375
1031
|
}
|
1032
|
+
/**
|
1033
|
+
Stream of partial objects. It gets more complete as the stream progresses.
|
1034
|
+
|
1035
|
+
Note that the partial object is not validated.
|
1036
|
+
If you want to be certain that the actual content matches your schema, you need to implement your own validation for partial results.
|
1037
|
+
*/
|
1376
1038
|
get partialObjectStream() {
|
1377
1039
|
return createAsyncIterableStream(this.originalStream, {
|
1378
1040
|
transform(chunk, controller) {
|
@@ -1380,6 +1042,7 @@ var StreamObjectResult = class {
|
|
1380
1042
|
case "object":
|
1381
1043
|
controller.enqueue(chunk.object);
|
1382
1044
|
break;
|
1045
|
+
case "text-delta":
|
1383
1046
|
case "finish":
|
1384
1047
|
break;
|
1385
1048
|
case "error":
|
@@ -1393,6 +1056,34 @@ var StreamObjectResult = class {
|
|
1393
1056
|
}
|
1394
1057
|
});
|
1395
1058
|
}
|
1059
|
+
/**
|
1060
|
+
Text stream of the JSON representation of the generated object. It contains text chunks.
|
1061
|
+
When the stream is finished, the object is valid JSON that can be parsed.
|
1062
|
+
*/
|
1063
|
+
get textStream() {
|
1064
|
+
return createAsyncIterableStream(this.originalStream, {
|
1065
|
+
transform(chunk, controller) {
|
1066
|
+
switch (chunk.type) {
|
1067
|
+
case "text-delta":
|
1068
|
+
controller.enqueue(chunk.textDelta);
|
1069
|
+
break;
|
1070
|
+
case "object":
|
1071
|
+
case "finish":
|
1072
|
+
break;
|
1073
|
+
case "error":
|
1074
|
+
controller.error(chunk.error);
|
1075
|
+
break;
|
1076
|
+
default: {
|
1077
|
+
const _exhaustiveCheck = chunk;
|
1078
|
+
throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);
|
1079
|
+
}
|
1080
|
+
}
|
1081
|
+
}
|
1082
|
+
});
|
1083
|
+
}
|
1084
|
+
/**
|
1085
|
+
Stream of different types of events, including partial objects, errors, and finish events.
|
1086
|
+
*/
|
1396
1087
|
get fullStream() {
|
1397
1088
|
return createAsyncIterableStream(this.originalStream, {
|
1398
1089
|
transform(chunk, controller) {
|
@@ -1400,6 +1091,53 @@ var StreamObjectResult = class {
|
|
1400
1091
|
}
|
1401
1092
|
});
|
1402
1093
|
}
|
1094
|
+
/**
|
1095
|
+
Writes text delta output to a Node.js response-like object.
|
1096
|
+
It sets a `Content-Type` header to `text/plain; charset=utf-8` and
|
1097
|
+
writes each text delta as a separate chunk.
|
1098
|
+
|
1099
|
+
@param response A Node.js response-like object (ServerResponse).
|
1100
|
+
@param init Optional headers and status code.
|
1101
|
+
*/
|
1102
|
+
pipeTextStreamToResponse(response, init) {
|
1103
|
+
var _a;
|
1104
|
+
response.writeHead((_a = init == null ? void 0 : init.status) != null ? _a : 200, {
|
1105
|
+
"Content-Type": "text/plain; charset=utf-8",
|
1106
|
+
...init == null ? void 0 : init.headers
|
1107
|
+
});
|
1108
|
+
const reader = this.textStream.pipeThrough(new TextEncoderStream()).getReader();
|
1109
|
+
const read = async () => {
|
1110
|
+
try {
|
1111
|
+
while (true) {
|
1112
|
+
const { done, value } = await reader.read();
|
1113
|
+
if (done)
|
1114
|
+
break;
|
1115
|
+
response.write(value);
|
1116
|
+
}
|
1117
|
+
} catch (error) {
|
1118
|
+
throw error;
|
1119
|
+
} finally {
|
1120
|
+
response.end();
|
1121
|
+
}
|
1122
|
+
};
|
1123
|
+
read();
|
1124
|
+
}
|
1125
|
+
/**
|
1126
|
+
Creates a simple text stream response.
|
1127
|
+
Each text delta is encoded as UTF-8 and sent as a separate chunk.
|
1128
|
+
Non-text-delta events are ignored.
|
1129
|
+
|
1130
|
+
@param init Optional headers and status code.
|
1131
|
+
*/
|
1132
|
+
toTextStreamResponse(init) {
|
1133
|
+
var _a;
|
1134
|
+
return new Response(this.textStream.pipeThrough(new TextEncoderStream()), {
|
1135
|
+
status: (_a = init == null ? void 0 : init.status) != null ? _a : 200,
|
1136
|
+
headers: prepareResponseHeaders(init, {
|
1137
|
+
contentType: "text/plain; charset=utf-8"
|
1138
|
+
})
|
1139
|
+
});
|
1140
|
+
}
|
1403
1141
|
};
|
1404
1142
|
var experimental_streamObject = streamObject;
|
1405
1143
|
|
@@ -1601,19 +1339,9 @@ function toResponseMessages({
|
|
1601
1339
|
}
|
1602
1340
|
var experimental_generateText = generateText;
|
1603
1341
|
|
1604
|
-
// core/util/prepare-response-headers.ts
|
1605
|
-
function prepareResponseHeaders(init, { contentType }) {
|
1606
|
-
var _a;
|
1607
|
-
const headers = new Headers((_a = init == null ? void 0 : init.headers) != null ? _a : {});
|
1608
|
-
if (!headers.has("Content-Type")) {
|
1609
|
-
headers.set("Content-Type", contentType);
|
1610
|
-
}
|
1611
|
-
return headers;
|
1612
|
-
}
|
1613
|
-
|
1614
1342
|
// core/generate-text/run-tools-transformation.ts
|
1615
1343
|
var import_provider7 = require("@ai-sdk/provider");
|
1616
|
-
var
|
1344
|
+
var import_ui_utils2 = require("@ai-sdk/ui-utils");
|
1617
1345
|
function runToolsTransformation({
|
1618
1346
|
tools,
|
1619
1347
|
generatorStream
|
@@ -1662,7 +1390,7 @@ function runToolsTransformation({
|
|
1662
1390
|
});
|
1663
1391
|
controller.enqueue(toolCall);
|
1664
1392
|
if (tool2.execute != null) {
|
1665
|
-
const toolExecutionId = (0,
|
1393
|
+
const toolExecutionId = (0, import_ui_utils2.generateId)();
|
1666
1394
|
outstandingToolCalls.add(toolExecutionId);
|
1667
1395
|
tool2.execute(toolCall.args).then(
|
1668
1396
|
(result) => {
|
@@ -1960,11 +1688,11 @@ var StreamTextResult = class {
|
|
1960
1688
|
transform: async (chunk, controller) => {
|
1961
1689
|
switch (chunk.type) {
|
1962
1690
|
case "text-delta":
|
1963
|
-
controller.enqueue((0,
|
1691
|
+
controller.enqueue((0, import_ui_utils6.formatStreamPart)("text", chunk.textDelta));
|
1964
1692
|
break;
|
1965
1693
|
case "tool-call":
|
1966
1694
|
controller.enqueue(
|
1967
|
-
(0,
|
1695
|
+
(0, import_ui_utils6.formatStreamPart)("tool_call", {
|
1968
1696
|
toolCallId: chunk.toolCallId,
|
1969
1697
|
toolName: chunk.toolName,
|
1970
1698
|
args: chunk.args
|
@@ -1973,7 +1701,7 @@ var StreamTextResult = class {
|
|
1973
1701
|
break;
|
1974
1702
|
case "tool-result":
|
1975
1703
|
controller.enqueue(
|
1976
|
-
(0,
|
1704
|
+
(0, import_ui_utils6.formatStreamPart)("tool_result", {
|
1977
1705
|
toolCallId: chunk.toolCallId,
|
1978
1706
|
toolName: chunk.toolName,
|
1979
1707
|
args: chunk.args,
|
@@ -1983,7 +1711,7 @@ var StreamTextResult = class {
|
|
1983
1711
|
break;
|
1984
1712
|
case "error":
|
1985
1713
|
controller.enqueue(
|
1986
|
-
(0,
|
1714
|
+
(0, import_ui_utils6.formatStreamPart)("error", JSON.stringify(chunk.error))
|
1987
1715
|
);
|
1988
1716
|
break;
|
1989
1717
|
}
|
@@ -2412,7 +2140,7 @@ function readableFromAsyncIterable(iterable) {
|
|
2412
2140
|
}
|
2413
2141
|
|
2414
2142
|
// streams/stream-data.ts
|
2415
|
-
var
|
2143
|
+
var import_ui_utils3 = require("@ai-sdk/ui-utils");
|
2416
2144
|
var StreamData = class {
|
2417
2145
|
constructor() {
|
2418
2146
|
this.encoder = new TextEncoder();
|
@@ -2459,7 +2187,7 @@ var StreamData = class {
|
|
2459
2187
|
throw new Error("Stream controller is not initialized.");
|
2460
2188
|
}
|
2461
2189
|
this.controller.enqueue(
|
2462
|
-
this.encoder.encode((0,
|
2190
|
+
this.encoder.encode((0, import_ui_utils3.formatStreamPart)("data", [value]))
|
2463
2191
|
);
|
2464
2192
|
}
|
2465
2193
|
appendMessageAnnotation(value) {
|
@@ -2470,7 +2198,7 @@ var StreamData = class {
|
|
2470
2198
|
throw new Error("Stream controller is not initialized.");
|
2471
2199
|
}
|
2472
2200
|
this.controller.enqueue(
|
2473
|
-
this.encoder.encode((0,
|
2201
|
+
this.encoder.encode((0, import_ui_utils3.formatStreamPart)("message_annotations", [value]))
|
2474
2202
|
);
|
2475
2203
|
}
|
2476
2204
|
};
|
@@ -2480,7 +2208,7 @@ function createStreamDataTransformer() {
|
|
2480
2208
|
return new TransformStream({
|
2481
2209
|
transform: async (chunk, controller) => {
|
2482
2210
|
const message = decoder.decode(chunk);
|
2483
|
-
controller.enqueue(encoder.encode((0,
|
2211
|
+
controller.enqueue(encoder.encode((0, import_ui_utils3.formatStreamPart)("text", message)));
|
2484
2212
|
}
|
2485
2213
|
});
|
2486
2214
|
}
|
@@ -2534,7 +2262,7 @@ function AnthropicStream(res, cb) {
|
|
2534
2262
|
}
|
2535
2263
|
|
2536
2264
|
// streams/assistant-response.ts
|
2537
|
-
var
|
2265
|
+
var import_ui_utils4 = require("@ai-sdk/ui-utils");
|
2538
2266
|
function AssistantResponse({ threadId, messageId }, process2) {
|
2539
2267
|
const stream = new ReadableStream({
|
2540
2268
|
async start(controller) {
|
@@ -2542,17 +2270,17 @@ function AssistantResponse({ threadId, messageId }, process2) {
|
|
2542
2270
|
const textEncoder = new TextEncoder();
|
2543
2271
|
const sendMessage = (message) => {
|
2544
2272
|
controller.enqueue(
|
2545
|
-
textEncoder.encode((0,
|
2273
|
+
textEncoder.encode((0, import_ui_utils4.formatStreamPart)("assistant_message", message))
|
2546
2274
|
);
|
2547
2275
|
};
|
2548
2276
|
const sendDataMessage = (message) => {
|
2549
2277
|
controller.enqueue(
|
2550
|
-
textEncoder.encode((0,
|
2278
|
+
textEncoder.encode((0, import_ui_utils4.formatStreamPart)("data_message", message))
|
2551
2279
|
);
|
2552
2280
|
};
|
2553
2281
|
const sendError = (errorMessage) => {
|
2554
2282
|
controller.enqueue(
|
2555
|
-
textEncoder.encode((0,
|
2283
|
+
textEncoder.encode((0, import_ui_utils4.formatStreamPart)("error", errorMessage))
|
2556
2284
|
);
|
2557
2285
|
};
|
2558
2286
|
const forwardStream = async (stream2) => {
|
@@ -2563,7 +2291,7 @@ function AssistantResponse({ threadId, messageId }, process2) {
|
|
2563
2291
|
case "thread.message.created": {
|
2564
2292
|
controller.enqueue(
|
2565
2293
|
textEncoder.encode(
|
2566
|
-
(0,
|
2294
|
+
(0, import_ui_utils4.formatStreamPart)("assistant_message", {
|
2567
2295
|
id: value.data.id,
|
2568
2296
|
role: "assistant",
|
2569
2297
|
content: [{ type: "text", text: { value: "" } }]
|
@@ -2577,7 +2305,7 @@ function AssistantResponse({ threadId, messageId }, process2) {
|
|
2577
2305
|
if ((content == null ? void 0 : content.type) === "text" && ((_b = content.text) == null ? void 0 : _b.value) != null) {
|
2578
2306
|
controller.enqueue(
|
2579
2307
|
textEncoder.encode(
|
2580
|
-
(0,
|
2308
|
+
(0, import_ui_utils4.formatStreamPart)("text", content.text.value)
|
2581
2309
|
)
|
2582
2310
|
);
|
2583
2311
|
}
|
@@ -2594,7 +2322,7 @@ function AssistantResponse({ threadId, messageId }, process2) {
|
|
2594
2322
|
};
|
2595
2323
|
controller.enqueue(
|
2596
2324
|
textEncoder.encode(
|
2597
|
-
(0,
|
2325
|
+
(0, import_ui_utils4.formatStreamPart)("assistant_control_data", {
|
2598
2326
|
threadId,
|
2599
2327
|
messageId
|
2600
2328
|
})
|
@@ -2909,7 +2637,7 @@ function MistralStream(response, callbacks) {
|
|
2909
2637
|
}
|
2910
2638
|
|
2911
2639
|
// streams/openai-stream.ts
|
2912
|
-
var
|
2640
|
+
var import_ui_utils5 = require("@ai-sdk/ui-utils");
|
2913
2641
|
function parseOpenAIStream() {
|
2914
2642
|
const extract = chunkToText();
|
2915
2643
|
return (data) => extract(JSON.parse(data));
|
@@ -3060,7 +2788,7 @@ function createFunctionCallTransformer(callbacks) {
|
|
3060
2788
|
let aggregatedFinalCompletionResponse = "";
|
3061
2789
|
let isFunctionStreamingIn = false;
|
3062
2790
|
let functionCallMessages = callbacks[__internal__OpenAIFnMessagesSymbol] || [];
|
3063
|
-
const decode = (0,
|
2791
|
+
const decode = (0, import_ui_utils5.createChunkDecoder)();
|
3064
2792
|
return new TransformStream({
|
3065
2793
|
async transform(chunk, controller) {
|
3066
2794
|
const message = decode(chunk);
|
@@ -3074,7 +2802,7 @@ function createFunctionCallTransformer(callbacks) {
|
|
3074
2802
|
}
|
3075
2803
|
if (!isFunctionStreamingIn) {
|
3076
2804
|
controller.enqueue(
|
3077
|
-
textEncoder.encode((0,
|
2805
|
+
textEncoder.encode((0, import_ui_utils5.formatStreamPart)("text", message))
|
3078
2806
|
);
|
3079
2807
|
return;
|
3080
2808
|
} else {
|
@@ -3185,7 +2913,7 @@ function createFunctionCallTransformer(callbacks) {
|
|
3185
2913
|
if (!functionResponse) {
|
3186
2914
|
controller.enqueue(
|
3187
2915
|
textEncoder.encode(
|
3188
|
-
(0,
|
2916
|
+
(0, import_ui_utils5.formatStreamPart)(
|
3189
2917
|
payload.function_call ? "function_call" : "tool_calls",
|
3190
2918
|
// parse to prevent double-encoding:
|
3191
2919
|
JSON.parse(aggregatedResponse)
|
@@ -3195,7 +2923,7 @@ function createFunctionCallTransformer(callbacks) {
|
|
3195
2923
|
return;
|
3196
2924
|
} else if (typeof functionResponse === "string") {
|
3197
2925
|
controller.enqueue(
|
3198
|
-
textEncoder.encode((0,
|
2926
|
+
textEncoder.encode((0, import_ui_utils5.formatStreamPart)("text", functionResponse))
|
3199
2927
|
);
|
3200
2928
|
aggregatedFinalCompletionResponse = functionResponse;
|
3201
2929
|
return;
|