ai 3.2.0 → 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 +139 -411
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +113 -382
- 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.mjs
CHANGED
@@ -673,6 +673,13 @@ var GenerateObjectResult = class {
|
|
673
673
|
};
|
674
674
|
var experimental_generateObject = generateObject;
|
675
675
|
|
676
|
+
// core/generate-object/stream-object.ts
|
677
|
+
import { safeValidateTypes } from "@ai-sdk/provider-utils";
|
678
|
+
import {
|
679
|
+
isDeepEqualData,
|
680
|
+
parsePartialJson
|
681
|
+
} from "@ai-sdk/ui-utils";
|
682
|
+
|
676
683
|
// core/util/async-iterable-stream.ts
|
677
684
|
function createAsyncIterableStream(source, transformer) {
|
678
685
|
const transformedStream = source.pipeThrough(
|
@@ -690,381 +697,17 @@ function createAsyncIterableStream(source, transformer) {
|
|
690
697
|
return transformedStream;
|
691
698
|
}
|
692
699
|
|
693
|
-
// core/util/
|
694
|
-
function
|
695
|
-
|
696
|
-
|
697
|
-
if (
|
698
|
-
|
699
|
-
if (typeof obj1 !== "object" && typeof obj2 !== "object")
|
700
|
-
return obj1 === obj2;
|
701
|
-
if (obj1.constructor !== obj2.constructor)
|
702
|
-
return false;
|
703
|
-
if (obj1 instanceof Date && obj2 instanceof Date) {
|
704
|
-
return obj1.getTime() === obj2.getTime();
|
705
|
-
}
|
706
|
-
if (Array.isArray(obj1)) {
|
707
|
-
if (obj1.length !== obj2.length)
|
708
|
-
return false;
|
709
|
-
for (let i = 0; i < obj1.length; i++) {
|
710
|
-
if (!isDeepEqualData(obj1[i], obj2[i]))
|
711
|
-
return false;
|
712
|
-
}
|
713
|
-
return true;
|
714
|
-
}
|
715
|
-
const keys1 = Object.keys(obj1);
|
716
|
-
const keys2 = Object.keys(obj2);
|
717
|
-
if (keys1.length !== keys2.length)
|
718
|
-
return false;
|
719
|
-
for (const key of keys1) {
|
720
|
-
if (!keys2.includes(key))
|
721
|
-
return false;
|
722
|
-
if (!isDeepEqualData(obj1[key], obj2[key]))
|
723
|
-
return false;
|
724
|
-
}
|
725
|
-
return true;
|
726
|
-
}
|
727
|
-
|
728
|
-
// core/util/parse-partial-json.ts
|
729
|
-
import SecureJSON from "secure-json-parse";
|
730
|
-
|
731
|
-
// core/util/fix-json.ts
|
732
|
-
function fixJson(input) {
|
733
|
-
const stack = ["ROOT"];
|
734
|
-
let lastValidIndex = -1;
|
735
|
-
let literalStart = null;
|
736
|
-
function processValueStart(char, i, swapState) {
|
737
|
-
{
|
738
|
-
switch (char) {
|
739
|
-
case '"': {
|
740
|
-
lastValidIndex = i;
|
741
|
-
stack.pop();
|
742
|
-
stack.push(swapState);
|
743
|
-
stack.push("INSIDE_STRING");
|
744
|
-
break;
|
745
|
-
}
|
746
|
-
case "f":
|
747
|
-
case "t":
|
748
|
-
case "n": {
|
749
|
-
lastValidIndex = i;
|
750
|
-
literalStart = i;
|
751
|
-
stack.pop();
|
752
|
-
stack.push(swapState);
|
753
|
-
stack.push("INSIDE_LITERAL");
|
754
|
-
break;
|
755
|
-
}
|
756
|
-
case "-": {
|
757
|
-
stack.pop();
|
758
|
-
stack.push(swapState);
|
759
|
-
stack.push("INSIDE_NUMBER");
|
760
|
-
break;
|
761
|
-
}
|
762
|
-
case "0":
|
763
|
-
case "1":
|
764
|
-
case "2":
|
765
|
-
case "3":
|
766
|
-
case "4":
|
767
|
-
case "5":
|
768
|
-
case "6":
|
769
|
-
case "7":
|
770
|
-
case "8":
|
771
|
-
case "9": {
|
772
|
-
lastValidIndex = i;
|
773
|
-
stack.pop();
|
774
|
-
stack.push(swapState);
|
775
|
-
stack.push("INSIDE_NUMBER");
|
776
|
-
break;
|
777
|
-
}
|
778
|
-
case "{": {
|
779
|
-
lastValidIndex = i;
|
780
|
-
stack.pop();
|
781
|
-
stack.push(swapState);
|
782
|
-
stack.push("INSIDE_OBJECT_START");
|
783
|
-
break;
|
784
|
-
}
|
785
|
-
case "[": {
|
786
|
-
lastValidIndex = i;
|
787
|
-
stack.pop();
|
788
|
-
stack.push(swapState);
|
789
|
-
stack.push("INSIDE_ARRAY_START");
|
790
|
-
break;
|
791
|
-
}
|
792
|
-
}
|
793
|
-
}
|
794
|
-
}
|
795
|
-
function processAfterObjectValue(char, i) {
|
796
|
-
switch (char) {
|
797
|
-
case ",": {
|
798
|
-
stack.pop();
|
799
|
-
stack.push("INSIDE_OBJECT_AFTER_COMMA");
|
800
|
-
break;
|
801
|
-
}
|
802
|
-
case "}": {
|
803
|
-
lastValidIndex = i;
|
804
|
-
stack.pop();
|
805
|
-
break;
|
806
|
-
}
|
807
|
-
}
|
808
|
-
}
|
809
|
-
function processAfterArrayValue(char, i) {
|
810
|
-
switch (char) {
|
811
|
-
case ",": {
|
812
|
-
stack.pop();
|
813
|
-
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
814
|
-
break;
|
815
|
-
}
|
816
|
-
case "]": {
|
817
|
-
lastValidIndex = i;
|
818
|
-
stack.pop();
|
819
|
-
break;
|
820
|
-
}
|
821
|
-
}
|
822
|
-
}
|
823
|
-
for (let i = 0; i < input.length; i++) {
|
824
|
-
const char = input[i];
|
825
|
-
const currentState = stack[stack.length - 1];
|
826
|
-
switch (currentState) {
|
827
|
-
case "ROOT":
|
828
|
-
processValueStart(char, i, "FINISH");
|
829
|
-
break;
|
830
|
-
case "INSIDE_OBJECT_START": {
|
831
|
-
switch (char) {
|
832
|
-
case '"': {
|
833
|
-
stack.pop();
|
834
|
-
stack.push("INSIDE_OBJECT_KEY");
|
835
|
-
break;
|
836
|
-
}
|
837
|
-
case "}": {
|
838
|
-
lastValidIndex = i;
|
839
|
-
stack.pop();
|
840
|
-
break;
|
841
|
-
}
|
842
|
-
}
|
843
|
-
break;
|
844
|
-
}
|
845
|
-
case "INSIDE_OBJECT_AFTER_COMMA": {
|
846
|
-
switch (char) {
|
847
|
-
case '"': {
|
848
|
-
stack.pop();
|
849
|
-
stack.push("INSIDE_OBJECT_KEY");
|
850
|
-
break;
|
851
|
-
}
|
852
|
-
}
|
853
|
-
break;
|
854
|
-
}
|
855
|
-
case "INSIDE_OBJECT_KEY": {
|
856
|
-
switch (char) {
|
857
|
-
case '"': {
|
858
|
-
stack.pop();
|
859
|
-
stack.push("INSIDE_OBJECT_AFTER_KEY");
|
860
|
-
break;
|
861
|
-
}
|
862
|
-
}
|
863
|
-
break;
|
864
|
-
}
|
865
|
-
case "INSIDE_OBJECT_AFTER_KEY": {
|
866
|
-
switch (char) {
|
867
|
-
case ":": {
|
868
|
-
stack.pop();
|
869
|
-
stack.push("INSIDE_OBJECT_BEFORE_VALUE");
|
870
|
-
break;
|
871
|
-
}
|
872
|
-
}
|
873
|
-
break;
|
874
|
-
}
|
875
|
-
case "INSIDE_OBJECT_BEFORE_VALUE": {
|
876
|
-
processValueStart(char, i, "INSIDE_OBJECT_AFTER_VALUE");
|
877
|
-
break;
|
878
|
-
}
|
879
|
-
case "INSIDE_OBJECT_AFTER_VALUE": {
|
880
|
-
processAfterObjectValue(char, i);
|
881
|
-
break;
|
882
|
-
}
|
883
|
-
case "INSIDE_STRING": {
|
884
|
-
switch (char) {
|
885
|
-
case '"': {
|
886
|
-
stack.pop();
|
887
|
-
lastValidIndex = i;
|
888
|
-
break;
|
889
|
-
}
|
890
|
-
case "\\": {
|
891
|
-
stack.push("INSIDE_STRING_ESCAPE");
|
892
|
-
break;
|
893
|
-
}
|
894
|
-
default: {
|
895
|
-
lastValidIndex = i;
|
896
|
-
}
|
897
|
-
}
|
898
|
-
break;
|
899
|
-
}
|
900
|
-
case "INSIDE_ARRAY_START": {
|
901
|
-
switch (char) {
|
902
|
-
case "]": {
|
903
|
-
lastValidIndex = i;
|
904
|
-
stack.pop();
|
905
|
-
break;
|
906
|
-
}
|
907
|
-
default: {
|
908
|
-
lastValidIndex = i;
|
909
|
-
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
910
|
-
break;
|
911
|
-
}
|
912
|
-
}
|
913
|
-
break;
|
914
|
-
}
|
915
|
-
case "INSIDE_ARRAY_AFTER_VALUE": {
|
916
|
-
switch (char) {
|
917
|
-
case ",": {
|
918
|
-
stack.pop();
|
919
|
-
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
920
|
-
break;
|
921
|
-
}
|
922
|
-
case "]": {
|
923
|
-
lastValidIndex = i;
|
924
|
-
stack.pop();
|
925
|
-
break;
|
926
|
-
}
|
927
|
-
default: {
|
928
|
-
lastValidIndex = i;
|
929
|
-
break;
|
930
|
-
}
|
931
|
-
}
|
932
|
-
break;
|
933
|
-
}
|
934
|
-
case "INSIDE_ARRAY_AFTER_COMMA": {
|
935
|
-
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
936
|
-
break;
|
937
|
-
}
|
938
|
-
case "INSIDE_STRING_ESCAPE": {
|
939
|
-
stack.pop();
|
940
|
-
lastValidIndex = i;
|
941
|
-
break;
|
942
|
-
}
|
943
|
-
case "INSIDE_NUMBER": {
|
944
|
-
switch (char) {
|
945
|
-
case "0":
|
946
|
-
case "1":
|
947
|
-
case "2":
|
948
|
-
case "3":
|
949
|
-
case "4":
|
950
|
-
case "5":
|
951
|
-
case "6":
|
952
|
-
case "7":
|
953
|
-
case "8":
|
954
|
-
case "9": {
|
955
|
-
lastValidIndex = i;
|
956
|
-
break;
|
957
|
-
}
|
958
|
-
case "e":
|
959
|
-
case "E":
|
960
|
-
case "-":
|
961
|
-
case ".": {
|
962
|
-
break;
|
963
|
-
}
|
964
|
-
case ",": {
|
965
|
-
stack.pop();
|
966
|
-
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
|
967
|
-
processAfterArrayValue(char, i);
|
968
|
-
}
|
969
|
-
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
|
970
|
-
processAfterObjectValue(char, i);
|
971
|
-
}
|
972
|
-
break;
|
973
|
-
}
|
974
|
-
case "}": {
|
975
|
-
stack.pop();
|
976
|
-
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
|
977
|
-
processAfterObjectValue(char, i);
|
978
|
-
}
|
979
|
-
break;
|
980
|
-
}
|
981
|
-
case "]": {
|
982
|
-
stack.pop();
|
983
|
-
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
|
984
|
-
processAfterArrayValue(char, i);
|
985
|
-
}
|
986
|
-
break;
|
987
|
-
}
|
988
|
-
default: {
|
989
|
-
stack.pop();
|
990
|
-
break;
|
991
|
-
}
|
992
|
-
}
|
993
|
-
break;
|
994
|
-
}
|
995
|
-
case "INSIDE_LITERAL": {
|
996
|
-
const partialLiteral = input.substring(literalStart, i + 1);
|
997
|
-
if (!"false".startsWith(partialLiteral) && !"true".startsWith(partialLiteral) && !"null".startsWith(partialLiteral)) {
|
998
|
-
stack.pop();
|
999
|
-
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
|
1000
|
-
processAfterObjectValue(char, i);
|
1001
|
-
} else if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
|
1002
|
-
processAfterArrayValue(char, i);
|
1003
|
-
}
|
1004
|
-
} else {
|
1005
|
-
lastValidIndex = i;
|
1006
|
-
}
|
1007
|
-
break;
|
1008
|
-
}
|
1009
|
-
}
|
1010
|
-
}
|
1011
|
-
let result = input.slice(0, lastValidIndex + 1);
|
1012
|
-
for (let i = stack.length - 1; i >= 0; i--) {
|
1013
|
-
const state = stack[i];
|
1014
|
-
switch (state) {
|
1015
|
-
case "INSIDE_STRING": {
|
1016
|
-
result += '"';
|
1017
|
-
break;
|
1018
|
-
}
|
1019
|
-
case "INSIDE_OBJECT_KEY":
|
1020
|
-
case "INSIDE_OBJECT_AFTER_KEY":
|
1021
|
-
case "INSIDE_OBJECT_AFTER_COMMA":
|
1022
|
-
case "INSIDE_OBJECT_START":
|
1023
|
-
case "INSIDE_OBJECT_BEFORE_VALUE":
|
1024
|
-
case "INSIDE_OBJECT_AFTER_VALUE": {
|
1025
|
-
result += "}";
|
1026
|
-
break;
|
1027
|
-
}
|
1028
|
-
case "INSIDE_ARRAY_START":
|
1029
|
-
case "INSIDE_ARRAY_AFTER_COMMA":
|
1030
|
-
case "INSIDE_ARRAY_AFTER_VALUE": {
|
1031
|
-
result += "]";
|
1032
|
-
break;
|
1033
|
-
}
|
1034
|
-
case "INSIDE_LITERAL": {
|
1035
|
-
const partialLiteral = input.substring(literalStart, input.length);
|
1036
|
-
if ("true".startsWith(partialLiteral)) {
|
1037
|
-
result += "true".slice(partialLiteral.length);
|
1038
|
-
} else if ("false".startsWith(partialLiteral)) {
|
1039
|
-
result += "false".slice(partialLiteral.length);
|
1040
|
-
} else if ("null".startsWith(partialLiteral)) {
|
1041
|
-
result += "null".slice(partialLiteral.length);
|
1042
|
-
}
|
1043
|
-
}
|
1044
|
-
}
|
1045
|
-
}
|
1046
|
-
return result;
|
1047
|
-
}
|
1048
|
-
|
1049
|
-
// core/util/parse-partial-json.ts
|
1050
|
-
function parsePartialJson(jsonText) {
|
1051
|
-
if (jsonText == null) {
|
1052
|
-
return void 0;
|
1053
|
-
}
|
1054
|
-
try {
|
1055
|
-
return SecureJSON.parse(jsonText);
|
1056
|
-
} catch (ignored) {
|
1057
|
-
try {
|
1058
|
-
const fixedJsonText = fixJson(jsonText);
|
1059
|
-
return SecureJSON.parse(fixedJsonText);
|
1060
|
-
} catch (ignored2) {
|
1061
|
-
}
|
700
|
+
// core/util/prepare-response-headers.ts
|
701
|
+
function prepareResponseHeaders(init, { contentType }) {
|
702
|
+
var _a;
|
703
|
+
const headers = new Headers((_a = init == null ? void 0 : init.headers) != null ? _a : {});
|
704
|
+
if (!headers.has("Content-Type")) {
|
705
|
+
headers.set("Content-Type", contentType);
|
1062
706
|
}
|
1063
|
-
return
|
707
|
+
return headers;
|
1064
708
|
}
|
1065
709
|
|
1066
710
|
// core/generate-object/stream-object.ts
|
1067
|
-
import { safeValidateTypes } from "@ai-sdk/provider-utils";
|
1068
711
|
async function streamObject({
|
1069
712
|
model,
|
1070
713
|
schema,
|
@@ -1218,23 +861,39 @@ var StreamObjectResult = class {
|
|
1218
861
|
let object;
|
1219
862
|
let error;
|
1220
863
|
let accumulatedText = "";
|
864
|
+
let delta = "";
|
1221
865
|
let latestObject = void 0;
|
1222
866
|
this.originalStream = stream.pipeThrough(
|
1223
867
|
new TransformStream({
|
1224
868
|
async transform(chunk, controller) {
|
1225
869
|
if (typeof chunk === "string") {
|
1226
870
|
accumulatedText += chunk;
|
871
|
+
delta += chunk;
|
1227
872
|
const currentObject = parsePartialJson(
|
1228
873
|
accumulatedText
|
1229
874
|
);
|
1230
875
|
if (!isDeepEqualData(latestObject, currentObject)) {
|
1231
876
|
latestObject = currentObject;
|
1232
|
-
controller.enqueue({
|
877
|
+
controller.enqueue({
|
878
|
+
type: "object",
|
879
|
+
object: currentObject
|
880
|
+
});
|
881
|
+
controller.enqueue({
|
882
|
+
type: "text-delta",
|
883
|
+
textDelta: delta
|
884
|
+
});
|
885
|
+
delta = "";
|
1233
886
|
}
|
1234
887
|
return;
|
1235
888
|
}
|
1236
889
|
switch (chunk.type) {
|
1237
890
|
case "finish": {
|
891
|
+
if (delta !== "") {
|
892
|
+
controller.enqueue({
|
893
|
+
type: "text-delta",
|
894
|
+
textDelta: delta
|
895
|
+
});
|
896
|
+
}
|
1238
897
|
usage = calculateTokenUsage(chunk.usage);
|
1239
898
|
controller.enqueue({ ...chunk, usage });
|
1240
899
|
resolveUsage(usage);
|
@@ -1278,6 +937,12 @@ var StreamObjectResult = class {
|
|
1278
937
|
})
|
1279
938
|
);
|
1280
939
|
}
|
940
|
+
/**
|
941
|
+
Stream of partial objects. It gets more complete as the stream progresses.
|
942
|
+
|
943
|
+
Note that the partial object is not validated.
|
944
|
+
If you want to be certain that the actual content matches your schema, you need to implement your own validation for partial results.
|
945
|
+
*/
|
1281
946
|
get partialObjectStream() {
|
1282
947
|
return createAsyncIterableStream(this.originalStream, {
|
1283
948
|
transform(chunk, controller) {
|
@@ -1285,6 +950,7 @@ var StreamObjectResult = class {
|
|
1285
950
|
case "object":
|
1286
951
|
controller.enqueue(chunk.object);
|
1287
952
|
break;
|
953
|
+
case "text-delta":
|
1288
954
|
case "finish":
|
1289
955
|
break;
|
1290
956
|
case "error":
|
@@ -1298,6 +964,34 @@ var StreamObjectResult = class {
|
|
1298
964
|
}
|
1299
965
|
});
|
1300
966
|
}
|
967
|
+
/**
|
968
|
+
Text stream of the JSON representation of the generated object. It contains text chunks.
|
969
|
+
When the stream is finished, the object is valid JSON that can be parsed.
|
970
|
+
*/
|
971
|
+
get textStream() {
|
972
|
+
return createAsyncIterableStream(this.originalStream, {
|
973
|
+
transform(chunk, controller) {
|
974
|
+
switch (chunk.type) {
|
975
|
+
case "text-delta":
|
976
|
+
controller.enqueue(chunk.textDelta);
|
977
|
+
break;
|
978
|
+
case "object":
|
979
|
+
case "finish":
|
980
|
+
break;
|
981
|
+
case "error":
|
982
|
+
controller.error(chunk.error);
|
983
|
+
break;
|
984
|
+
default: {
|
985
|
+
const _exhaustiveCheck = chunk;
|
986
|
+
throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);
|
987
|
+
}
|
988
|
+
}
|
989
|
+
}
|
990
|
+
});
|
991
|
+
}
|
992
|
+
/**
|
993
|
+
Stream of different types of events, including partial objects, errors, and finish events.
|
994
|
+
*/
|
1301
995
|
get fullStream() {
|
1302
996
|
return createAsyncIterableStream(this.originalStream, {
|
1303
997
|
transform(chunk, controller) {
|
@@ -1305,6 +999,53 @@ var StreamObjectResult = class {
|
|
1305
999
|
}
|
1306
1000
|
});
|
1307
1001
|
}
|
1002
|
+
/**
|
1003
|
+
Writes text delta output to a Node.js response-like object.
|
1004
|
+
It sets a `Content-Type` header to `text/plain; charset=utf-8` and
|
1005
|
+
writes each text delta as a separate chunk.
|
1006
|
+
|
1007
|
+
@param response A Node.js response-like object (ServerResponse).
|
1008
|
+
@param init Optional headers and status code.
|
1009
|
+
*/
|
1010
|
+
pipeTextStreamToResponse(response, init) {
|
1011
|
+
var _a;
|
1012
|
+
response.writeHead((_a = init == null ? void 0 : init.status) != null ? _a : 200, {
|
1013
|
+
"Content-Type": "text/plain; charset=utf-8",
|
1014
|
+
...init == null ? void 0 : init.headers
|
1015
|
+
});
|
1016
|
+
const reader = this.textStream.pipeThrough(new TextEncoderStream()).getReader();
|
1017
|
+
const read = async () => {
|
1018
|
+
try {
|
1019
|
+
while (true) {
|
1020
|
+
const { done, value } = await reader.read();
|
1021
|
+
if (done)
|
1022
|
+
break;
|
1023
|
+
response.write(value);
|
1024
|
+
}
|
1025
|
+
} catch (error) {
|
1026
|
+
throw error;
|
1027
|
+
} finally {
|
1028
|
+
response.end();
|
1029
|
+
}
|
1030
|
+
};
|
1031
|
+
read();
|
1032
|
+
}
|
1033
|
+
/**
|
1034
|
+
Creates a simple text stream response.
|
1035
|
+
Each text delta is encoded as UTF-8 and sent as a separate chunk.
|
1036
|
+
Non-text-delta events are ignored.
|
1037
|
+
|
1038
|
+
@param init Optional headers and status code.
|
1039
|
+
*/
|
1040
|
+
toTextStreamResponse(init) {
|
1041
|
+
var _a;
|
1042
|
+
return new Response(this.textStream.pipeThrough(new TextEncoderStream()), {
|
1043
|
+
status: (_a = init == null ? void 0 : init.status) != null ? _a : 200,
|
1044
|
+
headers: prepareResponseHeaders(init, {
|
1045
|
+
contentType: "text/plain; charset=utf-8"
|
1046
|
+
})
|
1047
|
+
});
|
1048
|
+
}
|
1308
1049
|
};
|
1309
1050
|
var experimental_streamObject = streamObject;
|
1310
1051
|
|
@@ -1509,16 +1250,6 @@ function toResponseMessages({
|
|
1509
1250
|
}
|
1510
1251
|
var experimental_generateText = generateText;
|
1511
1252
|
|
1512
|
-
// core/util/prepare-response-headers.ts
|
1513
|
-
function prepareResponseHeaders(init, { contentType }) {
|
1514
|
-
var _a;
|
1515
|
-
const headers = new Headers((_a = init == null ? void 0 : init.headers) != null ? _a : {});
|
1516
|
-
if (!headers.has("Content-Type")) {
|
1517
|
-
headers.set("Content-Type", contentType);
|
1518
|
-
}
|
1519
|
-
return headers;
|
1520
|
-
}
|
1521
|
-
|
1522
1253
|
// core/generate-text/run-tools-transformation.ts
|
1523
1254
|
import { NoSuchToolError as NoSuchToolError2 } from "@ai-sdk/provider";
|
1524
1255
|
import { generateId } from "@ai-sdk/ui-utils";
|