@ai-sdk/bytedance 2.0.0-beta.3 → 2.0.0-beta.31
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 +223 -0
- package/README.md +2 -0
- package/dist/index.d.ts +7 -5
- package/dist/index.js +100 -88
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
- package/dist/index.d.mts +0 -62
- package/dist/index.mjs +0 -370
- package/dist/index.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,228 @@
|
|
|
1
1
|
# @ai-sdk/bytedance
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.31
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 258c093: chore: ensure consistent import handling and avoid import duplicates or cycles
|
|
8
|
+
- Updated dependencies [9bd6512]
|
|
9
|
+
- Updated dependencies [258c093]
|
|
10
|
+
- Updated dependencies [b6783da]
|
|
11
|
+
- @ai-sdk/provider-utils@5.0.0-beta.29
|
|
12
|
+
- @ai-sdk/provider@4.0.0-beta.14
|
|
13
|
+
|
|
14
|
+
## 2.0.0-beta.30
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- 9f0e36c: trigger release for all packages after provenance setup
|
|
19
|
+
- Updated dependencies [9f0e36c]
|
|
20
|
+
- @ai-sdk/provider@4.0.0-beta.13
|
|
21
|
+
- @ai-sdk/provider-utils@5.0.0-beta.28
|
|
22
|
+
|
|
23
|
+
## 2.0.0-beta.29
|
|
24
|
+
|
|
25
|
+
### Patch Changes
|
|
26
|
+
|
|
27
|
+
- Updated dependencies [785fe16]
|
|
28
|
+
- Updated dependencies [67df0a0]
|
|
29
|
+
- Updated dependencies [befb78c]
|
|
30
|
+
- Updated dependencies [0458559]
|
|
31
|
+
- Updated dependencies [5852c0a]
|
|
32
|
+
- Updated dependencies [fc92055]
|
|
33
|
+
- @ai-sdk/provider-utils@5.0.0-beta.27
|
|
34
|
+
|
|
35
|
+
## 2.0.0-beta.28
|
|
36
|
+
|
|
37
|
+
### Patch Changes
|
|
38
|
+
|
|
39
|
+
- Updated dependencies [2e98477]
|
|
40
|
+
- @ai-sdk/provider-utils@5.0.0-beta.26
|
|
41
|
+
|
|
42
|
+
## 2.0.0-beta.27
|
|
43
|
+
|
|
44
|
+
### Patch Changes
|
|
45
|
+
|
|
46
|
+
- Updated dependencies [eea8d98]
|
|
47
|
+
- @ai-sdk/provider-utils@5.0.0-beta.25
|
|
48
|
+
|
|
49
|
+
## 2.0.0-beta.26
|
|
50
|
+
|
|
51
|
+
### Patch Changes
|
|
52
|
+
|
|
53
|
+
- Updated dependencies [f807e45]
|
|
54
|
+
- @ai-sdk/provider-utils@5.0.0-beta.24
|
|
55
|
+
|
|
56
|
+
## 2.0.0-beta.25
|
|
57
|
+
|
|
58
|
+
### Patch Changes
|
|
59
|
+
|
|
60
|
+
- Updated dependencies [350ea38]
|
|
61
|
+
- @ai-sdk/provider-utils@5.0.0-beta.23
|
|
62
|
+
|
|
63
|
+
## 2.0.0-beta.24
|
|
64
|
+
|
|
65
|
+
### Patch Changes
|
|
66
|
+
|
|
67
|
+
- Updated dependencies [083947b]
|
|
68
|
+
- @ai-sdk/provider-utils@5.0.0-beta.22
|
|
69
|
+
|
|
70
|
+
## 2.0.0-beta.23
|
|
71
|
+
|
|
72
|
+
### Patch Changes
|
|
73
|
+
|
|
74
|
+
- Updated dependencies [add1126]
|
|
75
|
+
- @ai-sdk/provider-utils@5.0.0-beta.21
|
|
76
|
+
|
|
77
|
+
## 2.0.0-beta.22
|
|
78
|
+
|
|
79
|
+
### Patch Changes
|
|
80
|
+
|
|
81
|
+
- 12d239b: feat (provider/bytedance): add seedance 2.0 support
|
|
82
|
+
|
|
83
|
+
## 2.0.0-beta.21
|
|
84
|
+
|
|
85
|
+
### Patch Changes
|
|
86
|
+
|
|
87
|
+
- Updated dependencies [b3976a2]
|
|
88
|
+
- Updated dependencies [ff5eba1]
|
|
89
|
+
- @ai-sdk/provider-utils@5.0.0-beta.20
|
|
90
|
+
- @ai-sdk/provider@4.0.0-beta.12
|
|
91
|
+
|
|
92
|
+
## 2.0.0-beta.20
|
|
93
|
+
|
|
94
|
+
### Major Changes
|
|
95
|
+
|
|
96
|
+
- ef992f8: Remove CommonJS exports from all packages. All packages are now ESM-only (`"type": "module"`). Consumers using `require()` must switch to ESM `import` syntax.
|
|
97
|
+
|
|
98
|
+
### Patch Changes
|
|
99
|
+
|
|
100
|
+
- Updated dependencies [ef992f8]
|
|
101
|
+
- @ai-sdk/provider@4.0.0-beta.11
|
|
102
|
+
- @ai-sdk/provider-utils@5.0.0-beta.19
|
|
103
|
+
|
|
104
|
+
## 2.0.0-beta.19
|
|
105
|
+
|
|
106
|
+
### Patch Changes
|
|
107
|
+
|
|
108
|
+
- Updated dependencies [90e2d8a]
|
|
109
|
+
- @ai-sdk/provider-utils@5.0.0-beta.18
|
|
110
|
+
|
|
111
|
+
## 2.0.0-beta.18
|
|
112
|
+
|
|
113
|
+
### Patch Changes
|
|
114
|
+
|
|
115
|
+
- Updated dependencies [3ae1786]
|
|
116
|
+
- @ai-sdk/provider-utils@5.0.0-beta.17
|
|
117
|
+
|
|
118
|
+
## 2.0.0-beta.17
|
|
119
|
+
|
|
120
|
+
### Patch Changes
|
|
121
|
+
|
|
122
|
+
- Updated dependencies [176466a]
|
|
123
|
+
- @ai-sdk/provider@4.0.0-beta.10
|
|
124
|
+
- @ai-sdk/provider-utils@5.0.0-beta.16
|
|
125
|
+
|
|
126
|
+
## 2.0.0-beta.16
|
|
127
|
+
|
|
128
|
+
### Patch Changes
|
|
129
|
+
|
|
130
|
+
- Updated dependencies [e311194]
|
|
131
|
+
- @ai-sdk/provider@4.0.0-beta.9
|
|
132
|
+
- @ai-sdk/provider-utils@5.0.0-beta.15
|
|
133
|
+
|
|
134
|
+
## 2.0.0-beta.15
|
|
135
|
+
|
|
136
|
+
### Patch Changes
|
|
137
|
+
|
|
138
|
+
- Updated dependencies [34bd95d]
|
|
139
|
+
- Updated dependencies [008271d]
|
|
140
|
+
- @ai-sdk/provider@4.0.0-beta.8
|
|
141
|
+
- @ai-sdk/provider-utils@5.0.0-beta.14
|
|
142
|
+
|
|
143
|
+
## 2.0.0-beta.14
|
|
144
|
+
|
|
145
|
+
### Patch Changes
|
|
146
|
+
|
|
147
|
+
- Updated dependencies [b0c2869]
|
|
148
|
+
- Updated dependencies [7e26e81]
|
|
149
|
+
- @ai-sdk/provider-utils@5.0.0-beta.13
|
|
150
|
+
|
|
151
|
+
## 2.0.0-beta.13
|
|
152
|
+
|
|
153
|
+
### Patch Changes
|
|
154
|
+
|
|
155
|
+
- Updated dependencies [46d1149]
|
|
156
|
+
- @ai-sdk/provider-utils@5.0.0-beta.12
|
|
157
|
+
|
|
158
|
+
## 2.0.0-beta.12
|
|
159
|
+
|
|
160
|
+
### Patch Changes
|
|
161
|
+
|
|
162
|
+
- Updated dependencies [6fd51c0]
|
|
163
|
+
- @ai-sdk/provider-utils@5.0.0-beta.11
|
|
164
|
+
- @ai-sdk/provider@4.0.0-beta.7
|
|
165
|
+
|
|
166
|
+
## 2.0.0-beta.11
|
|
167
|
+
|
|
168
|
+
### Patch Changes
|
|
169
|
+
|
|
170
|
+
- Updated dependencies [c29a26f]
|
|
171
|
+
- @ai-sdk/provider-utils@5.0.0-beta.10
|
|
172
|
+
- @ai-sdk/provider@4.0.0-beta.6
|
|
173
|
+
|
|
174
|
+
## 2.0.0-beta.10
|
|
175
|
+
|
|
176
|
+
### Patch Changes
|
|
177
|
+
|
|
178
|
+
- 38fc777: Add AI Gateway hint to provider READMEs
|
|
179
|
+
|
|
180
|
+
## 2.0.0-beta.9
|
|
181
|
+
|
|
182
|
+
### Patch Changes
|
|
183
|
+
|
|
184
|
+
- Updated dependencies [2e17091]
|
|
185
|
+
- @ai-sdk/provider-utils@5.0.0-beta.9
|
|
186
|
+
|
|
187
|
+
## 2.0.0-beta.8
|
|
188
|
+
|
|
189
|
+
### Patch Changes
|
|
190
|
+
|
|
191
|
+
- Updated dependencies [986c6fd]
|
|
192
|
+
- Updated dependencies [493295c]
|
|
193
|
+
- @ai-sdk/provider-utils@5.0.0-beta.8
|
|
194
|
+
|
|
195
|
+
## 2.0.0-beta.7
|
|
196
|
+
|
|
197
|
+
### Patch Changes
|
|
198
|
+
|
|
199
|
+
- Updated dependencies [1f509d4]
|
|
200
|
+
- @ai-sdk/provider-utils@5.0.0-beta.7
|
|
201
|
+
- @ai-sdk/provider@4.0.0-beta.5
|
|
202
|
+
|
|
203
|
+
## 2.0.0-beta.6
|
|
204
|
+
|
|
205
|
+
### Patch Changes
|
|
206
|
+
|
|
207
|
+
- Updated dependencies [3887c70]
|
|
208
|
+
- @ai-sdk/provider-utils@5.0.0-beta.6
|
|
209
|
+
- @ai-sdk/provider@4.0.0-beta.4
|
|
210
|
+
|
|
211
|
+
## 2.0.0-beta.5
|
|
212
|
+
|
|
213
|
+
### Patch Changes
|
|
214
|
+
|
|
215
|
+
- Updated dependencies [776b617]
|
|
216
|
+
- @ai-sdk/provider-utils@5.0.0-beta.5
|
|
217
|
+
- @ai-sdk/provider@4.0.0-beta.3
|
|
218
|
+
|
|
219
|
+
## 2.0.0-beta.4
|
|
220
|
+
|
|
221
|
+
### Patch Changes
|
|
222
|
+
|
|
223
|
+
- Updated dependencies [61753c3]
|
|
224
|
+
- @ai-sdk/provider-utils@5.0.0-beta.4
|
|
225
|
+
|
|
3
226
|
## 2.0.0-beta.3
|
|
4
227
|
|
|
5
228
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
The **ByteDance provider** for the [AI SDK](https://ai-sdk.dev/docs) contains video model support for ByteDance's Seedance family of video generation models through the [BytePlus ModelArk](https://docs.byteplus.com/en/docs/ModelArk/Video_Generation_API) platform.
|
|
4
4
|
|
|
5
|
+
> **Deploying to Vercel?** With Vercel's AI Gateway you can access ByteDance (and hundreds of models from other providers) — no additional packages, API keys, or extra cost. [Get started with AI Gateway](https://vercel.com/ai-gateway).
|
|
6
|
+
|
|
5
7
|
## Setup
|
|
6
8
|
|
|
7
9
|
The ByteDance provider is available in the `@ai-sdk/bytedance` module. You can install it with:
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ProviderV4, Experimental_VideoModelV4 } from '@ai-sdk/provider';
|
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
3
|
|
|
4
|
-
type ByteDanceVideoModelId = 'seedance-1-5-pro-251215' | 'seedance-1-0-pro-250528' | 'seedance-1-0-pro-fast-251015' | 'seedance-1-0-lite-t2v-250428' | 'seedance-1-0-lite-i2v-250428' | (string & {});
|
|
4
|
+
type ByteDanceVideoModelId = 'dreamina-seedance-2-0-fast-260128' | 'dreamina-seedance-2-0-260128' | 'seedance-1-5-pro-251215' | 'seedance-1-0-pro-250528' | 'seedance-1-0-pro-fast-251015' | 'seedance-1-0-lite-t2v-250428' | 'seedance-1-0-lite-i2v-250428' | (string & {});
|
|
5
5
|
|
|
6
6
|
interface ByteDanceProviderSettings {
|
|
7
7
|
/**
|
|
@@ -24,15 +24,15 @@ interface ByteDanceProviderSettings {
|
|
|
24
24
|
*/
|
|
25
25
|
fetch?: FetchFunction;
|
|
26
26
|
}
|
|
27
|
-
interface ByteDanceProvider extends
|
|
27
|
+
interface ByteDanceProvider extends ProviderV4 {
|
|
28
28
|
/**
|
|
29
29
|
* Creates a model for video generation.
|
|
30
30
|
*/
|
|
31
|
-
video(modelId: ByteDanceVideoModelId):
|
|
31
|
+
video(modelId: ByteDanceVideoModelId): Experimental_VideoModelV4;
|
|
32
32
|
/**
|
|
33
33
|
* Creates a model for video generation.
|
|
34
34
|
*/
|
|
35
|
-
videoModel(modelId: ByteDanceVideoModelId):
|
|
35
|
+
videoModel(modelId: ByteDanceVideoModelId): Experimental_VideoModelV4;
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
38
|
* Create a ByteDance provider instance.
|
|
@@ -52,6 +52,8 @@ type ByteDanceVideoProviderOptions = {
|
|
|
52
52
|
draft?: boolean | null;
|
|
53
53
|
lastFrameImage?: string | null;
|
|
54
54
|
referenceImages?: string[] | null;
|
|
55
|
+
referenceVideos?: string[] | null;
|
|
56
|
+
referenceAudio?: string[] | null;
|
|
55
57
|
pollIntervalMs?: number | null;
|
|
56
58
|
pollTimeoutMs?: number | null;
|
|
57
59
|
[key: string]: unknown;
|
package/dist/index.js
CHANGED
|
@@ -1,39 +1,30 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
VERSION: () => VERSION,
|
|
24
|
-
byteDance: () => byteDance,
|
|
25
|
-
createByteDance: () => createByteDance
|
|
26
|
-
});
|
|
27
|
-
module.exports = __toCommonJS(index_exports);
|
|
28
|
-
|
|
29
1
|
// src/bytedance-provider.ts
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
import {
|
|
3
|
+
NoSuchModelError
|
|
4
|
+
} from "@ai-sdk/provider";
|
|
5
|
+
import {
|
|
6
|
+
loadApiKey,
|
|
7
|
+
withoutTrailingSlash
|
|
8
|
+
} from "@ai-sdk/provider-utils";
|
|
32
9
|
|
|
33
10
|
// src/bytedance-video-model.ts
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
11
|
+
import {
|
|
12
|
+
AISDKError
|
|
13
|
+
} from "@ai-sdk/provider";
|
|
14
|
+
import {
|
|
15
|
+
combineHeaders,
|
|
16
|
+
convertImageModelFileToDataUri,
|
|
17
|
+
createJsonErrorResponseHandler,
|
|
18
|
+
createJsonResponseHandler,
|
|
19
|
+
delay,
|
|
20
|
+
getFromApi,
|
|
21
|
+
lazySchema,
|
|
22
|
+
parseProviderOptions,
|
|
23
|
+
postJsonToApi,
|
|
24
|
+
resolve,
|
|
25
|
+
zodSchema
|
|
26
|
+
} from "@ai-sdk/provider-utils";
|
|
27
|
+
import { z } from "zod/v4";
|
|
37
28
|
var HANDLED_PROVIDER_OPTIONS = /* @__PURE__ */ new Set([
|
|
38
29
|
"watermark",
|
|
39
30
|
"generateAudio",
|
|
@@ -43,22 +34,26 @@ var HANDLED_PROVIDER_OPTIONS = /* @__PURE__ */ new Set([
|
|
|
43
34
|
"draft",
|
|
44
35
|
"lastFrameImage",
|
|
45
36
|
"referenceImages",
|
|
37
|
+
"referenceVideos",
|
|
38
|
+
"referenceAudio",
|
|
46
39
|
"pollIntervalMs",
|
|
47
40
|
"pollTimeoutMs"
|
|
48
41
|
]);
|
|
49
|
-
var byteDanceVideoProviderOptionsSchema =
|
|
50
|
-
() =>
|
|
51
|
-
|
|
52
|
-
watermark:
|
|
53
|
-
generateAudio:
|
|
54
|
-
cameraFixed:
|
|
55
|
-
returnLastFrame:
|
|
56
|
-
serviceTier:
|
|
57
|
-
draft:
|
|
58
|
-
lastFrameImage:
|
|
59
|
-
referenceImages:
|
|
60
|
-
|
|
61
|
-
|
|
42
|
+
var byteDanceVideoProviderOptionsSchema = lazySchema(
|
|
43
|
+
() => zodSchema(
|
|
44
|
+
z.object({
|
|
45
|
+
watermark: z.boolean().nullish(),
|
|
46
|
+
generateAudio: z.boolean().nullish(),
|
|
47
|
+
cameraFixed: z.boolean().nullish(),
|
|
48
|
+
returnLastFrame: z.boolean().nullish(),
|
|
49
|
+
serviceTier: z.enum(["default", "flex"]).nullish(),
|
|
50
|
+
draft: z.boolean().nullish(),
|
|
51
|
+
lastFrameImage: z.string().nullish(),
|
|
52
|
+
referenceImages: z.array(z.string()).nullish(),
|
|
53
|
+
referenceVideos: z.array(z.string()).nullish(),
|
|
54
|
+
referenceAudio: z.array(z.string()).nullish(),
|
|
55
|
+
pollIntervalMs: z.number().positive().nullish(),
|
|
56
|
+
pollTimeoutMs: z.number().positive().nullish()
|
|
62
57
|
}).passthrough()
|
|
63
58
|
)
|
|
64
59
|
);
|
|
@@ -108,7 +103,7 @@ var ByteDanceVideoModel = class {
|
|
|
108
103
|
constructor(modelId, config) {
|
|
109
104
|
this.modelId = modelId;
|
|
110
105
|
this.config = config;
|
|
111
|
-
this.specificationVersion = "
|
|
106
|
+
this.specificationVersion = "v4";
|
|
112
107
|
this.maxVideosPerCall = 1;
|
|
113
108
|
}
|
|
114
109
|
get provider() {
|
|
@@ -118,7 +113,7 @@ var ByteDanceVideoModel = class {
|
|
|
118
113
|
var _a, _b, _c, _d, _e, _f;
|
|
119
114
|
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
120
115
|
const warnings = [];
|
|
121
|
-
const byteDanceOptions = await
|
|
116
|
+
const byteDanceOptions = await parseProviderOptions({
|
|
122
117
|
provider: "bytedance",
|
|
123
118
|
providerOptions: options.providerOptions,
|
|
124
119
|
schema: byteDanceVideoProviderOptionsSchema
|
|
@@ -147,7 +142,7 @@ var ByteDanceVideoModel = class {
|
|
|
147
142
|
if (options.image != null) {
|
|
148
143
|
content.push({
|
|
149
144
|
type: "image_url",
|
|
150
|
-
image_url: { url:
|
|
145
|
+
image_url: { url: convertImageModelFileToDataUri(options.image) }
|
|
151
146
|
});
|
|
152
147
|
}
|
|
153
148
|
if ((byteDanceOptions == null ? void 0 : byteDanceOptions.lastFrameImage) != null) {
|
|
@@ -166,6 +161,24 @@ var ByteDanceVideoModel = class {
|
|
|
166
161
|
});
|
|
167
162
|
}
|
|
168
163
|
}
|
|
164
|
+
if ((byteDanceOptions == null ? void 0 : byteDanceOptions.referenceVideos) != null && byteDanceOptions.referenceVideos.length > 0) {
|
|
165
|
+
for (const videoUrl2 of byteDanceOptions.referenceVideos) {
|
|
166
|
+
content.push({
|
|
167
|
+
type: "video_url",
|
|
168
|
+
video_url: { url: videoUrl2 },
|
|
169
|
+
role: "reference_video"
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if ((byteDanceOptions == null ? void 0 : byteDanceOptions.referenceAudio) != null && byteDanceOptions.referenceAudio.length > 0) {
|
|
174
|
+
for (const audioUrl of byteDanceOptions.referenceAudio) {
|
|
175
|
+
content.push({
|
|
176
|
+
type: "audio_url",
|
|
177
|
+
audio_url: { url: audioUrl },
|
|
178
|
+
role: "reference_audio"
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
169
182
|
const body = {
|
|
170
183
|
model: this.modelId,
|
|
171
184
|
content
|
|
@@ -213,15 +226,15 @@ var ByteDanceVideoModel = class {
|
|
|
213
226
|
}
|
|
214
227
|
}
|
|
215
228
|
const createUrl = `${this.config.baseURL}/contents/generations/tasks`;
|
|
216
|
-
const { value: createResponse } = await
|
|
229
|
+
const { value: createResponse } = await postJsonToApi({
|
|
217
230
|
url: createUrl,
|
|
218
|
-
headers:
|
|
219
|
-
await
|
|
231
|
+
headers: combineHeaders(
|
|
232
|
+
await resolve(this.config.headers),
|
|
220
233
|
options.headers
|
|
221
234
|
),
|
|
222
235
|
body,
|
|
223
236
|
failedResponseHandler: byteDanceFailedResponseHandler,
|
|
224
|
-
successfulResponseHandler:
|
|
237
|
+
successfulResponseHandler: createJsonResponseHandler(
|
|
225
238
|
byteDanceTaskResponseSchema
|
|
226
239
|
),
|
|
227
240
|
abortSignal: options.abortSignal,
|
|
@@ -229,7 +242,7 @@ var ByteDanceVideoModel = class {
|
|
|
229
242
|
});
|
|
230
243
|
const taskId = createResponse.id;
|
|
231
244
|
if (!taskId) {
|
|
232
|
-
throw new
|
|
245
|
+
throw new AISDKError({
|
|
233
246
|
name: "BYTEDANCE_VIDEO_GENERATION_ERROR",
|
|
234
247
|
message: "No task ID returned from API"
|
|
235
248
|
});
|
|
@@ -241,14 +254,14 @@ var ByteDanceVideoModel = class {
|
|
|
241
254
|
let responseHeaders;
|
|
242
255
|
while (true) {
|
|
243
256
|
const statusUrl = `${this.config.baseURL}/contents/generations/tasks/${taskId}`;
|
|
244
|
-
const { value: statusResponse, responseHeaders: statusHeaders } = await
|
|
257
|
+
const { value: statusResponse, responseHeaders: statusHeaders } = await getFromApi({
|
|
245
258
|
url: statusUrl,
|
|
246
|
-
headers:
|
|
247
|
-
await
|
|
259
|
+
headers: combineHeaders(
|
|
260
|
+
await resolve(this.config.headers),
|
|
248
261
|
options.headers
|
|
249
262
|
),
|
|
250
263
|
failedResponseHandler: byteDanceFailedResponseHandler,
|
|
251
|
-
successfulResponseHandler:
|
|
264
|
+
successfulResponseHandler: createJsonResponseHandler(
|
|
252
265
|
byteDanceStatusResponseSchema
|
|
253
266
|
),
|
|
254
267
|
abortSignal: options.abortSignal,
|
|
@@ -260,22 +273,22 @@ var ByteDanceVideoModel = class {
|
|
|
260
273
|
break;
|
|
261
274
|
}
|
|
262
275
|
if (statusResponse.status === "failed") {
|
|
263
|
-
throw new
|
|
276
|
+
throw new AISDKError({
|
|
264
277
|
name: "BYTEDANCE_VIDEO_GENERATION_FAILED",
|
|
265
278
|
message: `Video generation failed: ${JSON.stringify(statusResponse)}`
|
|
266
279
|
});
|
|
267
280
|
}
|
|
268
281
|
if (Date.now() - startTime > pollTimeoutMs) {
|
|
269
|
-
throw new
|
|
282
|
+
throw new AISDKError({
|
|
270
283
|
name: "BYTEDANCE_VIDEO_GENERATION_TIMEOUT",
|
|
271
284
|
message: `Video generation timed out after ${pollTimeoutMs}ms`
|
|
272
285
|
});
|
|
273
286
|
}
|
|
274
|
-
await
|
|
287
|
+
await delay(pollIntervalMs, { abortSignal: options.abortSignal });
|
|
275
288
|
}
|
|
276
289
|
const videoUrl = (_f = response.content) == null ? void 0 : _f.video_url;
|
|
277
290
|
if (!videoUrl) {
|
|
278
|
-
throw new
|
|
291
|
+
throw new AISDKError({
|
|
279
292
|
name: "BYTEDANCE_VIDEO_GENERATION_ERROR",
|
|
280
293
|
message: "No video URL in response"
|
|
281
294
|
});
|
|
@@ -303,28 +316,28 @@ var ByteDanceVideoModel = class {
|
|
|
303
316
|
};
|
|
304
317
|
}
|
|
305
318
|
};
|
|
306
|
-
var byteDanceTaskResponseSchema =
|
|
307
|
-
id:
|
|
319
|
+
var byteDanceTaskResponseSchema = z.object({
|
|
320
|
+
id: z.string().nullish()
|
|
308
321
|
});
|
|
309
|
-
var byteDanceStatusResponseSchema =
|
|
310
|
-
id:
|
|
311
|
-
model:
|
|
312
|
-
status:
|
|
313
|
-
content:
|
|
314
|
-
video_url:
|
|
322
|
+
var byteDanceStatusResponseSchema = z.object({
|
|
323
|
+
id: z.string().nullish(),
|
|
324
|
+
model: z.string().nullish(),
|
|
325
|
+
status: z.string(),
|
|
326
|
+
content: z.object({
|
|
327
|
+
video_url: z.string().nullish()
|
|
315
328
|
}).nullish(),
|
|
316
|
-
usage:
|
|
317
|
-
completion_tokens:
|
|
329
|
+
usage: z.object({
|
|
330
|
+
completion_tokens: z.number().nullish()
|
|
318
331
|
}).nullish()
|
|
319
332
|
});
|
|
320
|
-
var byteDanceErrorSchema =
|
|
321
|
-
error:
|
|
322
|
-
message:
|
|
323
|
-
code:
|
|
333
|
+
var byteDanceErrorSchema = z.object({
|
|
334
|
+
error: z.object({
|
|
335
|
+
message: z.string(),
|
|
336
|
+
code: z.string().nullish()
|
|
324
337
|
}).nullish(),
|
|
325
|
-
message:
|
|
338
|
+
message: z.string().nullish()
|
|
326
339
|
});
|
|
327
|
-
var byteDanceFailedResponseHandler =
|
|
340
|
+
var byteDanceFailedResponseHandler = createJsonErrorResponseHandler({
|
|
328
341
|
errorSchema: byteDanceErrorSchema,
|
|
329
342
|
errorToMessage: (data) => {
|
|
330
343
|
var _a, _b, _c;
|
|
@@ -336,9 +349,9 @@ var byteDanceFailedResponseHandler = (0, import_provider_utils.createJsonErrorRe
|
|
|
336
349
|
var defaultBaseURL = "https://ark.ap-southeast.bytepluses.com/api/v3";
|
|
337
350
|
function createByteDance(options = {}) {
|
|
338
351
|
var _a;
|
|
339
|
-
const baseURL =
|
|
352
|
+
const baseURL = withoutTrailingSlash((_a = options.baseURL) != null ? _a : defaultBaseURL);
|
|
340
353
|
const getHeaders = () => ({
|
|
341
|
-
Authorization: `Bearer ${
|
|
354
|
+
Authorization: `Bearer ${loadApiKey({
|
|
342
355
|
apiKey: options.apiKey,
|
|
343
356
|
environmentVariableName: "ARK_API_KEY",
|
|
344
357
|
description: "ByteDance ModelArk"
|
|
@@ -353,15 +366,15 @@ function createByteDance(options = {}) {
|
|
|
353
366
|
fetch: options.fetch
|
|
354
367
|
});
|
|
355
368
|
return {
|
|
356
|
-
specificationVersion: "
|
|
369
|
+
specificationVersion: "v4",
|
|
357
370
|
embeddingModel: (modelId) => {
|
|
358
|
-
throw new
|
|
371
|
+
throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
|
|
359
372
|
},
|
|
360
373
|
imageModel: (modelId) => {
|
|
361
|
-
throw new
|
|
374
|
+
throw new NoSuchModelError({ modelId, modelType: "imageModel" });
|
|
362
375
|
},
|
|
363
376
|
languageModel: (modelId) => {
|
|
364
|
-
throw new
|
|
377
|
+
throw new NoSuchModelError({ modelId, modelType: "languageModel" });
|
|
365
378
|
},
|
|
366
379
|
video: createVideoModel,
|
|
367
380
|
videoModel: createVideoModel
|
|
@@ -370,11 +383,10 @@ function createByteDance(options = {}) {
|
|
|
370
383
|
var byteDance = createByteDance();
|
|
371
384
|
|
|
372
385
|
// src/version.ts
|
|
373
|
-
var VERSION = "2.0.0-beta.
|
|
374
|
-
|
|
375
|
-
0 && (module.exports = {
|
|
386
|
+
var VERSION = "2.0.0-beta.31";
|
|
387
|
+
export {
|
|
376
388
|
VERSION,
|
|
377
389
|
byteDance,
|
|
378
390
|
createByteDance
|
|
379
|
-
}
|
|
391
|
+
};
|
|
380
392
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/bytedance-provider.ts","../src/bytedance-video-model.ts","../src/version.ts"],"sourcesContent":["export type {\n ByteDanceProvider,\n ByteDanceProviderSettings,\n} from './bytedance-provider';\nexport { byteDance, createByteDance } from './bytedance-provider';\nexport type { ByteDanceVideoProviderOptions } from './bytedance-video-model';\nexport type { ByteDanceVideoModelId } from './bytedance-video-settings';\nexport { VERSION } from './version';\n","import {\n type Experimental_VideoModelV3,\n NoSuchModelError,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\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 ProviderV3 {\n /**\n * Creates a model for video generation.\n */\n video(modelId: ByteDanceVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: ByteDanceVideoModelId): Experimental_VideoModelV3;\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: 'v3' 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_VideoModelV3,\n type SharedV3Warning,\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 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 'pollIntervalMs',\n 'pollTimeoutMs',\n]);\n\nexport const byteDanceVideoProviderOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\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 pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n })\n .passthrough(),\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\nexport class ByteDanceVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3';\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_VideoModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV3Warning[] = [];\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 if (options.image != null) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(options.image) },\n });\n }\n\n // Add last frame image if provided\n if (byteDanceOptions?.lastFrameImage != null) {\n content.push({\n type: 'image_url',\n image_url: { url: byteDanceOptions.lastFrameImage },\n role: 'last_frame',\n });\n }\n\n // Add reference images if provided\n if (\n byteDanceOptions?.referenceImages != null &&\n byteDanceOptions.referenceImages.length > 0\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\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 if (byteDanceOptions != null) {\n if (byteDanceOptions.watermark != null) {\n body.watermark = byteDanceOptions.watermark;\n }\n if (byteDanceOptions.generateAudio != null) {\n body.generate_audio = byteDanceOptions.generateAudio;\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\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","declare const __PACKAGE_VERSION__: string;\n\nexport const VERSION = __PACKAGE_VERSION__;\n"],"mappings":"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","names":["import_provider","import_provider_utils"]}
|
|
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 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\n .object({\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 .passthrough(),\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\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 if (options.image != null) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(options.image) },\n });\n }\n\n // Add last frame image if provided\n if (byteDanceOptions?.lastFrameImage != null) {\n content.push({\n type: 'image_url',\n image_url: { url: byteDanceOptions.lastFrameImage },\n role: 'last_frame',\n });\n }\n\n // Add reference images if provided\n if (\n byteDanceOptions?.referenceImages != null &&\n byteDanceOptions.referenceImages.length > 0\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\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 if (byteDanceOptions != null) {\n if (byteDanceOptions.watermark != null) {\n body.watermark = byteDanceOptions.watermark;\n }\n if (byteDanceOptions.generateAudio != null) {\n body.generate_audio = byteDanceOptions.generateAudio;\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","declare const __PACKAGE_VERSION__: string;\n\nexport const VERSION = __PACKAGE_VERSION__;\n"],"mappings":"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","names":["videoUrl"]}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/bytedance",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.31",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"license": "Apache-2.0",
|
|
5
6
|
"sideEffects": false,
|
|
6
7
|
"main": "./dist/index.js",
|
|
7
|
-
"module": "./dist/index.mjs",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"files": [
|
|
10
10
|
"dist/**/*",
|
|
@@ -15,20 +15,20 @@
|
|
|
15
15
|
"./package.json": "./package.json",
|
|
16
16
|
".": {
|
|
17
17
|
"types": "./dist/index.d.ts",
|
|
18
|
-
"import": "./dist/index.
|
|
19
|
-
"
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"default": "./dist/index.js"
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@ai-sdk/provider": "4.0.0-beta.
|
|
24
|
-
"@ai-sdk/provider-utils": "5.0.0-beta.
|
|
23
|
+
"@ai-sdk/provider": "4.0.0-beta.14",
|
|
24
|
+
"@ai-sdk/provider-utils": "5.0.0-beta.29"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/node": "20.17.24",
|
|
28
28
|
"tsup": "^8",
|
|
29
29
|
"typescript": "5.8.3",
|
|
30
30
|
"zod": "3.25.76",
|
|
31
|
-
"@ai-sdk/test-server": "2.0.0-beta.
|
|
31
|
+
"@ai-sdk/test-server": "2.0.0-beta.3",
|
|
32
32
|
"@vercel/ai-tsconfig": "0.0.0"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
@@ -38,12 +38,14 @@
|
|
|
38
38
|
"node": ">=18"
|
|
39
39
|
},
|
|
40
40
|
"publishConfig": {
|
|
41
|
-
"access": "public"
|
|
41
|
+
"access": "public",
|
|
42
|
+
"provenance": true
|
|
42
43
|
},
|
|
43
44
|
"homepage": "https://ai-sdk.dev/docs",
|
|
44
45
|
"repository": {
|
|
45
46
|
"type": "git",
|
|
46
|
-
"url": "
|
|
47
|
+
"url": "https://github.com/vercel/ai",
|
|
48
|
+
"directory": "packages/bytedance"
|
|
47
49
|
},
|
|
48
50
|
"bugs": {
|
|
49
51
|
"url": "https://github.com/vercel/ai/issues"
|
|
@@ -58,9 +60,7 @@
|
|
|
58
60
|
"build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
|
|
59
61
|
"build:watch": "pnpm clean && tsup --watch",
|
|
60
62
|
"clean": "del-cli dist *.tsbuildinfo",
|
|
61
|
-
"lint": "eslint \"./**/*.ts*\"",
|
|
62
63
|
"type-check": "tsc --build",
|
|
63
|
-
"prettier-check": "prettier --check \"./**/*.ts*\"",
|
|
64
64
|
"test": "pnpm test:node && pnpm test:edge",
|
|
65
65
|
"test:update": "pnpm test:node -u",
|
|
66
66
|
"test:watch": "vitest --config vitest.node.config.js",
|
package/dist/index.d.mts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { ProviderV3, Experimental_VideoModelV3 } from '@ai-sdk/provider';
|
|
2
|
-
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
|
-
|
|
4
|
-
type ByteDanceVideoModelId = 'seedance-1-5-pro-251215' | 'seedance-1-0-pro-250528' | 'seedance-1-0-pro-fast-251015' | 'seedance-1-0-lite-t2v-250428' | 'seedance-1-0-lite-i2v-250428' | (string & {});
|
|
5
|
-
|
|
6
|
-
interface ByteDanceProviderSettings {
|
|
7
|
-
/**
|
|
8
|
-
* ByteDance Ark API key. Default value is taken from the `ARK_API_KEY`
|
|
9
|
-
* environment variable.
|
|
10
|
-
*/
|
|
11
|
-
apiKey?: string;
|
|
12
|
-
/**
|
|
13
|
-
* Base URL for the API calls.
|
|
14
|
-
* Default: https://ark.ap-southeast.bytepluses.com/api/v3
|
|
15
|
-
*/
|
|
16
|
-
baseURL?: string;
|
|
17
|
-
/**
|
|
18
|
-
* Custom headers to include in the requests.
|
|
19
|
-
*/
|
|
20
|
-
headers?: Record<string, string>;
|
|
21
|
-
/**
|
|
22
|
-
* Custom fetch implementation. You can use it as a middleware to intercept
|
|
23
|
-
* requests, or to provide a custom fetch implementation for e.g. testing.
|
|
24
|
-
*/
|
|
25
|
-
fetch?: FetchFunction;
|
|
26
|
-
}
|
|
27
|
-
interface ByteDanceProvider extends ProviderV3 {
|
|
28
|
-
/**
|
|
29
|
-
* Creates a model for video generation.
|
|
30
|
-
*/
|
|
31
|
-
video(modelId: ByteDanceVideoModelId): Experimental_VideoModelV3;
|
|
32
|
-
/**
|
|
33
|
-
* Creates a model for video generation.
|
|
34
|
-
*/
|
|
35
|
-
videoModel(modelId: ByteDanceVideoModelId): Experimental_VideoModelV3;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Create a ByteDance provider instance.
|
|
39
|
-
*/
|
|
40
|
-
declare function createByteDance(options?: ByteDanceProviderSettings): ByteDanceProvider;
|
|
41
|
-
/**
|
|
42
|
-
* Default ByteDance provider instance.
|
|
43
|
-
*/
|
|
44
|
-
declare const byteDance: ByteDanceProvider;
|
|
45
|
-
|
|
46
|
-
type ByteDanceVideoProviderOptions = {
|
|
47
|
-
watermark?: boolean | null;
|
|
48
|
-
generateAudio?: boolean | null;
|
|
49
|
-
cameraFixed?: boolean | null;
|
|
50
|
-
returnLastFrame?: boolean | null;
|
|
51
|
-
serviceTier?: 'default' | 'flex' | null;
|
|
52
|
-
draft?: boolean | null;
|
|
53
|
-
lastFrameImage?: string | null;
|
|
54
|
-
referenceImages?: string[] | null;
|
|
55
|
-
pollIntervalMs?: number | null;
|
|
56
|
-
pollTimeoutMs?: number | null;
|
|
57
|
-
[key: string]: unknown;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
declare const VERSION: string;
|
|
61
|
-
|
|
62
|
-
export { type ByteDanceProvider, type ByteDanceProviderSettings, type ByteDanceVideoModelId, type ByteDanceVideoProviderOptions, VERSION, byteDance, createByteDance };
|
package/dist/index.mjs
DELETED
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
// src/bytedance-provider.ts
|
|
2
|
-
import {
|
|
3
|
-
NoSuchModelError
|
|
4
|
-
} from "@ai-sdk/provider";
|
|
5
|
-
import {
|
|
6
|
-
loadApiKey,
|
|
7
|
-
withoutTrailingSlash
|
|
8
|
-
} from "@ai-sdk/provider-utils";
|
|
9
|
-
|
|
10
|
-
// src/bytedance-video-model.ts
|
|
11
|
-
import {
|
|
12
|
-
AISDKError
|
|
13
|
-
} from "@ai-sdk/provider";
|
|
14
|
-
import {
|
|
15
|
-
combineHeaders,
|
|
16
|
-
convertImageModelFileToDataUri,
|
|
17
|
-
createJsonErrorResponseHandler,
|
|
18
|
-
createJsonResponseHandler,
|
|
19
|
-
delay,
|
|
20
|
-
getFromApi,
|
|
21
|
-
lazySchema,
|
|
22
|
-
parseProviderOptions,
|
|
23
|
-
postJsonToApi,
|
|
24
|
-
resolve,
|
|
25
|
-
zodSchema
|
|
26
|
-
} from "@ai-sdk/provider-utils";
|
|
27
|
-
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
|
-
"pollIntervalMs",
|
|
38
|
-
"pollTimeoutMs"
|
|
39
|
-
]);
|
|
40
|
-
var byteDanceVideoProviderOptionsSchema = lazySchema(
|
|
41
|
-
() => zodSchema(
|
|
42
|
-
z.object({
|
|
43
|
-
watermark: z.boolean().nullish(),
|
|
44
|
-
generateAudio: z.boolean().nullish(),
|
|
45
|
-
cameraFixed: z.boolean().nullish(),
|
|
46
|
-
returnLastFrame: z.boolean().nullish(),
|
|
47
|
-
serviceTier: z.enum(["default", "flex"]).nullish(),
|
|
48
|
-
draft: z.boolean().nullish(),
|
|
49
|
-
lastFrameImage: z.string().nullish(),
|
|
50
|
-
referenceImages: z.array(z.string()).nullish(),
|
|
51
|
-
pollIntervalMs: z.number().positive().nullish(),
|
|
52
|
-
pollTimeoutMs: z.number().positive().nullish()
|
|
53
|
-
}).passthrough()
|
|
54
|
-
)
|
|
55
|
-
);
|
|
56
|
-
var RESOLUTION_MAP = {
|
|
57
|
-
"864x496": "480p",
|
|
58
|
-
"496x864": "480p",
|
|
59
|
-
"752x560": "480p",
|
|
60
|
-
"560x752": "480p",
|
|
61
|
-
"640x640": "480p",
|
|
62
|
-
"992x432": "480p",
|
|
63
|
-
"432x992": "480p",
|
|
64
|
-
"864x480": "480p",
|
|
65
|
-
"480x864": "480p",
|
|
66
|
-
"736x544": "480p",
|
|
67
|
-
"544x736": "480p",
|
|
68
|
-
"960x416": "480p",
|
|
69
|
-
"416x960": "480p",
|
|
70
|
-
"832x480": "480p",
|
|
71
|
-
"480x832": "480p",
|
|
72
|
-
"624x624": "480p",
|
|
73
|
-
"1280x720": "720p",
|
|
74
|
-
"720x1280": "720p",
|
|
75
|
-
"1112x834": "720p",
|
|
76
|
-
"834x1112": "720p",
|
|
77
|
-
"960x960": "720p",
|
|
78
|
-
"1470x630": "720p",
|
|
79
|
-
"630x1470": "720p",
|
|
80
|
-
"1248x704": "720p",
|
|
81
|
-
"704x1248": "720p",
|
|
82
|
-
"1120x832": "720p",
|
|
83
|
-
"832x1120": "720p",
|
|
84
|
-
"1504x640": "720p",
|
|
85
|
-
"640x1504": "720p",
|
|
86
|
-
"1920x1080": "1080p",
|
|
87
|
-
"1080x1920": "1080p",
|
|
88
|
-
"1664x1248": "1080p",
|
|
89
|
-
"1248x1664": "1080p",
|
|
90
|
-
"1440x1440": "1080p",
|
|
91
|
-
"2206x946": "1080p",
|
|
92
|
-
"946x2206": "1080p",
|
|
93
|
-
"1920x1088": "1080p",
|
|
94
|
-
"1088x1920": "1080p",
|
|
95
|
-
"2176x928": "1080p",
|
|
96
|
-
"928x2176": "1080p"
|
|
97
|
-
};
|
|
98
|
-
var ByteDanceVideoModel = class {
|
|
99
|
-
constructor(modelId, config) {
|
|
100
|
-
this.modelId = modelId;
|
|
101
|
-
this.config = config;
|
|
102
|
-
this.specificationVersion = "v3";
|
|
103
|
-
this.maxVideosPerCall = 1;
|
|
104
|
-
}
|
|
105
|
-
get provider() {
|
|
106
|
-
return this.config.provider;
|
|
107
|
-
}
|
|
108
|
-
async doGenerate(options) {
|
|
109
|
-
var _a, _b, _c, _d, _e, _f;
|
|
110
|
-
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
111
|
-
const warnings = [];
|
|
112
|
-
const byteDanceOptions = await parseProviderOptions({
|
|
113
|
-
provider: "bytedance",
|
|
114
|
-
providerOptions: options.providerOptions,
|
|
115
|
-
schema: byteDanceVideoProviderOptionsSchema
|
|
116
|
-
});
|
|
117
|
-
if (options.fps) {
|
|
118
|
-
warnings.push({
|
|
119
|
-
type: "unsupported",
|
|
120
|
-
feature: "fps",
|
|
121
|
-
details: "ByteDance video models do not support custom FPS. Frame rate is fixed at 24 fps."
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
if (options.n != null && options.n > 1) {
|
|
125
|
-
warnings.push({
|
|
126
|
-
type: "unsupported",
|
|
127
|
-
feature: "n",
|
|
128
|
-
details: "ByteDance video models do not support generating multiple videos per call. Only 1 video will be generated."
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
const content = [];
|
|
132
|
-
if (options.prompt != null) {
|
|
133
|
-
content.push({
|
|
134
|
-
type: "text",
|
|
135
|
-
text: options.prompt
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
if (options.image != null) {
|
|
139
|
-
content.push({
|
|
140
|
-
type: "image_url",
|
|
141
|
-
image_url: { url: convertImageModelFileToDataUri(options.image) }
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
if ((byteDanceOptions == null ? void 0 : byteDanceOptions.lastFrameImage) != null) {
|
|
145
|
-
content.push({
|
|
146
|
-
type: "image_url",
|
|
147
|
-
image_url: { url: byteDanceOptions.lastFrameImage },
|
|
148
|
-
role: "last_frame"
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
if ((byteDanceOptions == null ? void 0 : byteDanceOptions.referenceImages) != null && byteDanceOptions.referenceImages.length > 0) {
|
|
152
|
-
for (const imageUrl of byteDanceOptions.referenceImages) {
|
|
153
|
-
content.push({
|
|
154
|
-
type: "image_url",
|
|
155
|
-
image_url: { url: imageUrl },
|
|
156
|
-
role: "reference_image"
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
const body = {
|
|
161
|
-
model: this.modelId,
|
|
162
|
-
content
|
|
163
|
-
};
|
|
164
|
-
if (options.aspectRatio) {
|
|
165
|
-
body.ratio = options.aspectRatio;
|
|
166
|
-
}
|
|
167
|
-
if (options.duration) {
|
|
168
|
-
body.duration = options.duration;
|
|
169
|
-
}
|
|
170
|
-
if (options.seed) {
|
|
171
|
-
body.seed = options.seed;
|
|
172
|
-
}
|
|
173
|
-
if (options.resolution) {
|
|
174
|
-
const mapped = RESOLUTION_MAP[options.resolution];
|
|
175
|
-
if (mapped) {
|
|
176
|
-
body.resolution = mapped;
|
|
177
|
-
} else {
|
|
178
|
-
body.resolution = options.resolution;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
if (byteDanceOptions != null) {
|
|
182
|
-
if (byteDanceOptions.watermark != null) {
|
|
183
|
-
body.watermark = byteDanceOptions.watermark;
|
|
184
|
-
}
|
|
185
|
-
if (byteDanceOptions.generateAudio != null) {
|
|
186
|
-
body.generate_audio = byteDanceOptions.generateAudio;
|
|
187
|
-
}
|
|
188
|
-
if (byteDanceOptions.cameraFixed != null) {
|
|
189
|
-
body.camera_fixed = byteDanceOptions.cameraFixed;
|
|
190
|
-
}
|
|
191
|
-
if (byteDanceOptions.returnLastFrame != null) {
|
|
192
|
-
body.return_last_frame = byteDanceOptions.returnLastFrame;
|
|
193
|
-
}
|
|
194
|
-
if (byteDanceOptions.serviceTier != null) {
|
|
195
|
-
body.service_tier = byteDanceOptions.serviceTier;
|
|
196
|
-
}
|
|
197
|
-
if (byteDanceOptions.draft != null) {
|
|
198
|
-
body.draft = byteDanceOptions.draft;
|
|
199
|
-
}
|
|
200
|
-
for (const [key, value] of Object.entries(byteDanceOptions)) {
|
|
201
|
-
if (!HANDLED_PROVIDER_OPTIONS.has(key)) {
|
|
202
|
-
body[key] = value;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
const createUrl = `${this.config.baseURL}/contents/generations/tasks`;
|
|
207
|
-
const { value: createResponse } = await postJsonToApi({
|
|
208
|
-
url: createUrl,
|
|
209
|
-
headers: combineHeaders(
|
|
210
|
-
await resolve(this.config.headers),
|
|
211
|
-
options.headers
|
|
212
|
-
),
|
|
213
|
-
body,
|
|
214
|
-
failedResponseHandler: byteDanceFailedResponseHandler,
|
|
215
|
-
successfulResponseHandler: createJsonResponseHandler(
|
|
216
|
-
byteDanceTaskResponseSchema
|
|
217
|
-
),
|
|
218
|
-
abortSignal: options.abortSignal,
|
|
219
|
-
fetch: this.config.fetch
|
|
220
|
-
});
|
|
221
|
-
const taskId = createResponse.id;
|
|
222
|
-
if (!taskId) {
|
|
223
|
-
throw new AISDKError({
|
|
224
|
-
name: "BYTEDANCE_VIDEO_GENERATION_ERROR",
|
|
225
|
-
message: "No task ID returned from API"
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
const pollIntervalMs = (_d = byteDanceOptions == null ? void 0 : byteDanceOptions.pollIntervalMs) != null ? _d : 3e3;
|
|
229
|
-
const pollTimeoutMs = (_e = byteDanceOptions == null ? void 0 : byteDanceOptions.pollTimeoutMs) != null ? _e : 3e5;
|
|
230
|
-
const startTime = Date.now();
|
|
231
|
-
let response;
|
|
232
|
-
let responseHeaders;
|
|
233
|
-
while (true) {
|
|
234
|
-
const statusUrl = `${this.config.baseURL}/contents/generations/tasks/${taskId}`;
|
|
235
|
-
const { value: statusResponse, responseHeaders: statusHeaders } = await getFromApi({
|
|
236
|
-
url: statusUrl,
|
|
237
|
-
headers: combineHeaders(
|
|
238
|
-
await resolve(this.config.headers),
|
|
239
|
-
options.headers
|
|
240
|
-
),
|
|
241
|
-
failedResponseHandler: byteDanceFailedResponseHandler,
|
|
242
|
-
successfulResponseHandler: createJsonResponseHandler(
|
|
243
|
-
byteDanceStatusResponseSchema
|
|
244
|
-
),
|
|
245
|
-
abortSignal: options.abortSignal,
|
|
246
|
-
fetch: this.config.fetch
|
|
247
|
-
});
|
|
248
|
-
if (statusResponse.status === "succeeded") {
|
|
249
|
-
response = statusResponse;
|
|
250
|
-
responseHeaders = statusHeaders;
|
|
251
|
-
break;
|
|
252
|
-
}
|
|
253
|
-
if (statusResponse.status === "failed") {
|
|
254
|
-
throw new AISDKError({
|
|
255
|
-
name: "BYTEDANCE_VIDEO_GENERATION_FAILED",
|
|
256
|
-
message: `Video generation failed: ${JSON.stringify(statusResponse)}`
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
if (Date.now() - startTime > pollTimeoutMs) {
|
|
260
|
-
throw new AISDKError({
|
|
261
|
-
name: "BYTEDANCE_VIDEO_GENERATION_TIMEOUT",
|
|
262
|
-
message: `Video generation timed out after ${pollTimeoutMs}ms`
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
await delay(pollIntervalMs, { abortSignal: options.abortSignal });
|
|
266
|
-
}
|
|
267
|
-
const videoUrl = (_f = response.content) == null ? void 0 : _f.video_url;
|
|
268
|
-
if (!videoUrl) {
|
|
269
|
-
throw new AISDKError({
|
|
270
|
-
name: "BYTEDANCE_VIDEO_GENERATION_ERROR",
|
|
271
|
-
message: "No video URL in response"
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
return {
|
|
275
|
-
videos: [
|
|
276
|
-
{
|
|
277
|
-
type: "url",
|
|
278
|
-
url: videoUrl,
|
|
279
|
-
mediaType: "video/mp4"
|
|
280
|
-
}
|
|
281
|
-
],
|
|
282
|
-
warnings,
|
|
283
|
-
response: {
|
|
284
|
-
timestamp: currentDate,
|
|
285
|
-
modelId: this.modelId,
|
|
286
|
-
headers: responseHeaders
|
|
287
|
-
},
|
|
288
|
-
providerMetadata: {
|
|
289
|
-
bytedance: {
|
|
290
|
-
taskId,
|
|
291
|
-
usage: response.usage
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
};
|
|
297
|
-
var byteDanceTaskResponseSchema = z.object({
|
|
298
|
-
id: z.string().nullish()
|
|
299
|
-
});
|
|
300
|
-
var byteDanceStatusResponseSchema = z.object({
|
|
301
|
-
id: z.string().nullish(),
|
|
302
|
-
model: z.string().nullish(),
|
|
303
|
-
status: z.string(),
|
|
304
|
-
content: z.object({
|
|
305
|
-
video_url: z.string().nullish()
|
|
306
|
-
}).nullish(),
|
|
307
|
-
usage: z.object({
|
|
308
|
-
completion_tokens: z.number().nullish()
|
|
309
|
-
}).nullish()
|
|
310
|
-
});
|
|
311
|
-
var byteDanceErrorSchema = z.object({
|
|
312
|
-
error: z.object({
|
|
313
|
-
message: z.string(),
|
|
314
|
-
code: z.string().nullish()
|
|
315
|
-
}).nullish(),
|
|
316
|
-
message: z.string().nullish()
|
|
317
|
-
});
|
|
318
|
-
var byteDanceFailedResponseHandler = createJsonErrorResponseHandler({
|
|
319
|
-
errorSchema: byteDanceErrorSchema,
|
|
320
|
-
errorToMessage: (data) => {
|
|
321
|
-
var _a, _b, _c;
|
|
322
|
-
return (_c = (_b = (_a = data.error) == null ? void 0 : _a.message) != null ? _b : data.message) != null ? _c : "Unknown error";
|
|
323
|
-
}
|
|
324
|
-
});
|
|
325
|
-
|
|
326
|
-
// src/bytedance-provider.ts
|
|
327
|
-
var defaultBaseURL = "https://ark.ap-southeast.bytepluses.com/api/v3";
|
|
328
|
-
function createByteDance(options = {}) {
|
|
329
|
-
var _a;
|
|
330
|
-
const baseURL = withoutTrailingSlash((_a = options.baseURL) != null ? _a : defaultBaseURL);
|
|
331
|
-
const getHeaders = () => ({
|
|
332
|
-
Authorization: `Bearer ${loadApiKey({
|
|
333
|
-
apiKey: options.apiKey,
|
|
334
|
-
environmentVariableName: "ARK_API_KEY",
|
|
335
|
-
description: "ByteDance ModelArk"
|
|
336
|
-
})}`,
|
|
337
|
-
"Content-Type": "application/json",
|
|
338
|
-
...options.headers
|
|
339
|
-
});
|
|
340
|
-
const createVideoModel = (modelId) => new ByteDanceVideoModel(modelId, {
|
|
341
|
-
provider: "bytedance.video",
|
|
342
|
-
baseURL: baseURL != null ? baseURL : defaultBaseURL,
|
|
343
|
-
headers: getHeaders,
|
|
344
|
-
fetch: options.fetch
|
|
345
|
-
});
|
|
346
|
-
return {
|
|
347
|
-
specificationVersion: "v3",
|
|
348
|
-
embeddingModel: (modelId) => {
|
|
349
|
-
throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
|
|
350
|
-
},
|
|
351
|
-
imageModel: (modelId) => {
|
|
352
|
-
throw new NoSuchModelError({ modelId, modelType: "imageModel" });
|
|
353
|
-
},
|
|
354
|
-
languageModel: (modelId) => {
|
|
355
|
-
throw new NoSuchModelError({ modelId, modelType: "languageModel" });
|
|
356
|
-
},
|
|
357
|
-
video: createVideoModel,
|
|
358
|
-
videoModel: createVideoModel
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
var byteDance = createByteDance();
|
|
362
|
-
|
|
363
|
-
// src/version.ts
|
|
364
|
-
var VERSION = "2.0.0-beta.3";
|
|
365
|
-
export {
|
|
366
|
-
VERSION,
|
|
367
|
-
byteDance,
|
|
368
|
-
createByteDance
|
|
369
|
-
};
|
|
370
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bytedance-provider.ts","../src/bytedance-video-model.ts","../src/version.ts"],"sourcesContent":["import {\n type Experimental_VideoModelV3,\n NoSuchModelError,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\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 ProviderV3 {\n /**\n * Creates a model for video generation.\n */\n video(modelId: ByteDanceVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: ByteDanceVideoModelId): Experimental_VideoModelV3;\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: 'v3' 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_VideoModelV3,\n type SharedV3Warning,\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 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 'pollIntervalMs',\n 'pollTimeoutMs',\n]);\n\nexport const byteDanceVideoProviderOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\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 pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n })\n .passthrough(),\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\nexport class ByteDanceVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3';\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_VideoModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV3Warning[] = [];\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 if (options.image != null) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(options.image) },\n });\n }\n\n // Add last frame image if provided\n if (byteDanceOptions?.lastFrameImage != null) {\n content.push({\n type: 'image_url',\n image_url: { url: byteDanceOptions.lastFrameImage },\n role: 'last_frame',\n });\n }\n\n // Add reference images if provided\n if (\n byteDanceOptions?.referenceImages != null &&\n byteDanceOptions.referenceImages.length > 0\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\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 if (byteDanceOptions != null) {\n if (byteDanceOptions.watermark != null) {\n body.watermark = byteDanceOptions.watermark;\n }\n if (byteDanceOptions.generateAudio != null) {\n body.generate_audio = byteDanceOptions.generateAudio;\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\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","declare const __PACKAGE_VERSION__: string;\n\nexport const VERSION = __PACKAGE_VERSION__;\n"],"mappings":"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","names":[]}
|