@ai-sdk/bytedance 2.0.0-beta.4 → 2.0.0-beta.52
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 +376 -0
- package/README.md +2 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +99 -86
- package/dist/index.js.map +1 -1
- package/package.json +14 -14
- package/dist/index.d.mts +0 -62
- package/dist/index.mjs +0 -370
- package/dist/index.mjs.map +0 -1
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
|
);
|
|
@@ -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,8 @@ 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) },
|
|
146
|
+
...(byteDanceOptions == null ? void 0 : byteDanceOptions.lastFrameImage) != null ? { role: "first_frame" } : {}
|
|
151
147
|
});
|
|
152
148
|
}
|
|
153
149
|
if ((byteDanceOptions == null ? void 0 : byteDanceOptions.lastFrameImage) != null) {
|
|
@@ -166,6 +162,24 @@ var ByteDanceVideoModel = class {
|
|
|
166
162
|
});
|
|
167
163
|
}
|
|
168
164
|
}
|
|
165
|
+
if ((byteDanceOptions == null ? void 0 : byteDanceOptions.referenceVideos) != null && byteDanceOptions.referenceVideos.length > 0) {
|
|
166
|
+
for (const videoUrl2 of byteDanceOptions.referenceVideos) {
|
|
167
|
+
content.push({
|
|
168
|
+
type: "video_url",
|
|
169
|
+
video_url: { url: videoUrl2 },
|
|
170
|
+
role: "reference_video"
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if ((byteDanceOptions == null ? void 0 : byteDanceOptions.referenceAudio) != null && byteDanceOptions.referenceAudio.length > 0) {
|
|
175
|
+
for (const audioUrl of byteDanceOptions.referenceAudio) {
|
|
176
|
+
content.push({
|
|
177
|
+
type: "audio_url",
|
|
178
|
+
audio_url: { url: audioUrl },
|
|
179
|
+
role: "reference_audio"
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
169
183
|
const body = {
|
|
170
184
|
model: this.modelId,
|
|
171
185
|
content
|
|
@@ -213,15 +227,15 @@ var ByteDanceVideoModel = class {
|
|
|
213
227
|
}
|
|
214
228
|
}
|
|
215
229
|
const createUrl = `${this.config.baseURL}/contents/generations/tasks`;
|
|
216
|
-
const { value: createResponse } = await
|
|
230
|
+
const { value: createResponse } = await postJsonToApi({
|
|
217
231
|
url: createUrl,
|
|
218
|
-
headers:
|
|
219
|
-
await
|
|
232
|
+
headers: combineHeaders(
|
|
233
|
+
await resolve(this.config.headers),
|
|
220
234
|
options.headers
|
|
221
235
|
),
|
|
222
236
|
body,
|
|
223
237
|
failedResponseHandler: byteDanceFailedResponseHandler,
|
|
224
|
-
successfulResponseHandler:
|
|
238
|
+
successfulResponseHandler: createJsonResponseHandler(
|
|
225
239
|
byteDanceTaskResponseSchema
|
|
226
240
|
),
|
|
227
241
|
abortSignal: options.abortSignal,
|
|
@@ -229,7 +243,7 @@ var ByteDanceVideoModel = class {
|
|
|
229
243
|
});
|
|
230
244
|
const taskId = createResponse.id;
|
|
231
245
|
if (!taskId) {
|
|
232
|
-
throw new
|
|
246
|
+
throw new AISDKError({
|
|
233
247
|
name: "BYTEDANCE_VIDEO_GENERATION_ERROR",
|
|
234
248
|
message: "No task ID returned from API"
|
|
235
249
|
});
|
|
@@ -241,14 +255,14 @@ var ByteDanceVideoModel = class {
|
|
|
241
255
|
let responseHeaders;
|
|
242
256
|
while (true) {
|
|
243
257
|
const statusUrl = `${this.config.baseURL}/contents/generations/tasks/${taskId}`;
|
|
244
|
-
const { value: statusResponse, responseHeaders: statusHeaders } = await
|
|
258
|
+
const { value: statusResponse, responseHeaders: statusHeaders } = await getFromApi({
|
|
245
259
|
url: statusUrl,
|
|
246
|
-
headers:
|
|
247
|
-
await
|
|
260
|
+
headers: combineHeaders(
|
|
261
|
+
await resolve(this.config.headers),
|
|
248
262
|
options.headers
|
|
249
263
|
),
|
|
250
264
|
failedResponseHandler: byteDanceFailedResponseHandler,
|
|
251
|
-
successfulResponseHandler:
|
|
265
|
+
successfulResponseHandler: createJsonResponseHandler(
|
|
252
266
|
byteDanceStatusResponseSchema
|
|
253
267
|
),
|
|
254
268
|
abortSignal: options.abortSignal,
|
|
@@ -260,22 +274,22 @@ var ByteDanceVideoModel = class {
|
|
|
260
274
|
break;
|
|
261
275
|
}
|
|
262
276
|
if (statusResponse.status === "failed") {
|
|
263
|
-
throw new
|
|
277
|
+
throw new AISDKError({
|
|
264
278
|
name: "BYTEDANCE_VIDEO_GENERATION_FAILED",
|
|
265
279
|
message: `Video generation failed: ${JSON.stringify(statusResponse)}`
|
|
266
280
|
});
|
|
267
281
|
}
|
|
268
282
|
if (Date.now() - startTime > pollTimeoutMs) {
|
|
269
|
-
throw new
|
|
283
|
+
throw new AISDKError({
|
|
270
284
|
name: "BYTEDANCE_VIDEO_GENERATION_TIMEOUT",
|
|
271
285
|
message: `Video generation timed out after ${pollTimeoutMs}ms`
|
|
272
286
|
});
|
|
273
287
|
}
|
|
274
|
-
await
|
|
288
|
+
await delay(pollIntervalMs, { abortSignal: options.abortSignal });
|
|
275
289
|
}
|
|
276
290
|
const videoUrl = (_f = response.content) == null ? void 0 : _f.video_url;
|
|
277
291
|
if (!videoUrl) {
|
|
278
|
-
throw new
|
|
292
|
+
throw new AISDKError({
|
|
279
293
|
name: "BYTEDANCE_VIDEO_GENERATION_ERROR",
|
|
280
294
|
message: "No video URL in response"
|
|
281
295
|
});
|
|
@@ -303,28 +317,28 @@ var ByteDanceVideoModel = class {
|
|
|
303
317
|
};
|
|
304
318
|
}
|
|
305
319
|
};
|
|
306
|
-
var byteDanceTaskResponseSchema =
|
|
307
|
-
id:
|
|
320
|
+
var byteDanceTaskResponseSchema = z.object({
|
|
321
|
+
id: z.string().nullish()
|
|
308
322
|
});
|
|
309
|
-
var byteDanceStatusResponseSchema =
|
|
310
|
-
id:
|
|
311
|
-
model:
|
|
312
|
-
status:
|
|
313
|
-
content:
|
|
314
|
-
video_url:
|
|
323
|
+
var byteDanceStatusResponseSchema = z.object({
|
|
324
|
+
id: z.string().nullish(),
|
|
325
|
+
model: z.string().nullish(),
|
|
326
|
+
status: z.string(),
|
|
327
|
+
content: z.object({
|
|
328
|
+
video_url: z.string().nullish()
|
|
315
329
|
}).nullish(),
|
|
316
|
-
usage:
|
|
317
|
-
completion_tokens:
|
|
330
|
+
usage: z.object({
|
|
331
|
+
completion_tokens: z.number().nullish()
|
|
318
332
|
}).nullish()
|
|
319
333
|
});
|
|
320
|
-
var byteDanceErrorSchema =
|
|
321
|
-
error:
|
|
322
|
-
message:
|
|
323
|
-
code:
|
|
334
|
+
var byteDanceErrorSchema = z.object({
|
|
335
|
+
error: z.object({
|
|
336
|
+
message: z.string(),
|
|
337
|
+
code: z.string().nullish()
|
|
324
338
|
}).nullish(),
|
|
325
|
-
message:
|
|
339
|
+
message: z.string().nullish()
|
|
326
340
|
});
|
|
327
|
-
var byteDanceFailedResponseHandler =
|
|
341
|
+
var byteDanceFailedResponseHandler = createJsonErrorResponseHandler({
|
|
328
342
|
errorSchema: byteDanceErrorSchema,
|
|
329
343
|
errorToMessage: (data) => {
|
|
330
344
|
var _a, _b, _c;
|
|
@@ -336,9 +350,9 @@ var byteDanceFailedResponseHandler = (0, import_provider_utils.createJsonErrorRe
|
|
|
336
350
|
var defaultBaseURL = "https://ark.ap-southeast.bytepluses.com/api/v3";
|
|
337
351
|
function createByteDance(options = {}) {
|
|
338
352
|
var _a;
|
|
339
|
-
const baseURL =
|
|
353
|
+
const baseURL = withoutTrailingSlash((_a = options.baseURL) != null ? _a : defaultBaseURL);
|
|
340
354
|
const getHeaders = () => ({
|
|
341
|
-
Authorization: `Bearer ${
|
|
355
|
+
Authorization: `Bearer ${loadApiKey({
|
|
342
356
|
apiKey: options.apiKey,
|
|
343
357
|
environmentVariableName: "ARK_API_KEY",
|
|
344
358
|
description: "ByteDance ModelArk"
|
|
@@ -355,13 +369,13 @@ function createByteDance(options = {}) {
|
|
|
355
369
|
return {
|
|
356
370
|
specificationVersion: "v4",
|
|
357
371
|
embeddingModel: (modelId) => {
|
|
358
|
-
throw new
|
|
372
|
+
throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
|
|
359
373
|
},
|
|
360
374
|
imageModel: (modelId) => {
|
|
361
|
-
throw new
|
|
375
|
+
throw new NoSuchModelError({ modelId, modelType: "imageModel" });
|
|
362
376
|
},
|
|
363
377
|
languageModel: (modelId) => {
|
|
364
|
-
throw new
|
|
378
|
+
throw new NoSuchModelError({ modelId, modelType: "languageModel" });
|
|
365
379
|
},
|
|
366
380
|
video: createVideoModel,
|
|
367
381
|
videoModel: createVideoModel
|
|
@@ -370,11 +384,10 @@ function createByteDance(options = {}) {
|
|
|
370
384
|
var byteDance = createByteDance();
|
|
371
385
|
|
|
372
386
|
// src/version.ts
|
|
373
|
-
var VERSION = "2.0.0-beta.
|
|
374
|
-
|
|
375
|
-
0 && (module.exports = {
|
|
387
|
+
var VERSION = true ? "2.0.0-beta.52" : "0.0.0-test";
|
|
388
|
+
export {
|
|
376
389
|
VERSION,
|
|
377
390
|
byteDance,
|
|
378
391
|
createByteDance
|
|
379
|
-
}
|
|
392
|
+
};
|
|
380
393
|
//# 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_VideoModelV4,\n NoSuchModelError,\n type ProviderV4,\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 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 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_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 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 ...(byteDanceOptions?.lastFrameImage != null\n ? { role: 'first_frame' }\n : {}),\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","// 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"]}
|
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.52",
|
|
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,35 +15,37 @@
|
|
|
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.19",
|
|
24
|
+
"@ai-sdk/provider-utils": "5.0.0-beta.49"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@types/node": "
|
|
28
|
-
"tsup": "^8",
|
|
27
|
+
"@types/node": "22.19.19",
|
|
28
|
+
"tsup": "^8.5.1",
|
|
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.7",
|
|
32
32
|
"@vercel/ai-tsconfig": "0.0.0"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"zod": "^3.25.76 || ^4.1.8"
|
|
36
36
|
},
|
|
37
37
|
"engines": {
|
|
38
|
-
"node": ">=
|
|
38
|
+
"node": ">=22"
|
|
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 { ProviderV4, Experimental_VideoModelV4 } 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 ProviderV4 {
|
|
28
|
-
/**
|
|
29
|
-
* Creates a model for video generation.
|
|
30
|
-
*/
|
|
31
|
-
video(modelId: ByteDanceVideoModelId): Experimental_VideoModelV4;
|
|
32
|
-
/**
|
|
33
|
-
* Creates a model for video generation.
|
|
34
|
-
*/
|
|
35
|
-
videoModel(modelId: ByteDanceVideoModelId): Experimental_VideoModelV4;
|
|
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 };
|