@ai-sdk/bytedance 2.0.7 → 2.0.8

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,15 @@
1
1
  # @ai-sdk/bytedance
2
2
 
3
+ ## 2.0.8
4
+
5
+ ### Patch Changes
6
+
7
+ - b0650cb: fix(bytedance): rename inconsistent `ByteDanceVideoProviderOptions` to `ByteDanceVideoModelOptions`
8
+ - 0f93c57: feat (video): support video (not just image) reference inputs in `inputReferences` for reference-to-video generation
9
+ - Updated dependencies [0f93c57]
10
+ - @ai-sdk/provider@4.0.3
11
+ - @ai-sdk/provider-utils@5.0.7
12
+
3
13
  ## 2.0.7
4
14
 
5
15
  ### Patch Changes
package/README.md CHANGED
@@ -39,7 +39,7 @@ Generate video from a text prompt.
39
39
  Available models: `seedance-1-5-pro-251215`, `seedance-1-0-pro-250528`, `seedance-1-0-pro-fast-251015`, `seedance-1-0-lite-t2v-250428`
40
40
 
41
41
  ```ts
42
- import { byteDance } from '@ai-sdk/bytedance';
42
+ import { byteDance, type ByteDanceVideoModelOptions } from '@ai-sdk/bytedance';
43
43
  import { experimental_generateVideo as generateVideo } from 'ai';
44
44
 
45
45
  const { video } = await generateVideo({
@@ -50,7 +50,7 @@ const { video } = await generateVideo({
50
50
  providerOptions: {
51
51
  bytedance: {
52
52
  watermark: false,
53
- },
53
+ } satisfies ByteDanceVideoModelOptions,
54
54
  },
55
55
  });
56
56
 
@@ -64,7 +64,7 @@ Generate video from a first-frame image with an optional text prompt.
64
64
  Available models: `seedance-1-5-pro-251215`, `seedance-1-0-pro-250528`, `seedance-1-0-pro-fast-251015`, `seedance-1-0-lite-i2v-250428`
65
65
 
66
66
  ```ts
67
- import { byteDance } from '@ai-sdk/bytedance';
67
+ import { byteDance, type ByteDanceVideoModelOptions } from '@ai-sdk/bytedance';
68
68
  import { experimental_generateVideo as generateVideo } from 'ai';
69
69
 
70
70
  const { video } = await generateVideo({
@@ -77,7 +77,7 @@ const { video } = await generateVideo({
77
77
  providerOptions: {
78
78
  bytedance: {
79
79
  watermark: false,
80
- },
80
+ } satisfies ByteDanceVideoModelOptions,
81
81
  },
82
82
  });
83
83
  ```
@@ -87,7 +87,7 @@ const { video } = await generateVideo({
87
87
  Seedance 1.5 Pro supports generating synchronized audio alongside the video.
88
88
 
89
89
  ```ts
90
- import { byteDance } from '@ai-sdk/bytedance';
90
+ import { byteDance, type ByteDanceVideoModelOptions } from '@ai-sdk/bytedance';
91
91
  import { experimental_generateVideo as generateVideo } from 'ai';
92
92
 
93
93
  const { video } = await generateVideo({
@@ -101,7 +101,7 @@ const { video } = await generateVideo({
101
101
  bytedance: {
102
102
  generateAudio: true,
103
103
  watermark: false,
104
- },
104
+ } satisfies ByteDanceVideoModelOptions,
105
105
  },
106
106
  });
107
107
  ```
@@ -111,7 +111,7 @@ const { video } = await generateVideo({
111
111
  Generate smooth transitions between a starting and ending keyframe image.
112
112
 
113
113
  ```ts
114
- import { byteDance } from '@ai-sdk/bytedance';
114
+ import { byteDance, type ByteDanceVideoModelOptions } from '@ai-sdk/bytedance';
115
115
  import { experimental_generateVideo as generateVideo } from 'ai';
116
116
 
117
117
  const { video } = await generateVideo({
@@ -126,7 +126,7 @@ const { video } = await generateVideo({
126
126
  lastFrameImage: 'https://example.com/last-frame.jpg',
127
127
  generateAudio: true,
128
128
  watermark: false,
129
- },
129
+ } satisfies ByteDanceVideoModelOptions,
130
130
  },
131
131
  });
132
132
  ```
@@ -138,7 +138,7 @@ Provide multiple reference images (1-4) that the model uses to faithfully reprod
138
138
  Available models: `seedance-1-0-lite-i2v-250428`
139
139
 
140
140
  ```ts
141
- import { byteDance } from '@ai-sdk/bytedance';
141
+ import { byteDance, type ByteDanceVideoModelOptions } from '@ai-sdk/bytedance';
142
142
  import { experimental_generateVideo as generateVideo } from 'ai';
143
143
 
144
144
  const { video } = await generateVideo({
@@ -155,27 +155,30 @@ const { video } = await generateVideo({
155
155
  'https://example.com/lawn.png',
156
156
  ],
157
157
  watermark: false,
158
- },
158
+ } satisfies ByteDanceVideoModelOptions,
159
159
  },
160
160
  });
161
161
  ```
162
162
 
163
163
  ## Provider Options
164
164
 
165
- Use `providerOptions.bytedance` to configure video generation:
166
-
167
- | Option | Description |
168
- | ----------------- | -------------------------------------------------------------------------------------- |
169
- | `watermark` | Whether to add a watermark to the generated video |
170
- | `generateAudio` | Generate synchronized audio (Seedance 1.5 Pro only) |
171
- | `cameraFixed` | Whether to fix the camera during generation |
172
- | `returnLastFrame` | Return the last frame of the generated video (useful for chaining) |
173
- | `serviceTier` | `'default'` for online inference, `'flex'` for offline at 50% price |
174
- | `draft` | Enable draft mode for low-cost 480p preview generation (Seedance 1.5 Pro only) |
175
- | `lastFrameImage` | URL of last frame image for first-and-last frame generation |
176
- | `referenceImages` | Array of reference image URLs (1-4) for multi-reference generation (1.0 Lite I2V only) |
177
- | `pollIntervalMs` | Poll interval for async generation (default: 3000ms) |
178
- | `pollTimeoutMs` | Max wait time for generation (default: 300000ms) |
165
+ Use `providerOptions.bytedance` to configure video generation. You can type the
166
+ object with `ByteDanceVideoModelOptions`.
167
+
168
+ | Option | Description |
169
+ | ----------------- | ------------------------------------------------------------------------------ |
170
+ | `watermark` | Whether to add a watermark to the generated video |
171
+ | `generateAudio` | Generate synchronized audio for supported Seedance models |
172
+ | `cameraFixed` | Whether to fix the camera during generation |
173
+ | `returnLastFrame` | Return the last frame of the generated video (useful for chaining) |
174
+ | `serviceTier` | `'default'` for online inference, `'flex'` for offline at 50% price |
175
+ | `draft` | Enable draft mode for low-cost 480p preview generation (Seedance 1.5 Pro only) |
176
+ | `lastFrameImage` | URL of last frame image for first-and-last frame generation |
177
+ | `referenceImages` | Array of reference image URLs for multi-reference generation |
178
+ | `referenceVideos` | Array of reference video URLs for reference-guided generation |
179
+ | `referenceAudio` | Array of reference audio URLs for audio-guided generation |
180
+ | `pollIntervalMs` | Poll interval for async generation (default: 3000ms) |
181
+ | `pollTimeoutMs` | Max wait time for generation (default: 300000ms) |
179
182
 
180
183
  Supported aspect ratios: `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`, `adaptive` (image-to-video only).
181
184
 
package/dist/index.d.ts CHANGED
@@ -43,7 +43,7 @@ declare function createByteDance(options?: ByteDanceProviderSettings): ByteDance
43
43
  */
44
44
  declare const byteDance: ByteDanceProvider;
45
45
 
46
- type ByteDanceVideoProviderOptions = {
46
+ type ByteDanceVideoModelOptions = {
47
47
  watermark?: boolean | null;
48
48
  generateAudio?: boolean | null;
49
49
  cameraFixed?: boolean | null;
@@ -61,4 +61,4 @@ type ByteDanceVideoProviderOptions = {
61
61
 
62
62
  declare const VERSION: string;
63
63
 
64
- export { type ByteDanceProvider, type ByteDanceProviderSettings, type ByteDanceVideoModelId, type ByteDanceVideoProviderOptions, VERSION, byteDance, createByteDance };
64
+ export { type ByteDanceProvider, type ByteDanceProviderSettings, type ByteDanceVideoModelId, type ByteDanceVideoModelOptions, type ByteDanceVideoModelOptions as ByteDanceVideoProviderOptions, VERSION, byteDance, createByteDance };
package/dist/index.js CHANGED
@@ -18,28 +18,17 @@ import {
18
18
  createJsonResponseHandler,
19
19
  delay,
20
20
  getFromApi,
21
- lazySchema,
21
+ getTopLevelMediaType,
22
22
  parseProviderOptions,
23
23
  postJsonToApi,
24
- resolve,
25
- zodSchema
24
+ resolve
26
25
  } from "@ai-sdk/provider-utils";
26
+ import { z as z2 } from "zod/v4";
27
+
28
+ // src/bytedance-video-model-options.ts
29
+ import { lazySchema, zodSchema } from "@ai-sdk/provider-utils";
27
30
  import { z } from "zod/v4";
28
- var HANDLED_PROVIDER_OPTIONS = /* @__PURE__ */ new Set([
29
- "watermark",
30
- "generateAudio",
31
- "cameraFixed",
32
- "returnLastFrame",
33
- "serviceTier",
34
- "draft",
35
- "lastFrameImage",
36
- "referenceImages",
37
- "referenceVideos",
38
- "referenceAudio",
39
- "pollIntervalMs",
40
- "pollTimeoutMs"
41
- ]);
42
- var byteDanceVideoProviderOptionsSchema = lazySchema(
31
+ var byteDanceVideoModelOptionsSchema = lazySchema(
43
32
  () => zodSchema(
44
33
  z.looseObject({
45
34
  watermark: z.boolean().nullish(),
@@ -57,6 +46,22 @@ var byteDanceVideoProviderOptionsSchema = lazySchema(
57
46
  })
58
47
  )
59
48
  );
49
+
50
+ // src/bytedance-video-model.ts
51
+ var HANDLED_PROVIDER_OPTIONS = /* @__PURE__ */ new Set([
52
+ "watermark",
53
+ "generateAudio",
54
+ "cameraFixed",
55
+ "returnLastFrame",
56
+ "serviceTier",
57
+ "draft",
58
+ "lastFrameImage",
59
+ "referenceImages",
60
+ "referenceVideos",
61
+ "referenceAudio",
62
+ "pollIntervalMs",
63
+ "pollTimeoutMs"
64
+ ]);
60
65
  var RESOLUTION_MAP = {
61
66
  "864x496": "480p",
62
67
  "496x864": "480p",
@@ -107,16 +112,42 @@ function resolveStartImage(options) {
107
112
  var _a;
108
113
  return (_a = getFirstFrameImage(options)) != null ? _a : options.image;
109
114
  }
110
- function resolveReferenceImages(options, byteDanceOptions) {
111
- var _a;
115
+ var isVideoFile = (f) => f.mediaType != null && getTopLevelMediaType(f.mediaType) === "video";
116
+ function resolveReferenceContent(options, byteDanceOptions, warnings) {
117
+ var _a, _b;
112
118
  if (options.frameImages != null && options.frameImages.length > 0) {
113
119
  return [];
114
120
  }
115
121
  const inputReferences = options.inputReferences;
116
122
  if (inputReferences != null && inputReferences.length > 0) {
117
- return inputReferences.map((image) => convertImageModelFileToDataUri(image));
123
+ return inputReferences.map((reference) => {
124
+ if (reference.type === "url" && reference.mediaType == null) {
125
+ warnings.push({
126
+ type: "unsupported",
127
+ feature: "inputReferences",
128
+ details: 'ByteDance requires an explicit mediaType to route URL references as video or image. Pass { data: url, mediaType: "video/mp4" } for video references. The reference was treated as an image.'
129
+ });
130
+ }
131
+ const url = convertImageModelFileToDataUri(reference);
132
+ return isVideoFile(reference) ? { type: "video_url", video_url: { url }, role: "reference_video" } : { type: "image_url", image_url: { url }, role: "reference_image" };
133
+ });
118
134
  }
119
- return (_a = byteDanceOptions == null ? void 0 : byteDanceOptions.referenceImages) != null ? _a : [];
135
+ const content = [];
136
+ for (const imageUrl of (_a = byteDanceOptions == null ? void 0 : byteDanceOptions.referenceImages) != null ? _a : []) {
137
+ content.push({
138
+ type: "image_url",
139
+ image_url: { url: imageUrl },
140
+ role: "reference_image"
141
+ });
142
+ }
143
+ for (const videoUrl of (_b = byteDanceOptions == null ? void 0 : byteDanceOptions.referenceVideos) != null ? _b : []) {
144
+ content.push({
145
+ type: "video_url",
146
+ video_url: { url: videoUrl },
147
+ role: "reference_video"
148
+ });
149
+ }
150
+ return content;
120
151
  }
121
152
  function resolveLastFrameImage(options, byteDanceOptions) {
122
153
  var _a, _b, _c;
@@ -145,7 +176,7 @@ var ByteDanceVideoModel = class {
145
176
  const byteDanceOptions = await parseProviderOptions({
146
177
  provider: "bytedance",
147
178
  providerOptions: options.providerOptions,
148
- schema: byteDanceVideoProviderOptionsSchema
179
+ schema: byteDanceVideoModelOptionsSchema
149
180
  });
150
181
  if (options.fps) {
151
182
  warnings.push({
@@ -170,9 +201,10 @@ var ByteDanceVideoModel = class {
170
201
  }
171
202
  const startImage = resolveStartImage(options);
172
203
  const lastFrameImageUrl = resolveLastFrameImage(options, byteDanceOptions);
173
- const referenceImageUrls = resolveReferenceImages(
204
+ const referenceContent = resolveReferenceContent(
174
205
  options,
175
- byteDanceOptions
206
+ byteDanceOptions,
207
+ warnings
176
208
  );
177
209
  if (startImage != null) {
178
210
  content.push({
@@ -188,21 +220,8 @@ var ByteDanceVideoModel = class {
188
220
  role: "last_frame"
189
221
  });
190
222
  }
191
- for (const imageUrl of referenceImageUrls) {
192
- content.push({
193
- type: "image_url",
194
- image_url: { url: imageUrl },
195
- role: "reference_image"
196
- });
197
- }
198
- if ((byteDanceOptions == null ? void 0 : byteDanceOptions.referenceVideos) != null && byteDanceOptions.referenceVideos.length > 0) {
199
- for (const videoUrl2 of byteDanceOptions.referenceVideos) {
200
- content.push({
201
- type: "video_url",
202
- video_url: { url: videoUrl2 },
203
- role: "reference_video"
204
- });
205
- }
223
+ for (const entry of referenceContent) {
224
+ content.push(entry);
206
225
  }
207
226
  if ((byteDanceOptions == null ? void 0 : byteDanceOptions.referenceAudio) != null && byteDanceOptions.referenceAudio.length > 0) {
208
227
  for (const audioUrl of byteDanceOptions.referenceAudio) {
@@ -351,26 +370,26 @@ var ByteDanceVideoModel = class {
351
370
  };
352
371
  }
353
372
  };
354
- var byteDanceTaskResponseSchema = z.object({
355
- id: z.string().nullish()
373
+ var byteDanceTaskResponseSchema = z2.object({
374
+ id: z2.string().nullish()
356
375
  });
357
- var byteDanceStatusResponseSchema = z.object({
358
- id: z.string().nullish(),
359
- model: z.string().nullish(),
360
- status: z.string(),
361
- content: z.object({
362
- video_url: z.string().nullish()
376
+ var byteDanceStatusResponseSchema = z2.object({
377
+ id: z2.string().nullish(),
378
+ model: z2.string().nullish(),
379
+ status: z2.string(),
380
+ content: z2.object({
381
+ video_url: z2.string().nullish()
363
382
  }).nullish(),
364
- usage: z.object({
365
- completion_tokens: z.number().nullish()
383
+ usage: z2.object({
384
+ completion_tokens: z2.number().nullish()
366
385
  }).nullish()
367
386
  });
368
- var byteDanceErrorSchema = z.object({
369
- error: z.object({
370
- message: z.string(),
371
- code: z.string().nullish()
387
+ var byteDanceErrorSchema = z2.object({
388
+ error: z2.object({
389
+ message: z2.string(),
390
+ code: z2.string().nullish()
372
391
  }).nullish(),
373
- message: z.string().nullish()
392
+ message: z2.string().nullish()
374
393
  });
375
394
  var byteDanceFailedResponseHandler = createJsonErrorResponseHandler({
376
395
  errorSchema: byteDanceErrorSchema,
@@ -418,7 +437,7 @@ function createByteDance(options = {}) {
418
437
  var byteDance = createByteDance();
419
438
 
420
439
  // src/version.ts
421
- var VERSION = true ? "2.0.7" : "0.0.0-test";
440
+ var VERSION = true ? "2.0.8" : "0.0.0-test";
422
441
  export {
423
442
  VERSION,
424
443
  byteDance,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bytedance-provider.ts","../src/bytedance-video-model.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type Experimental_VideoModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { ByteDanceVideoModel } from './bytedance-video-model';\nimport type { ByteDanceVideoModelId } from './bytedance-video-settings';\n\nexport interface ByteDanceProviderSettings {\n /**\n * ByteDance Ark API key. Default value is taken from the `ARK_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls.\n * Default: https://ark.ap-southeast.bytepluses.com/api/v3\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface ByteDanceProvider extends ProviderV4 {\n /**\n * Creates a model for video generation.\n */\n video(modelId: ByteDanceVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: ByteDanceVideoModelId): Experimental_VideoModelV4;\n}\n\nconst defaultBaseURL = 'https://ark.ap-southeast.bytepluses.com/api/v3';\n\n/**\n * Create a ByteDance provider instance.\n */\nexport function createByteDance(\n options: ByteDanceProviderSettings = {},\n): ByteDanceProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ARK_API_KEY',\n description: 'ByteDance ModelArk',\n })}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n });\n\n const createVideoModel = (modelId: ByteDanceVideoModelId) =>\n new ByteDanceVideoModel(modelId, {\n provider: 'bytedance.video',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n specificationVersion: 'v4' as const,\n embeddingModel: (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n },\n imageModel: (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n },\n languageModel: (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'languageModel' });\n },\n video: createVideoModel,\n videoModel: createVideoModel,\n };\n}\n\n/**\n * Default ByteDance provider instance.\n */\nexport const byteDance = createByteDance();\n","import {\n AISDKError,\n type Experimental_VideoModelV4,\n type Experimental_VideoModelV4File,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n getFromApi,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ByteDanceConfig } from './bytedance-config';\nimport type { ByteDanceVideoModelId } from './bytedance-video-settings';\n\nexport type ByteDanceVideoProviderOptions = {\n watermark?: boolean | null;\n generateAudio?: boolean | null;\n cameraFixed?: boolean | null;\n returnLastFrame?: boolean | null;\n serviceTier?: 'default' | 'flex' | null;\n draft?: boolean | null;\n lastFrameImage?: string | null;\n referenceImages?: string[] | null;\n referenceVideos?: string[] | null;\n referenceAudio?: string[] | null;\n pollIntervalMs?: number | null;\n pollTimeoutMs?: number | null;\n [key: string]: unknown;\n};\n\nconst HANDLED_PROVIDER_OPTIONS = new Set([\n 'watermark',\n 'generateAudio',\n 'cameraFixed',\n 'returnLastFrame',\n 'serviceTier',\n 'draft',\n 'lastFrameImage',\n 'referenceImages',\n 'referenceVideos',\n 'referenceAudio',\n 'pollIntervalMs',\n 'pollTimeoutMs',\n]);\n\nexport const byteDanceVideoProviderOptionsSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n watermark: z.boolean().nullish(),\n generateAudio: z.boolean().nullish(),\n cameraFixed: z.boolean().nullish(),\n returnLastFrame: z.boolean().nullish(),\n serviceTier: z.enum(['default', 'flex']).nullish(),\n draft: z.boolean().nullish(),\n lastFrameImage: z.string().nullish(),\n referenceImages: z.array(z.string()).nullish(),\n referenceVideos: z.array(z.string()).nullish(),\n referenceAudio: z.array(z.string()).nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n }),\n ),\n);\n\nconst RESOLUTION_MAP: Record<string, string> = {\n '864x496': '480p',\n '496x864': '480p',\n '752x560': '480p',\n '560x752': '480p',\n '640x640': '480p',\n '992x432': '480p',\n '432x992': '480p',\n '864x480': '480p',\n '480x864': '480p',\n '736x544': '480p',\n '544x736': '480p',\n '960x416': '480p',\n '416x960': '480p',\n '832x480': '480p',\n '480x832': '480p',\n '624x624': '480p',\n '1280x720': '720p',\n '720x1280': '720p',\n '1112x834': '720p',\n '834x1112': '720p',\n '960x960': '720p',\n '1470x630': '720p',\n '630x1470': '720p',\n '1248x704': '720p',\n '704x1248': '720p',\n '1120x832': '720p',\n '832x1120': '720p',\n '1504x640': '720p',\n '640x1504': '720p',\n '1920x1080': '1080p',\n '1080x1920': '1080p',\n '1664x1248': '1080p',\n '1248x1664': '1080p',\n '1440x1440': '1080p',\n '2206x946': '1080p',\n '946x2206': '1080p',\n '1920x1088': '1080p',\n '1088x1920': '1080p',\n '2176x928': '1080p',\n '928x2176': '1080p',\n};\n\ninterface ByteDanceVideoModelConfig extends ByteDanceConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nfunction getFirstFrameImage(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n): Experimental_VideoModelV4File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n): Experimental_VideoModelV4File | undefined {\n return getFirstFrameImage(options) ?? options.image;\n}\n\nfunction resolveReferenceImages(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n byteDanceOptions: ByteDanceVideoProviderOptions | undefined,\n): string[] {\n if (options.frameImages != null && options.frameImages.length > 0) {\n return [];\n }\n\n const inputReferences = options.inputReferences;\n\n if (inputReferences != null && inputReferences.length > 0) {\n return inputReferences.map(image => convertImageModelFileToDataUri(image));\n }\n\n return byteDanceOptions?.referenceImages ?? [];\n}\n\nfunction resolveLastFrameImage(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n byteDanceOptions: ByteDanceVideoProviderOptions | undefined,\n): string | undefined {\n const lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n if (lastFrame != null) {\n return convertImageModelFileToDataUri(lastFrame);\n }\n\n return byteDanceOptions?.lastFrameImage ?? undefined;\n}\n\nexport class ByteDanceVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ByteDanceVideoModelId,\n private readonly config: ByteDanceVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n\n const byteDanceOptions = (await parseProviderOptions({\n provider: 'bytedance',\n providerOptions: options.providerOptions,\n schema: byteDanceVideoProviderOptionsSchema,\n })) as ByteDanceVideoProviderOptions | undefined;\n\n // Warn about unsupported standard options\n if (options.fps) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details:\n 'ByteDance video models do not support custom FPS. Frame rate is fixed at 24 fps.',\n });\n }\n\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'ByteDance video models do not support generating multiple videos per call. ' +\n 'Only 1 video will be generated.',\n });\n }\n\n const content: Array<Record<string, unknown>> = [];\n\n if (options.prompt != null) {\n content.push({\n type: 'text',\n text: options.prompt,\n });\n }\n\n const startImage = resolveStartImage(options);\n const lastFrameImageUrl = resolveLastFrameImage(options, byteDanceOptions);\n const referenceImageUrls = resolveReferenceImages(\n options,\n byteDanceOptions,\n );\n\n if (startImage != null) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(startImage) },\n ...(lastFrameImageUrl != null ? { role: 'first_frame' } : {}),\n });\n }\n\n // Add last frame image if provided\n if (lastFrameImageUrl != null) {\n content.push({\n type: 'image_url',\n image_url: { url: lastFrameImageUrl },\n role: 'last_frame',\n });\n }\n\n // Add reference images if provided\n for (const imageUrl of referenceImageUrls) {\n content.push({\n type: 'image_url',\n image_url: { url: imageUrl },\n role: 'reference_image',\n });\n }\n\n // Add reference videos if provided\n if (\n byteDanceOptions?.referenceVideos != null &&\n byteDanceOptions.referenceVideos.length > 0\n ) {\n for (const videoUrl of byteDanceOptions.referenceVideos) {\n content.push({\n type: 'video_url',\n video_url: { url: videoUrl },\n role: 'reference_video',\n });\n }\n }\n\n // Add reference audio if provided\n if (\n byteDanceOptions?.referenceAudio != null &&\n byteDanceOptions.referenceAudio.length > 0\n ) {\n for (const audioUrl of byteDanceOptions.referenceAudio) {\n content.push({\n type: 'audio_url',\n audio_url: { url: audioUrl },\n role: 'reference_audio',\n });\n }\n }\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n content,\n };\n\n if (options.aspectRatio) {\n body.ratio = options.aspectRatio;\n }\n\n if (options.duration) {\n body.duration = options.duration;\n }\n\n if (options.seed) {\n body.seed = options.seed;\n }\n\n if (options.resolution) {\n const mapped = RESOLUTION_MAP[options.resolution];\n if (mapped) {\n body.resolution = mapped;\n } else {\n body.resolution = options.resolution;\n }\n }\n\n const generateAudio =\n options.generateAudio ?? byteDanceOptions?.generateAudio;\n if (generateAudio != null) {\n body.generate_audio = generateAudio;\n }\n\n if (byteDanceOptions != null) {\n if (byteDanceOptions.watermark != null) {\n body.watermark = byteDanceOptions.watermark;\n }\n if (byteDanceOptions.cameraFixed != null) {\n body.camera_fixed = byteDanceOptions.cameraFixed;\n }\n if (byteDanceOptions.returnLastFrame != null) {\n body.return_last_frame = byteDanceOptions.returnLastFrame;\n }\n if (byteDanceOptions.serviceTier != null) {\n body.service_tier = byteDanceOptions.serviceTier;\n }\n if (byteDanceOptions.draft != null) {\n body.draft = byteDanceOptions.draft;\n }\n // Pass through any additional options not explicitly handled\n for (const [key, value] of Object.entries(byteDanceOptions)) {\n if (!HANDLED_PROVIDER_OPTIONS.has(key)) {\n body[key] = value;\n }\n }\n }\n\n const createUrl = `${this.config.baseURL}/contents/generations/tasks`;\n\n const { value: createResponse } = await postJsonToApi({\n url: createUrl,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: byteDanceFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n byteDanceTaskResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.id;\n\n if (!taskId) {\n throw new AISDKError({\n name: 'BYTEDANCE_VIDEO_GENERATION_ERROR',\n message: 'No task ID returned from API',\n });\n }\n\n const pollIntervalMs = byteDanceOptions?.pollIntervalMs ?? 3000;\n const pollTimeoutMs = byteDanceOptions?.pollTimeoutMs ?? 300000;\n\n const startTime = Date.now();\n let response: ByteDanceResponse;\n let responseHeaders: Record<string, string> | undefined;\n\n while (true) {\n const statusUrl = `${this.config.baseURL}/contents/generations/tasks/${taskId}`;\n\n const { value: statusResponse, responseHeaders: statusHeaders } =\n await getFromApi({\n url: statusUrl,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n failedResponseHandler: byteDanceFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n byteDanceStatusResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (statusResponse.status === 'succeeded') {\n response = statusResponse;\n responseHeaders = statusHeaders;\n break;\n }\n\n if (statusResponse.status === 'failed') {\n throw new AISDKError({\n name: 'BYTEDANCE_VIDEO_GENERATION_FAILED',\n message: `Video generation failed: ${JSON.stringify(statusResponse)}`,\n });\n }\n\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'BYTEDANCE_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n await delay(pollIntervalMs, { abortSignal: options.abortSignal });\n }\n\n const videoUrl = response.content?.video_url;\n if (!videoUrl) {\n throw new AISDKError({\n name: 'BYTEDANCE_VIDEO_GENERATION_ERROR',\n message: 'No video URL in response',\n });\n }\n\n return {\n videos: [\n {\n type: 'url',\n url: videoUrl,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n bytedance: {\n taskId,\n usage: response.usage,\n },\n },\n };\n }\n}\n\nconst byteDanceTaskResponseSchema = z.object({\n id: z.string().nullish(),\n});\n\ntype ByteDanceResponse = z.infer<typeof byteDanceStatusResponseSchema>;\n\nconst byteDanceStatusResponseSchema = z.object({\n id: z.string().nullish(),\n model: z.string().nullish(),\n status: z.string(),\n content: z\n .object({\n video_url: z.string().nullish(),\n })\n .nullish(),\n usage: z\n .object({\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nconst byteDanceErrorSchema = z.object({\n error: z\n .object({\n message: z.string(),\n code: z.string().nullish(),\n })\n .nullish(),\n message: z.string().nullish(),\n});\n\nconst byteDanceFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: byteDanceErrorSchema,\n errorToMessage: data =>\n data.error?.message ?? data.message ?? 'Unknown error',\n});\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["videoUrl"]}
1
+ {"version":3,"sources":["../src/bytedance-provider.ts","../src/bytedance-video-model.ts","../src/bytedance-video-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type Experimental_VideoModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { ByteDanceVideoModel } from './bytedance-video-model';\nimport type { ByteDanceVideoModelId } from './bytedance-video-settings';\n\nexport interface ByteDanceProviderSettings {\n /**\n * ByteDance Ark API key. Default value is taken from the `ARK_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls.\n * Default: https://ark.ap-southeast.bytepluses.com/api/v3\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface ByteDanceProvider extends ProviderV4 {\n /**\n * Creates a model for video generation.\n */\n video(modelId: ByteDanceVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: ByteDanceVideoModelId): Experimental_VideoModelV4;\n}\n\nconst defaultBaseURL = 'https://ark.ap-southeast.bytepluses.com/api/v3';\n\n/**\n * Create a ByteDance provider instance.\n */\nexport function createByteDance(\n options: ByteDanceProviderSettings = {},\n): ByteDanceProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ARK_API_KEY',\n description: 'ByteDance ModelArk',\n })}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n });\n\n const createVideoModel = (modelId: ByteDanceVideoModelId) =>\n new ByteDanceVideoModel(modelId, {\n provider: 'bytedance.video',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n specificationVersion: 'v4' as const,\n embeddingModel: (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n },\n imageModel: (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n },\n languageModel: (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'languageModel' });\n },\n video: createVideoModel,\n videoModel: createVideoModel,\n };\n}\n\n/**\n * Default ByteDance provider instance.\n */\nexport const byteDance = createByteDance();\n","import {\n AISDKError,\n type Experimental_VideoModelV4,\n type Experimental_VideoModelV4File,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n getFromApi,\n getTopLevelMediaType,\n parseProviderOptions,\n postJsonToApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ByteDanceConfig } from './bytedance-config';\nimport {\n byteDanceVideoModelOptionsSchema,\n type ByteDanceVideoModelOptions,\n} from './bytedance-video-model-options';\nimport type { ByteDanceVideoModelId } from './bytedance-video-settings';\n\nconst HANDLED_PROVIDER_OPTIONS = new Set([\n 'watermark',\n 'generateAudio',\n 'cameraFixed',\n 'returnLastFrame',\n 'serviceTier',\n 'draft',\n 'lastFrameImage',\n 'referenceImages',\n 'referenceVideos',\n 'referenceAudio',\n 'pollIntervalMs',\n 'pollTimeoutMs',\n]);\n\nconst RESOLUTION_MAP: Record<string, string> = {\n '864x496': '480p',\n '496x864': '480p',\n '752x560': '480p',\n '560x752': '480p',\n '640x640': '480p',\n '992x432': '480p',\n '432x992': '480p',\n '864x480': '480p',\n '480x864': '480p',\n '736x544': '480p',\n '544x736': '480p',\n '960x416': '480p',\n '416x960': '480p',\n '832x480': '480p',\n '480x832': '480p',\n '624x624': '480p',\n '1280x720': '720p',\n '720x1280': '720p',\n '1112x834': '720p',\n '834x1112': '720p',\n '960x960': '720p',\n '1470x630': '720p',\n '630x1470': '720p',\n '1248x704': '720p',\n '704x1248': '720p',\n '1120x832': '720p',\n '832x1120': '720p',\n '1504x640': '720p',\n '640x1504': '720p',\n '1920x1080': '1080p',\n '1080x1920': '1080p',\n '1664x1248': '1080p',\n '1248x1664': '1080p',\n '1440x1440': '1080p',\n '2206x946': '1080p',\n '946x2206': '1080p',\n '1920x1088': '1080p',\n '1088x1920': '1080p',\n '2176x928': '1080p',\n '928x2176': '1080p',\n};\n\ninterface ByteDanceVideoModelConfig extends ByteDanceConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nfunction getFirstFrameImage(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n): Experimental_VideoModelV4File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n): Experimental_VideoModelV4File | undefined {\n return getFirstFrameImage(options) ?? options.image;\n}\n\nconst isVideoFile = (f: Experimental_VideoModelV4File) =>\n f.mediaType != null && getTopLevelMediaType(f.mediaType) === 'video';\n\nfunction resolveReferenceContent(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n byteDanceOptions: ByteDanceVideoModelOptions | undefined,\n warnings: SharedV4Warning[],\n): Array<Record<string, unknown>> {\n if (options.frameImages != null && options.frameImages.length > 0) {\n return [];\n }\n\n const inputReferences = options.inputReferences;\n\n if (inputReferences != null && inputReferences.length > 0) {\n return inputReferences.map(reference => {\n if (reference.type === 'url' && reference.mediaType == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'ByteDance requires an explicit mediaType to route URL references as ' +\n 'video or image. Pass { data: url, mediaType: \"video/mp4\" } for video ' +\n 'references. The reference was treated as an image.',\n });\n }\n\n const url = convertImageModelFileToDataUri(reference);\n return isVideoFile(reference)\n ? { type: 'video_url', video_url: { url }, role: 'reference_video' }\n : { type: 'image_url', image_url: { url }, role: 'reference_image' };\n });\n }\n\n const content: Array<Record<string, unknown>> = [];\n\n for (const imageUrl of byteDanceOptions?.referenceImages ?? []) {\n content.push({\n type: 'image_url',\n image_url: { url: imageUrl },\n role: 'reference_image',\n });\n }\n\n for (const videoUrl of byteDanceOptions?.referenceVideos ?? []) {\n content.push({\n type: 'video_url',\n video_url: { url: videoUrl },\n role: 'reference_video',\n });\n }\n\n return content;\n}\n\nfunction resolveLastFrameImage(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n byteDanceOptions: ByteDanceVideoModelOptions | undefined,\n): string | undefined {\n const lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n if (lastFrame != null) {\n return convertImageModelFileToDataUri(lastFrame);\n }\n\n return byteDanceOptions?.lastFrameImage ?? undefined;\n}\n\nexport class ByteDanceVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ByteDanceVideoModelId,\n private readonly config: ByteDanceVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n\n const byteDanceOptions = (await parseProviderOptions({\n provider: 'bytedance',\n providerOptions: options.providerOptions,\n schema: byteDanceVideoModelOptionsSchema,\n })) as ByteDanceVideoModelOptions | undefined;\n\n // Warn about unsupported standard options\n if (options.fps) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details:\n 'ByteDance video models do not support custom FPS. Frame rate is fixed at 24 fps.',\n });\n }\n\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'ByteDance video models do not support generating multiple videos per call. ' +\n 'Only 1 video will be generated.',\n });\n }\n\n const content: Array<Record<string, unknown>> = [];\n\n if (options.prompt != null) {\n content.push({\n type: 'text',\n text: options.prompt,\n });\n }\n\n const startImage = resolveStartImage(options);\n const lastFrameImageUrl = resolveLastFrameImage(options, byteDanceOptions);\n const referenceContent = resolveReferenceContent(\n options,\n byteDanceOptions,\n warnings,\n );\n\n if (startImage != null) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(startImage) },\n ...(lastFrameImageUrl != null ? { role: 'first_frame' } : {}),\n });\n }\n\n // Add last frame image if provided\n if (lastFrameImageUrl != null) {\n content.push({\n type: 'image_url',\n image_url: { url: lastFrameImageUrl },\n role: 'last_frame',\n });\n }\n\n for (const entry of referenceContent) {\n content.push(entry);\n }\n\n // Add reference audio if provided\n if (\n byteDanceOptions?.referenceAudio != null &&\n byteDanceOptions.referenceAudio.length > 0\n ) {\n for (const audioUrl of byteDanceOptions.referenceAudio) {\n content.push({\n type: 'audio_url',\n audio_url: { url: audioUrl },\n role: 'reference_audio',\n });\n }\n }\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n content,\n };\n\n if (options.aspectRatio) {\n body.ratio = options.aspectRatio;\n }\n\n if (options.duration) {\n body.duration = options.duration;\n }\n\n if (options.seed) {\n body.seed = options.seed;\n }\n\n if (options.resolution) {\n const mapped = RESOLUTION_MAP[options.resolution];\n if (mapped) {\n body.resolution = mapped;\n } else {\n body.resolution = options.resolution;\n }\n }\n\n const generateAudio =\n options.generateAudio ?? byteDanceOptions?.generateAudio;\n if (generateAudio != null) {\n body.generate_audio = generateAudio;\n }\n\n if (byteDanceOptions != null) {\n if (byteDanceOptions.watermark != null) {\n body.watermark = byteDanceOptions.watermark;\n }\n if (byteDanceOptions.cameraFixed != null) {\n body.camera_fixed = byteDanceOptions.cameraFixed;\n }\n if (byteDanceOptions.returnLastFrame != null) {\n body.return_last_frame = byteDanceOptions.returnLastFrame;\n }\n if (byteDanceOptions.serviceTier != null) {\n body.service_tier = byteDanceOptions.serviceTier;\n }\n if (byteDanceOptions.draft != null) {\n body.draft = byteDanceOptions.draft;\n }\n // Pass through any additional options not explicitly handled\n for (const [key, value] of Object.entries(byteDanceOptions)) {\n if (!HANDLED_PROVIDER_OPTIONS.has(key)) {\n body[key] = value;\n }\n }\n }\n\n const createUrl = `${this.config.baseURL}/contents/generations/tasks`;\n\n const { value: createResponse } = await postJsonToApi({\n url: createUrl,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: byteDanceFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n byteDanceTaskResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.id;\n\n if (!taskId) {\n throw new AISDKError({\n name: 'BYTEDANCE_VIDEO_GENERATION_ERROR',\n message: 'No task ID returned from API',\n });\n }\n\n const pollIntervalMs = byteDanceOptions?.pollIntervalMs ?? 3000;\n const pollTimeoutMs = byteDanceOptions?.pollTimeoutMs ?? 300000;\n\n const startTime = Date.now();\n let response: ByteDanceResponse;\n let responseHeaders: Record<string, string> | undefined;\n\n while (true) {\n const statusUrl = `${this.config.baseURL}/contents/generations/tasks/${taskId}`;\n\n const { value: statusResponse, responseHeaders: statusHeaders } =\n await getFromApi({\n url: statusUrl,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n failedResponseHandler: byteDanceFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n byteDanceStatusResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (statusResponse.status === 'succeeded') {\n response = statusResponse;\n responseHeaders = statusHeaders;\n break;\n }\n\n if (statusResponse.status === 'failed') {\n throw new AISDKError({\n name: 'BYTEDANCE_VIDEO_GENERATION_FAILED',\n message: `Video generation failed: ${JSON.stringify(statusResponse)}`,\n });\n }\n\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'BYTEDANCE_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n await delay(pollIntervalMs, { abortSignal: options.abortSignal });\n }\n\n const videoUrl = response.content?.video_url;\n if (!videoUrl) {\n throw new AISDKError({\n name: 'BYTEDANCE_VIDEO_GENERATION_ERROR',\n message: 'No video URL in response',\n });\n }\n\n return {\n videos: [\n {\n type: 'url',\n url: videoUrl,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n bytedance: {\n taskId,\n usage: response.usage,\n },\n },\n };\n }\n}\n\nconst byteDanceTaskResponseSchema = z.object({\n id: z.string().nullish(),\n});\n\ntype ByteDanceResponse = z.infer<typeof byteDanceStatusResponseSchema>;\n\nconst byteDanceStatusResponseSchema = z.object({\n id: z.string().nullish(),\n model: z.string().nullish(),\n status: z.string(),\n content: z\n .object({\n video_url: z.string().nullish(),\n })\n .nullish(),\n usage: z\n .object({\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nconst byteDanceErrorSchema = z.object({\n error: z\n .object({\n message: z.string(),\n code: z.string().nullish(),\n })\n .nullish(),\n message: z.string().nullish(),\n});\n\nconst byteDanceFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: byteDanceErrorSchema,\n errorToMessage: data =>\n data.error?.message ?? data.message ?? 'Unknown error',\n});\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type ByteDanceVideoModelOptions = {\n watermark?: boolean | null;\n generateAudio?: boolean | null;\n cameraFixed?: boolean | null;\n returnLastFrame?: boolean | null;\n serviceTier?: 'default' | 'flex' | null;\n draft?: boolean | null;\n lastFrameImage?: string | null;\n referenceImages?: string[] | null;\n referenceVideos?: string[] | null;\n referenceAudio?: string[] | null;\n pollIntervalMs?: number | null;\n pollTimeoutMs?: number | null;\n [key: string]: unknown;\n};\n\nexport const byteDanceVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n watermark: z.boolean().nullish(),\n generateAudio: z.boolean().nullish(),\n cameraFixed: z.boolean().nullish(),\n returnLastFrame: z.boolean().nullish(),\n serviceTier: z.enum(['default', 'flex']).nullish(),\n draft: z.boolean().nullish(),\n lastFrameImage: z.string().nullish(),\n referenceImages: z.array(z.string()).nullish(),\n referenceVideos: z.array(z.string()).nullish(),\n referenceAudio: z.array(z.string()).nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n }),\n ),\n);\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAEK;;;ACTP;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,KAAAA,UAAS;;;AClBlB,SAAS,YAAY,iBAAiB;AACtC,SAAS,SAAS;AAkBX,IAAM,mCAAmC;AAAA,EAAW,MACzD;AAAA,IACE,EAAE,YAAY;AAAA,MACZ,WAAW,EAAE,QAAQ,EAAE,QAAQ;AAAA,MAC/B,eAAe,EAAE,QAAQ,EAAE,QAAQ;AAAA,MACnC,aAAa,EAAE,QAAQ,EAAE,QAAQ;AAAA,MACjC,iBAAiB,EAAE,QAAQ,EAAE,QAAQ;AAAA,MACrC,aAAa,EAAE,KAAK,CAAC,WAAW,MAAM,CAAC,EAAE,QAAQ;AAAA,MACjD,OAAO,EAAE,QAAQ,EAAE,QAAQ;AAAA,MAC3B,gBAAgB,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ;AAAA,MAC7C,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ;AAAA,MAC7C,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ;AAAA,MAC5C,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ;AAAA,MAC9C,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;;;ADVA,IAAM,2BAA2B,oBAAI,IAAI;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,iBAAyC;AAAA,EAC7C,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AACd;AAQA,SAAS,mBACP,SAC2C;AA5F7C;AA6FE,UAAO,mBAAQ,gBAAR,mBAAqB,KAAK,WAAS,MAAM,cAAc,mBAAvD,mBACH;AACN;AAEA,SAAS,kBACP,SAC2C;AAnG7C;AAoGE,UAAO,wBAAmB,OAAO,MAA1B,YAA+B,QAAQ;AAChD;AAEA,IAAM,cAAc,CAAC,MACnB,EAAE,aAAa,QAAQ,qBAAqB,EAAE,SAAS,MAAM;AAE/D,SAAS,wBACP,SACA,kBACA,UACgC;AA9GlC;AA+GE,MAAI,QAAQ,eAAe,QAAQ,QAAQ,YAAY,SAAS,GAAG;AACjE,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,kBAAkB,QAAQ;AAEhC,MAAI,mBAAmB,QAAQ,gBAAgB,SAAS,GAAG;AACzD,WAAO,gBAAgB,IAAI,eAAa;AACtC,UAAI,UAAU,SAAS,SAAS,UAAU,aAAa,MAAM;AAC3D,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SACE;AAAA,QAGJ,CAAC;AAAA,MACH;AAEA,YAAM,MAAM,+BAA+B,SAAS;AACpD,aAAO,YAAY,SAAS,IACxB,EAAE,MAAM,aAAa,WAAW,EAAE,IAAI,GAAG,MAAM,kBAAkB,IACjE,EAAE,MAAM,aAAa,WAAW,EAAE,IAAI,GAAG,MAAM,kBAAkB;AAAA,IACvE,CAAC;AAAA,EACH;AAEA,QAAM,UAA0C,CAAC;AAEjD,aAAW,aAAY,0DAAkB,oBAAlB,YAAqC,CAAC,GAAG;AAC9D,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,WAAW,EAAE,KAAK,SAAS;AAAA,MAC3B,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,aAAW,aAAY,0DAAkB,oBAAlB,YAAqC,CAAC,GAAG;AAC9D,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,WAAW,EAAE,KAAK,SAAS;AAAA,MAC3B,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,sBACP,SACA,kBACoB;AAjKtB;AAkKE,QAAM,aAAY,mBAAQ,gBAAR,mBAAqB;AAAA,IACrC,WAAS,MAAM,cAAc;AAAA,QADb,mBAEf;AAEH,MAAI,aAAa,MAAM;AACrB,WAAO,+BAA+B,SAAS;AAAA,EACjD;AAEA,UAAO,0DAAkB,mBAAlB,YAAoC;AAC7C;AAEO,IAAM,sBAAN,MAA+D;AAAA,EAQpE,YACW,SACQ,QACjB;AAFS;AACQ;AATnB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAAA,EASzB;AAAA,EAPH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAOA,MAAM,WACJ,SACuE;AA5L3E;AA6LI,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,WAA8B,CAAC;AAErC,UAAM,mBAAoB,MAAM,qBAAqB;AAAA,MACnD,UAAU;AAAA,MACV,iBAAiB,QAAQ;AAAA,MACzB,QAAQ;AAAA,IACV,CAAC;AAGD,QAAI,QAAQ,KAAK;AACf,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,KAAK,QAAQ,QAAQ,IAAI,GAAG;AACtC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MAEJ,CAAC;AAAA,IACH;AAEA,UAAM,UAA0C,CAAC;AAEjD,QAAI,QAAQ,UAAU,MAAM;AAC1B,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM,QAAQ;AAAA,MAChB,CAAC;AAAA,IACH;AAEA,UAAM,aAAa,kBAAkB,OAAO;AAC5C,UAAM,oBAAoB,sBAAsB,SAAS,gBAAgB;AACzE,UAAM,mBAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,cAAc,MAAM;AACtB,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,WAAW,EAAE,KAAK,+BAA+B,UAAU,EAAE;AAAA,QAC7D,GAAI,qBAAqB,OAAO,EAAE,MAAM,cAAc,IAAI,CAAC;AAAA,MAC7D,CAAC;AAAA,IACH;AAGA,QAAI,qBAAqB,MAAM;AAC7B,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,WAAW,EAAE,KAAK,kBAAkB;AAAA,QACpC,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,eAAW,SAAS,kBAAkB;AACpC,cAAQ,KAAK,KAAK;AAAA,IACpB;AAGA,SACE,qDAAkB,mBAAkB,QACpC,iBAAiB,eAAe,SAAS,GACzC;AACA,iBAAW,YAAY,iBAAiB,gBAAgB;AACtD,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,WAAW,EAAE,KAAK,SAAS;AAAA,UAC3B,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,OAAgC;AAAA,MACpC,OAAO,KAAK;AAAA,MACZ;AAAA,IACF;AAEA,QAAI,QAAQ,aAAa;AACvB,WAAK,QAAQ,QAAQ;AAAA,IACvB;AAEA,QAAI,QAAQ,UAAU;AACpB,WAAK,WAAW,QAAQ;AAAA,IAC1B;AAEA,QAAI,QAAQ,MAAM;AAChB,WAAK,OAAO,QAAQ;AAAA,IACtB;AAEA,QAAI,QAAQ,YAAY;AACtB,YAAM,SAAS,eAAe,QAAQ,UAAU;AAChD,UAAI,QAAQ;AACV,aAAK,aAAa;AAAA,MACpB,OAAO;AACL,aAAK,aAAa,QAAQ;AAAA,MAC5B;AAAA,IACF;AAEA,UAAM,iBACJ,aAAQ,kBAAR,YAAyB,qDAAkB;AAC7C,QAAI,iBAAiB,MAAM;AACzB,WAAK,iBAAiB;AAAA,IACxB;AAEA,QAAI,oBAAoB,MAAM;AAC5B,UAAI,iBAAiB,aAAa,MAAM;AACtC,aAAK,YAAY,iBAAiB;AAAA,MACpC;AACA,UAAI,iBAAiB,eAAe,MAAM;AACxC,aAAK,eAAe,iBAAiB;AAAA,MACvC;AACA,UAAI,iBAAiB,mBAAmB,MAAM;AAC5C,aAAK,oBAAoB,iBAAiB;AAAA,MAC5C;AACA,UAAI,iBAAiB,eAAe,MAAM;AACxC,aAAK,eAAe,iBAAiB;AAAA,MACvC;AACA,UAAI,iBAAiB,SAAS,MAAM;AAClC,aAAK,QAAQ,iBAAiB;AAAA,MAChC;AAEA,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,gBAAgB,GAAG;AAC3D,YAAI,CAAC,yBAAyB,IAAI,GAAG,GAAG;AACtC,eAAK,GAAG,IAAI;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,GAAG,KAAK,OAAO,OAAO;AAExC,UAAM,EAAE,OAAO,eAAe,IAAI,MAAM,cAAc;AAAA,MACpD,KAAK;AAAA,MACL,SAAS;AAAA,QACP,MAAM,QAAQ,KAAK,OAAO,OAAO;AAAA,QACjC,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,SAAS,eAAe;AAE9B,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,WAAW;AAAA,QACnB,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,UAAM,kBAAiB,0DAAkB,mBAAlB,YAAoC;AAC3D,UAAM,iBAAgB,0DAAkB,kBAAlB,YAAmC;AAEzD,UAAM,YAAY,KAAK,IAAI;AAC3B,QAAI;AACJ,QAAI;AAEJ,WAAO,MAAM;AACX,YAAM,YAAY,GAAG,KAAK,OAAO,OAAO,+BAA+B,MAAM;AAE7E,YAAM,EAAE,OAAO,gBAAgB,iBAAiB,cAAc,IAC5D,MAAM,WAAW;AAAA,QACf,KAAK;AAAA,QACL,SAAS;AAAA,UACP,MAAM,QAAQ,KAAK,OAAO,OAAO;AAAA,UACjC,QAAQ;AAAA,QACV;AAAA,QACA,uBAAuB;AAAA,QACvB,2BAA2B;AAAA,UACzB;AAAA,QACF;AAAA,QACA,aAAa,QAAQ;AAAA,QACrB,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAEH,UAAI,eAAe,WAAW,aAAa;AACzC,mBAAW;AACX,0BAAkB;AAClB;AAAA,MACF;AAEA,UAAI,eAAe,WAAW,UAAU;AACtC,cAAM,IAAI,WAAW;AAAA,UACnB,MAAM;AAAA,UACN,SAAS,4BAA4B,KAAK,UAAU,cAAc,CAAC;AAAA,QACrE,CAAC;AAAA,MACH;AAEA,UAAI,KAAK,IAAI,IAAI,YAAY,eAAe;AAC1C,cAAM,IAAI,WAAW;AAAA,UACnB,MAAM;AAAA,UACN,SAAS,oCAAoC,aAAa;AAAA,QAC5D,CAAC;AAAA,MACH;AAEA,YAAM,MAAM,gBAAgB,EAAE,aAAa,QAAQ,YAAY,CAAC;AAAA,IAClE;AAEA,UAAM,YAAW,cAAS,YAAT,mBAAkB;AACnC,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,WAAW;AAAA,QACnB,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,KAAK;AAAA,UACL,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,MACX;AAAA,MACA,kBAAkB;AAAA,QAChB,WAAW;AAAA,UACT;AAAA,UACA,OAAO,SAAS;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,8BAA8BC,GAAE,OAAO;AAAA,EAC3C,IAAIA,GAAE,OAAO,EAAE,QAAQ;AACzB,CAAC;AAID,IAAM,gCAAgCA,GAAE,OAAO;AAAA,EAC7C,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,QAAQA,GAAE,OAAO;AAAA,EACjB,SAASA,GACN,OAAO;AAAA,IACN,WAAWA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAChC,CAAC,EACA,QAAQ;AAAA,EACX,OAAOA,GACJ,OAAO;AAAA,IACN,mBAAmBA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACxC,CAAC,EACA,QAAQ;AACb,CAAC;AAED,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EACpC,OAAOA,GACJ,OAAO;AAAA,IACN,SAASA,GAAE,OAAO;AAAA,IAClB,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC3B,CAAC,EACA,QAAQ;AAAA,EACX,SAASA,GAAE,OAAO,EAAE,QAAQ;AAC9B,CAAC;AAED,IAAM,iCAAiC,+BAA+B;AAAA,EACpE,aAAa;AAAA,EACb,gBAAgB,UAAK;AAldvB;AAmdI,kCAAK,UAAL,mBAAY,YAAZ,YAAuB,KAAK,YAA5B,YAAuC;AAAA;AAC3C,CAAC;;;ADlaD,IAAM,iBAAiB;AAKhB,SAAS,gBACd,UAAqC,CAAC,GACnB;AAzDrB;AA0DE,QAAM,UAAU,sBAAqB,aAAQ,YAAR,YAAmB,cAAc;AAEtE,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,UAAU,WAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,gBAAgB;AAAA,IAChB,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,mBAAmB,CAAC,YACxB,IAAI,oBAAoB,SAAS;AAAA,IAC/B,UAAU;AAAA,IACV,SAAS,4BAAW;AAAA,IACpB,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,SAAO;AAAA,IACL,sBAAsB;AAAA,IACtB,gBAAgB,CAAC,YAAoB;AACnC,YAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,IACrE;AAAA,IACA,YAAY,CAAC,YAAoB;AAC/B,YAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,IACjE;AAAA,IACA,eAAe,CAAC,YAAoB;AAClC,YAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,gBAAgB,CAAC;AAAA,IACpE;AAAA,IACA,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF;AAKO,IAAM,YAAY,gBAAgB;;;AG/FlC,IAAM,UACX,OACI,UACA;","names":["z","z"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/bytedance",
3
- "version": "2.0.7",
3
+ "version": "2.0.8",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -20,8 +20,8 @@
20
20
  }
21
21
  },
22
22
  "dependencies": {
23
- "@ai-sdk/provider": "4.0.2",
24
- "@ai-sdk/provider-utils": "5.0.6"
23
+ "@ai-sdk/provider": "4.0.3",
24
+ "@ai-sdk/provider-utils": "5.0.7"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "22.19.19",