@ai-sdk/gateway 3.0.52 → 3.0.53

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ai-sdk/gateway
2
2
 
3
+ ## 3.0.53
4
+
5
+ ### Patch Changes
6
+
7
+ - 73b7e09: feat (provider/gateway): add SSE support for video generation with heartbeat keep-alive
8
+
3
9
  ## 3.0.52
4
10
 
5
11
  ### Patch Changes
package/dist/index.js CHANGED
@@ -941,6 +941,7 @@ var gatewayImageResponseSchema = import_v47.z.object({
941
941
  });
942
942
 
943
943
  // src/gateway-video-model.ts
944
+ var import_provider2 = require("@ai-sdk/provider");
944
945
  var import_provider_utils8 = require("@ai-sdk/provider-utils");
945
946
  var import_v48 = require("zod/v4");
946
947
  var GatewayVideoModel = class {
@@ -970,17 +971,14 @@ var GatewayVideoModel = class {
970
971
  var _a9;
971
972
  const resolvedHeaders = await (0, import_provider_utils8.resolve)(this.config.headers());
972
973
  try {
973
- const {
974
- responseHeaders,
975
- value: responseBody,
976
- rawValue
977
- } = await (0, import_provider_utils8.postJsonToApi)({
974
+ const { responseHeaders, value: responseBody } = await (0, import_provider_utils8.postJsonToApi)({
978
975
  url: this.getUrl(),
979
976
  headers: (0, import_provider_utils8.combineHeaders)(
980
977
  resolvedHeaders,
981
978
  headers != null ? headers : {},
982
979
  this.getModelConfigHeaders(),
983
- await (0, import_provider_utils8.resolve)(this.config.o11yHeaders)
980
+ await (0, import_provider_utils8.resolve)(this.config.o11yHeaders),
981
+ { accept: "text/event-stream" }
984
982
  ),
985
983
  body: {
986
984
  prompt,
@@ -993,9 +991,70 @@ var GatewayVideoModel = class {
993
991
  ...providerOptions && { providerOptions },
994
992
  ...image && { image: maybeEncodeVideoFile(image) }
995
993
  },
996
- successfulResponseHandler: (0, import_provider_utils8.createJsonResponseHandler)(
997
- gatewayVideoResponseSchema
998
- ),
994
+ successfulResponseHandler: async ({
995
+ response,
996
+ url,
997
+ requestBodyValues
998
+ }) => {
999
+ if (response.body == null) {
1000
+ throw new import_provider2.APICallError({
1001
+ message: "SSE response body is empty",
1002
+ url,
1003
+ requestBodyValues,
1004
+ statusCode: response.status
1005
+ });
1006
+ }
1007
+ const eventStream = (0, import_provider_utils8.parseJsonEventStream)({
1008
+ stream: response.body,
1009
+ schema: gatewayVideoEventSchema
1010
+ });
1011
+ const reader = eventStream.getReader();
1012
+ const { done, value: parseResult } = await reader.read();
1013
+ reader.releaseLock();
1014
+ if (done || !parseResult) {
1015
+ throw new import_provider2.APICallError({
1016
+ message: "SSE stream ended without a data event",
1017
+ url,
1018
+ requestBodyValues,
1019
+ statusCode: response.status
1020
+ });
1021
+ }
1022
+ if (!parseResult.success) {
1023
+ throw new import_provider2.APICallError({
1024
+ message: "Failed to parse video SSE event",
1025
+ cause: parseResult.error,
1026
+ url,
1027
+ requestBodyValues,
1028
+ statusCode: response.status
1029
+ });
1030
+ }
1031
+ const event = parseResult.value;
1032
+ if (event.type === "error") {
1033
+ throw new import_provider2.APICallError({
1034
+ message: event.message,
1035
+ statusCode: event.statusCode,
1036
+ url,
1037
+ requestBodyValues,
1038
+ responseHeaders: Object.fromEntries([...response.headers]),
1039
+ responseBody: JSON.stringify(event),
1040
+ data: {
1041
+ error: {
1042
+ message: event.message,
1043
+ type: event.errorType,
1044
+ param: event.param
1045
+ }
1046
+ }
1047
+ });
1048
+ }
1049
+ return {
1050
+ value: {
1051
+ videos: event.videos,
1052
+ warnings: event.warnings,
1053
+ providerMetadata: event.providerMetadata
1054
+ },
1055
+ responseHeaders: Object.fromEntries([...response.headers])
1056
+ };
1057
+ },
999
1058
  failedResponseHandler: (0, import_provider_utils8.createJsonErrorResponseHandler)({
1000
1059
  errorSchema: import_v48.z.any(),
1001
1060
  errorToMessage: (data) => data
@@ -1067,11 +1126,21 @@ var gatewayVideoWarningSchema = import_v48.z.discriminatedUnion("type", [
1067
1126
  message: import_v48.z.string()
1068
1127
  })
1069
1128
  ]);
1070
- var gatewayVideoResponseSchema = import_v48.z.object({
1071
- videos: import_v48.z.array(gatewayVideoDataSchema),
1072
- warnings: import_v48.z.array(gatewayVideoWarningSchema).optional(),
1073
- providerMetadata: import_v48.z.record(import_v48.z.string(), providerMetadataEntrySchema2).optional()
1074
- });
1129
+ var gatewayVideoEventSchema = import_v48.z.discriminatedUnion("type", [
1130
+ import_v48.z.object({
1131
+ type: import_v48.z.literal("result"),
1132
+ videos: import_v48.z.array(gatewayVideoDataSchema),
1133
+ warnings: import_v48.z.array(gatewayVideoWarningSchema).optional(),
1134
+ providerMetadata: import_v48.z.record(import_v48.z.string(), providerMetadataEntrySchema2).optional()
1135
+ }),
1136
+ import_v48.z.object({
1137
+ type: import_v48.z.literal("error"),
1138
+ message: import_v48.z.string(),
1139
+ errorType: import_v48.z.string(),
1140
+ statusCode: import_v48.z.number(),
1141
+ param: import_v48.z.unknown().nullable()
1142
+ })
1143
+ ]);
1075
1144
 
1076
1145
  // src/tool/parallel-search.ts
1077
1146
  var import_provider_utils9 = require("@ai-sdk/provider-utils");
@@ -1267,7 +1336,7 @@ async function getVercelRequestId() {
1267
1336
  var import_provider_utils12 = require("@ai-sdk/provider-utils");
1268
1337
 
1269
1338
  // src/version.ts
1270
- var VERSION = true ? "3.0.52" : "0.0.0-test";
1339
+ var VERSION = true ? "3.0.53" : "0.0.0-test";
1271
1340
 
1272
1341
  // src/gateway-provider.ts
1273
1342
  var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";