ai 7.0.7 → 7.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/index.d.ts +19 -2
- package/dist/index.js +62 -44
- package/dist/index.js.map +1 -1
- package/dist/internal/index.js +1 -1
- package/docs/03-ai-sdk-core/38-video-generation.mdx +40 -0
- package/docs/07-reference/01-ai-sdk-core/13-generate-video.mdx +12 -0
- package/package.json +4 -4
- package/src/generate-video/generate-video.ts +122 -49
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# ai
|
|
2
2
|
|
|
3
|
+
## 7.0.8
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0274f34: feat (video): add first-class `frameImages` and `inputReferences` call options for video generation
|
|
8
|
+
- Updated dependencies [0274f34]
|
|
9
|
+
- @ai-sdk/provider@4.0.1
|
|
10
|
+
- @ai-sdk/gateway@4.0.6
|
|
11
|
+
- @ai-sdk/provider-utils@5.0.2
|
|
12
|
+
|
|
3
13
|
## 7.0.7
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _ai_sdk_provider from '@ai-sdk/provider';
|
|
2
|
-
import { EmbeddingModelV4, EmbeddingModelV3, EmbeddingModelV2, EmbeddingModelV4Embedding, EmbeddingModelV4Middleware, ImageModelV4, ImageModelV3, ImageModelV2, ImageModelV4ProviderMetadata, ImageModelV2ProviderMetadata, ImageModelV4Middleware, JSONValue as JSONValue$1, LanguageModelV4, LanguageModelV3, LanguageModelV2, SharedV4Warning, LanguageModelV4Source, LanguageModelV4Middleware, RerankingModelV4, RerankingModelV3, SharedV4ProviderMetadata, SharedV4ProviderReference, SpeechModelV4, SpeechModelV3, SpeechModelV2, TranscriptionModelV4, TranscriptionModelV3, TranscriptionModelV2, JSONObject, ImageModelV4Usage, LanguageModelV4CallOptions, LanguageModelV4Prompt, AISDKError, LanguageModelV4ToolCall, JSONSchema7, ProviderV4, ProviderV3, ProviderV2, SharedV4Headers, JSONParseError, TypeValidationError, Experimental_VideoModelV4, Experimental_VideoModelV3, EmbeddingModelV4CallOptions, Experimental_RealtimeFactoryV4, Experimental_RealtimeFactoryV4GetTokenOptions, Experimental_RealtimeFactoryV4GetTokenResult, Experimental_RealtimeModelV4, Experimental_RealtimeModelV4ClientEvent, Experimental_RealtimeModelV4ServerEvent, Experimental_RealtimeModelV4SessionConfig, Experimental_RealtimeModelV4ToolDefinition, FilesV4, SkillsV4, NoSuchModelError, FilesV4UploadFileCallOptions, SkillsV4UploadSkillResult, SkillsV4UploadSkillCallOptions, SkillsV4File } from '@ai-sdk/provider';
|
|
2
|
+
import { EmbeddingModelV4, EmbeddingModelV3, EmbeddingModelV2, EmbeddingModelV4Embedding, EmbeddingModelV4Middleware, ImageModelV4, ImageModelV3, ImageModelV2, ImageModelV4ProviderMetadata, ImageModelV2ProviderMetadata, ImageModelV4Middleware, JSONValue as JSONValue$1, LanguageModelV4, LanguageModelV3, LanguageModelV2, SharedV4Warning, LanguageModelV4Source, LanguageModelV4Middleware, RerankingModelV4, RerankingModelV3, SharedV4ProviderMetadata, SharedV4ProviderReference, SpeechModelV4, SpeechModelV3, SpeechModelV2, TranscriptionModelV4, TranscriptionModelV3, TranscriptionModelV2, JSONObject, ImageModelV4Usage, LanguageModelV4CallOptions, LanguageModelV4Prompt, AISDKError, LanguageModelV4ToolCall, JSONSchema7, ProviderV4, ProviderV3, ProviderV2, SharedV4Headers, JSONParseError, TypeValidationError, Experimental_VideoModelV4, Experimental_VideoModelV3, Experimental_VideoModelV4FrameType, EmbeddingModelV4CallOptions, Experimental_RealtimeFactoryV4, Experimental_RealtimeFactoryV4GetTokenOptions, Experimental_RealtimeFactoryV4GetTokenResult, Experimental_RealtimeModelV4, Experimental_RealtimeModelV4ClientEvent, Experimental_RealtimeModelV4ServerEvent, Experimental_RealtimeModelV4SessionConfig, Experimental_RealtimeModelV4ToolDefinition, FilesV4, SkillsV4, NoSuchModelError, FilesV4UploadFileCallOptions, SkillsV4UploadSkillResult, SkillsV4UploadSkillCallOptions, SkillsV4File } from '@ai-sdk/provider';
|
|
3
3
|
export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, JSONSchema7, LoadAPIKeyError, LoadSettingError, NoContentGeneratedError, NoSuchModelError, NoSuchProviderReferenceError, TooManyEmbeddingValuesForCallError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
|
|
4
4
|
import { GatewayModelId } from '@ai-sdk/gateway';
|
|
5
5
|
export { GatewayModelId, createGateway, gateway } from '@ai-sdk/gateway';
|
|
@@ -7879,7 +7879,7 @@ type GenerateVideoPrompt = string | {
|
|
|
7879
7879
|
image: DataContent;
|
|
7880
7880
|
text?: string;
|
|
7881
7881
|
};
|
|
7882
|
-
declare function experimental_generateVideo({ model: modelArg, prompt: promptArg, n, maxVideosPerCall, aspectRatio, resolution, duration, fps, seed, generateAudio, providerOptions, maxRetries: maxRetriesArg, abortSignal, headers, download: downloadFn, }: {
|
|
7882
|
+
declare function experimental_generateVideo({ model: modelArg, prompt: promptArg, n, maxVideosPerCall, aspectRatio, resolution, duration, fps, seed, frameImages, inputReferences, generateAudio, providerOptions, maxRetries: maxRetriesArg, abortSignal, headers, download: downloadFn, }: {
|
|
7883
7883
|
/**
|
|
7884
7884
|
* The video model to use.
|
|
7885
7885
|
*/
|
|
@@ -7916,6 +7916,23 @@ declare function experimental_generateVideo({ model: modelArg, prompt: promptArg
|
|
|
7916
7916
|
* Seed for the video generation.
|
|
7917
7917
|
*/
|
|
7918
7918
|
seed?: number;
|
|
7919
|
+
/**
|
|
7920
|
+
* Role-tagged image inputs for image-to-video and first-last-frame generation.
|
|
7921
|
+
*/
|
|
7922
|
+
frameImages?: Array<{
|
|
7923
|
+
/**
|
|
7924
|
+
* The image for this frame.
|
|
7925
|
+
*/
|
|
7926
|
+
image: DataContent;
|
|
7927
|
+
/**
|
|
7928
|
+
* Which frame this image represents.
|
|
7929
|
+
*/
|
|
7930
|
+
frameType: Experimental_VideoModelV4FrameType;
|
|
7931
|
+
}>;
|
|
7932
|
+
/**
|
|
7933
|
+
* Reference image inputs for reference-to-video generation.
|
|
7934
|
+
*/
|
|
7935
|
+
inputReferences?: Array<DataContent>;
|
|
7919
7936
|
/**
|
|
7920
7937
|
* Whether the model should generate audio alongside the video.
|
|
7921
7938
|
*/
|
package/dist/index.js
CHANGED
|
@@ -1089,7 +1089,7 @@ import {
|
|
|
1089
1089
|
} from "@ai-sdk/provider-utils";
|
|
1090
1090
|
|
|
1091
1091
|
// src/version.ts
|
|
1092
|
-
var VERSION = true ? "7.0.
|
|
1092
|
+
var VERSION = true ? "7.0.8" : "0.0.0-test";
|
|
1093
1093
|
|
|
1094
1094
|
// src/util/download/download.ts
|
|
1095
1095
|
var download = async ({
|
|
@@ -13429,6 +13429,8 @@ async function experimental_generateVideo({
|
|
|
13429
13429
|
duration,
|
|
13430
13430
|
fps,
|
|
13431
13431
|
seed,
|
|
13432
|
+
frameImages,
|
|
13433
|
+
inputReferences,
|
|
13432
13434
|
generateAudio,
|
|
13433
13435
|
providerOptions,
|
|
13434
13436
|
maxRetries: maxRetriesArg,
|
|
@@ -13436,7 +13438,7 @@ async function experimental_generateVideo({
|
|
|
13436
13438
|
headers,
|
|
13437
13439
|
download: downloadFn = defaultDownload
|
|
13438
13440
|
}) {
|
|
13439
|
-
var _a22;
|
|
13441
|
+
var _a22, _b;
|
|
13440
13442
|
const model = resolveVideoModel(modelArg);
|
|
13441
13443
|
const headersWithUserAgent = withUserAgentSuffix9(
|
|
13442
13444
|
headers != null ? headers : {},
|
|
@@ -13447,7 +13449,32 @@ async function experimental_generateVideo({
|
|
|
13447
13449
|
abortSignal
|
|
13448
13450
|
});
|
|
13449
13451
|
const { prompt, image } = normalizePrompt2(promptArg);
|
|
13450
|
-
const
|
|
13452
|
+
const normalizedFrameImages = frameImages == null ? void 0 : frameImages.map((frame) => ({
|
|
13453
|
+
image: normalizeImageData(frame.image),
|
|
13454
|
+
frameType: frame.frameType
|
|
13455
|
+
}));
|
|
13456
|
+
const normalizedInputReferences = inputReferences == null ? void 0 : inputReferences.map(
|
|
13457
|
+
(reference) => normalizeImageData(reference)
|
|
13458
|
+
);
|
|
13459
|
+
const effectiveInputReferences = normalizedFrameImages != null && normalizedFrameImages.length > 0 ? void 0 : normalizedInputReferences;
|
|
13460
|
+
const warnings = [];
|
|
13461
|
+
if (normalizedFrameImages != null && normalizedFrameImages.length > 0 && normalizedInputReferences != null && normalizedInputReferences.length > 0) {
|
|
13462
|
+
warnings.push({
|
|
13463
|
+
type: "other",
|
|
13464
|
+
message: "inputReferences were ignored because frameImages were provided; frameImages and inputReferences cannot be combined."
|
|
13465
|
+
});
|
|
13466
|
+
}
|
|
13467
|
+
const firstFrameImage = (_a22 = normalizedFrameImages == null ? void 0 : normalizedFrameImages.find(
|
|
13468
|
+
(frame) => frame.frameType === "first_frame"
|
|
13469
|
+
)) == null ? void 0 : _a22.image;
|
|
13470
|
+
if (image != null && firstFrameImage != null) {
|
|
13471
|
+
warnings.push({
|
|
13472
|
+
type: "other",
|
|
13473
|
+
message: "prompt.image was ignored because a first_frame frameImage was provided; the first_frame frameImage takes precedence as the start image."
|
|
13474
|
+
});
|
|
13475
|
+
}
|
|
13476
|
+
const resolvedImage = firstFrameImage != null ? firstFrameImage : image;
|
|
13477
|
+
const maxVideosPerCallWithDefault = (_b = maxVideosPerCall != null ? maxVideosPerCall : await invokeModelMaxVideosPerCall(model)) != null ? _b : 1;
|
|
13451
13478
|
const callCount = Math.ceil(n / maxVideosPerCallWithDefault);
|
|
13452
13479
|
const callVideoCounts = Array.from({ length: callCount }, (_, index) => {
|
|
13453
13480
|
const remaining = n - index * maxVideosPerCallWithDefault;
|
|
@@ -13464,8 +13491,10 @@ async function experimental_generateVideo({
|
|
|
13464
13491
|
duration,
|
|
13465
13492
|
fps,
|
|
13466
13493
|
seed,
|
|
13494
|
+
image: resolvedImage,
|
|
13495
|
+
frameImages: normalizedFrameImages,
|
|
13496
|
+
inputReferences: effectiveInputReferences,
|
|
13467
13497
|
generateAudio,
|
|
13468
|
-
image,
|
|
13469
13498
|
providerOptions: providerOptions != null ? providerOptions : {},
|
|
13470
13499
|
headers: headersWithUserAgent,
|
|
13471
13500
|
abortSignal
|
|
@@ -13474,7 +13503,6 @@ async function experimental_generateVideo({
|
|
|
13474
13503
|
)
|
|
13475
13504
|
);
|
|
13476
13505
|
const videos = [];
|
|
13477
|
-
const warnings = [];
|
|
13478
13506
|
const responses = [];
|
|
13479
13507
|
const providerMetadata = {};
|
|
13480
13508
|
for (const result of results) {
|
|
@@ -13570,56 +13598,46 @@ async function experimental_generateVideo({
|
|
|
13570
13598
|
};
|
|
13571
13599
|
}
|
|
13572
13600
|
function normalizePrompt2(promptArg) {
|
|
13573
|
-
var _a22, _b;
|
|
13574
13601
|
if (typeof promptArg === "string") {
|
|
13575
13602
|
return {
|
|
13576
13603
|
prompt: promptArg,
|
|
13577
13604
|
image: void 0
|
|
13578
13605
|
};
|
|
13579
13606
|
}
|
|
13580
|
-
|
|
13581
|
-
|
|
13582
|
-
|
|
13583
|
-
|
|
13584
|
-
|
|
13585
|
-
|
|
13586
|
-
|
|
13587
|
-
|
|
13588
|
-
|
|
13589
|
-
|
|
13590
|
-
|
|
13591
|
-
|
|
13592
|
-
|
|
13593
|
-
|
|
13594
|
-
|
|
13595
|
-
|
|
13596
|
-
|
|
13597
|
-
const bytes = convertBase64ToUint8Array5(dataContent);
|
|
13598
|
-
const mediaType = (_a22 = detectMediaType4({
|
|
13599
|
-
data: bytes,
|
|
13600
|
-
topLevelType: "image"
|
|
13601
|
-
})) != null ? _a22 : "image/png";
|
|
13602
|
-
image = {
|
|
13603
|
-
type: "file",
|
|
13604
|
-
mediaType,
|
|
13605
|
-
data: bytes
|
|
13606
|
-
};
|
|
13607
|
-
}
|
|
13608
|
-
} else if (dataContent instanceof Uint8Array) {
|
|
13609
|
-
const mediaType = (_b = detectMediaType4({
|
|
13610
|
-
data: dataContent,
|
|
13611
|
-
topLevelType: "image"
|
|
13612
|
-
})) != null ? _b : "image/png";
|
|
13613
|
-
image = {
|
|
13607
|
+
return {
|
|
13608
|
+
prompt: promptArg.text,
|
|
13609
|
+
image: promptArg.image != null ? normalizeImageData(promptArg.image) : void 0
|
|
13610
|
+
};
|
|
13611
|
+
}
|
|
13612
|
+
function normalizeImageData(dataContent) {
|
|
13613
|
+
var _a22, _b;
|
|
13614
|
+
if (typeof dataContent === "string") {
|
|
13615
|
+
if (dataContent.startsWith("http://") || dataContent.startsWith("https://")) {
|
|
13616
|
+
return {
|
|
13617
|
+
type: "url",
|
|
13618
|
+
url: dataContent
|
|
13619
|
+
};
|
|
13620
|
+
}
|
|
13621
|
+
if (dataContent.startsWith("data:")) {
|
|
13622
|
+
const { mediaType, base64Content } = splitDataUrl(dataContent);
|
|
13623
|
+
return {
|
|
13614
13624
|
type: "file",
|
|
13615
|
-
mediaType,
|
|
13616
|
-
data:
|
|
13625
|
+
mediaType: mediaType != null ? mediaType : "image/png",
|
|
13626
|
+
data: convertBase64ToUint8Array5(base64Content != null ? base64Content : "")
|
|
13617
13627
|
};
|
|
13618
13628
|
}
|
|
13629
|
+
const bytes2 = convertBase64ToUint8Array5(dataContent);
|
|
13630
|
+
return {
|
|
13631
|
+
type: "file",
|
|
13632
|
+
mediaType: (_a22 = detectMediaType4({ data: bytes2, topLevelType: "image" })) != null ? _a22 : "image/png",
|
|
13633
|
+
data: bytes2
|
|
13634
|
+
};
|
|
13619
13635
|
}
|
|
13636
|
+
const bytes = convertDataContentToUint8Array(dataContent);
|
|
13620
13637
|
return {
|
|
13621
|
-
|
|
13622
|
-
image
|
|
13638
|
+
type: "file",
|
|
13639
|
+
mediaType: (_b = detectMediaType4({ data: bytes, topLevelType: "image" })) != null ? _b : "image/png",
|
|
13640
|
+
data: bytes
|
|
13623
13641
|
};
|
|
13624
13642
|
}
|
|
13625
13643
|
async function invokeModelMaxVideosPerCall(model) {
|