ai 6.0.216 → 6.0.217
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 +12 -0
- package/dist/index.d.mts +19 -2
- package/dist/index.d.ts +19 -2
- package/dist/index.js +66 -45
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +66 -45
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +1 -1
- package/dist/internal/index.mjs +1 -1
- package/docs/02-foundations/02-providers-and-models.mdx +1 -0
- package/docs/03-ai-sdk-core/38-video-generation.mdx +40 -0
- package/docs/03-ai-sdk-core/40-middleware.mdx +3 -3
- 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 +142 -64
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# ai
|
|
2
2
|
|
|
3
|
+
## 6.0.217
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- fa850e6: feat (video): add first-class `frameImages` and `inputReferences` call options for video generation
|
|
8
|
+
- Updated dependencies [95bc6fd]
|
|
9
|
+
- Updated dependencies [f6b2159]
|
|
10
|
+
- Updated dependencies [fa850e6]
|
|
11
|
+
- @ai-sdk/gateway@3.0.141
|
|
12
|
+
- @ai-sdk/provider@3.0.13
|
|
13
|
+
- @ai-sdk/provider-utils@4.0.34
|
|
14
|
+
|
|
3
15
|
## 6.0.216
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _ai_sdk_provider from '@ai-sdk/provider';
|
|
2
|
-
import { EmbeddingModelV3, EmbeddingModelV2, EmbeddingModelV3Embedding, EmbeddingModelV3Middleware, ImageModelV3, ImageModelV2, ImageModelV3ProviderMetadata, ImageModelV2ProviderMetadata, ImageModelV3Middleware, JSONValue as JSONValue$1, LanguageModelV3, LanguageModelV2, SharedV3Warning, LanguageModelV3Source, LanguageModelV3Middleware, RerankingModelV3, SharedV3ProviderMetadata, SpeechModelV3, SpeechModelV2, TranscriptionModelV3, TranscriptionModelV2, JSONObject, ImageModelV3Usage, AISDKError, LanguageModelV3ToolCall, JSONSchema7, LanguageModelV3CallOptions, LanguageModelV3ToolChoice, ProviderV3, JSONParseError, TypeValidationError, Experimental_VideoModelV3, EmbeddingModelV3CallOptions, ProviderV2, NoSuchModelError } from '@ai-sdk/provider';
|
|
2
|
+
import { EmbeddingModelV3, EmbeddingModelV2, EmbeddingModelV3Embedding, EmbeddingModelV3Middleware, ImageModelV3, ImageModelV2, ImageModelV3ProviderMetadata, ImageModelV2ProviderMetadata, ImageModelV3Middleware, JSONValue as JSONValue$1, LanguageModelV3, LanguageModelV2, SharedV3Warning, LanguageModelV3Source, LanguageModelV3Middleware, RerankingModelV3, SharedV3ProviderMetadata, SpeechModelV3, SpeechModelV2, TranscriptionModelV3, TranscriptionModelV2, JSONObject, ImageModelV3Usage, AISDKError, LanguageModelV3ToolCall, JSONSchema7, LanguageModelV3CallOptions, LanguageModelV3ToolChoice, ProviderV3, JSONParseError, TypeValidationError, Experimental_VideoModelV3, Experimental_VideoModelV3FrameType, EmbeddingModelV3CallOptions, ProviderV2, NoSuchModelError } from '@ai-sdk/provider';
|
|
3
3
|
export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, JSONSchema7, LoadAPIKeyError, LoadSettingError, NoContentGeneratedError, NoSuchModelError, 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';
|
|
@@ -5863,7 +5863,7 @@ type GenerateVideoPrompt = string | {
|
|
|
5863
5863
|
image: DataContent;
|
|
5864
5864
|
text?: string;
|
|
5865
5865
|
};
|
|
5866
|
-
declare function experimental_generateVideo({ model: modelArg, prompt: promptArg, n, maxVideosPerCall, aspectRatio, resolution, duration, fps, seed, generateAudio, providerOptions, maxRetries: maxRetriesArg, abortSignal, headers, download: downloadFn, }: {
|
|
5866
|
+
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, }: {
|
|
5867
5867
|
/**
|
|
5868
5868
|
* The video model to use.
|
|
5869
5869
|
*/
|
|
@@ -5900,6 +5900,23 @@ declare function experimental_generateVideo({ model: modelArg, prompt: promptArg
|
|
|
5900
5900
|
* Seed for the video generation.
|
|
5901
5901
|
*/
|
|
5902
5902
|
seed?: number;
|
|
5903
|
+
/**
|
|
5904
|
+
* Role-tagged image inputs for image-to-video and first-last-frame generation.
|
|
5905
|
+
*/
|
|
5906
|
+
frameImages?: Array<{
|
|
5907
|
+
/**
|
|
5908
|
+
* The image for this frame.
|
|
5909
|
+
*/
|
|
5910
|
+
image: DataContent;
|
|
5911
|
+
/**
|
|
5912
|
+
* Which frame this image represents.
|
|
5913
|
+
*/
|
|
5914
|
+
frameType: Experimental_VideoModelV3FrameType;
|
|
5915
|
+
}>;
|
|
5916
|
+
/**
|
|
5917
|
+
* Reference image inputs for reference-to-video generation.
|
|
5918
|
+
*/
|
|
5919
|
+
inputReferences?: Array<DataContent>;
|
|
5903
5920
|
/**
|
|
5904
5921
|
* Whether the model should generate audio alongside the video.
|
|
5905
5922
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _ai_sdk_provider from '@ai-sdk/provider';
|
|
2
|
-
import { EmbeddingModelV3, EmbeddingModelV2, EmbeddingModelV3Embedding, EmbeddingModelV3Middleware, ImageModelV3, ImageModelV2, ImageModelV3ProviderMetadata, ImageModelV2ProviderMetadata, ImageModelV3Middleware, JSONValue as JSONValue$1, LanguageModelV3, LanguageModelV2, SharedV3Warning, LanguageModelV3Source, LanguageModelV3Middleware, RerankingModelV3, SharedV3ProviderMetadata, SpeechModelV3, SpeechModelV2, TranscriptionModelV3, TranscriptionModelV2, JSONObject, ImageModelV3Usage, AISDKError, LanguageModelV3ToolCall, JSONSchema7, LanguageModelV3CallOptions, LanguageModelV3ToolChoice, ProviderV3, JSONParseError, TypeValidationError, Experimental_VideoModelV3, EmbeddingModelV3CallOptions, ProviderV2, NoSuchModelError } from '@ai-sdk/provider';
|
|
2
|
+
import { EmbeddingModelV3, EmbeddingModelV2, EmbeddingModelV3Embedding, EmbeddingModelV3Middleware, ImageModelV3, ImageModelV2, ImageModelV3ProviderMetadata, ImageModelV2ProviderMetadata, ImageModelV3Middleware, JSONValue as JSONValue$1, LanguageModelV3, LanguageModelV2, SharedV3Warning, LanguageModelV3Source, LanguageModelV3Middleware, RerankingModelV3, SharedV3ProviderMetadata, SpeechModelV3, SpeechModelV2, TranscriptionModelV3, TranscriptionModelV2, JSONObject, ImageModelV3Usage, AISDKError, LanguageModelV3ToolCall, JSONSchema7, LanguageModelV3CallOptions, LanguageModelV3ToolChoice, ProviderV3, JSONParseError, TypeValidationError, Experimental_VideoModelV3, Experimental_VideoModelV3FrameType, EmbeddingModelV3CallOptions, ProviderV2, NoSuchModelError } from '@ai-sdk/provider';
|
|
3
3
|
export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, JSONSchema7, LoadAPIKeyError, LoadSettingError, NoContentGeneratedError, NoSuchModelError, 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';
|
|
@@ -5863,7 +5863,7 @@ type GenerateVideoPrompt = string | {
|
|
|
5863
5863
|
image: DataContent;
|
|
5864
5864
|
text?: string;
|
|
5865
5865
|
};
|
|
5866
|
-
declare function experimental_generateVideo({ model: modelArg, prompt: promptArg, n, maxVideosPerCall, aspectRatio, resolution, duration, fps, seed, generateAudio, providerOptions, maxRetries: maxRetriesArg, abortSignal, headers, download: downloadFn, }: {
|
|
5866
|
+
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, }: {
|
|
5867
5867
|
/**
|
|
5868
5868
|
* The video model to use.
|
|
5869
5869
|
*/
|
|
@@ -5900,6 +5900,23 @@ declare function experimental_generateVideo({ model: modelArg, prompt: promptArg
|
|
|
5900
5900
|
* Seed for the video generation.
|
|
5901
5901
|
*/
|
|
5902
5902
|
seed?: number;
|
|
5903
|
+
/**
|
|
5904
|
+
* Role-tagged image inputs for image-to-video and first-last-frame generation.
|
|
5905
|
+
*/
|
|
5906
|
+
frameImages?: Array<{
|
|
5907
|
+
/**
|
|
5908
|
+
* The image for this frame.
|
|
5909
|
+
*/
|
|
5910
|
+
image: DataContent;
|
|
5911
|
+
/**
|
|
5912
|
+
* Which frame this image represents.
|
|
5913
|
+
*/
|
|
5914
|
+
frameType: Experimental_VideoModelV3FrameType;
|
|
5915
|
+
}>;
|
|
5916
|
+
/**
|
|
5917
|
+
* Reference image inputs for reference-to-video generation.
|
|
5918
|
+
*/
|
|
5919
|
+
inputReferences?: Array<DataContent>;
|
|
5903
5920
|
/**
|
|
5904
5921
|
* Whether the model should generate audio alongside the video.
|
|
5905
5922
|
*/
|
package/dist/index.js
CHANGED
|
@@ -1281,7 +1281,7 @@ function detectMediaType({
|
|
|
1281
1281
|
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
1282
1282
|
|
|
1283
1283
|
// src/version.ts
|
|
1284
|
-
var VERSION = true ? "6.0.
|
|
1284
|
+
var VERSION = true ? "6.0.217" : "0.0.0-test";
|
|
1285
1285
|
|
|
1286
1286
|
// src/util/download/download.ts
|
|
1287
1287
|
var download = async ({
|
|
@@ -11892,6 +11892,8 @@ async function experimental_generateVideo({
|
|
|
11892
11892
|
duration,
|
|
11893
11893
|
fps,
|
|
11894
11894
|
seed,
|
|
11895
|
+
frameImages,
|
|
11896
|
+
inputReferences,
|
|
11895
11897
|
generateAudio,
|
|
11896
11898
|
providerOptions,
|
|
11897
11899
|
maxRetries: maxRetriesArg,
|
|
@@ -11899,7 +11901,7 @@ async function experimental_generateVideo({
|
|
|
11899
11901
|
headers,
|
|
11900
11902
|
download: downloadFn = defaultDownload
|
|
11901
11903
|
}) {
|
|
11902
|
-
var _a22;
|
|
11904
|
+
var _a22, _b;
|
|
11903
11905
|
const model = resolveVideoModel(modelArg);
|
|
11904
11906
|
const headersWithUserAgent = (0, import_provider_utils35.withUserAgentSuffix)(
|
|
11905
11907
|
headers != null ? headers : {},
|
|
@@ -11910,7 +11912,32 @@ async function experimental_generateVideo({
|
|
|
11910
11912
|
abortSignal
|
|
11911
11913
|
});
|
|
11912
11914
|
const { prompt, image } = normalizePrompt2(promptArg);
|
|
11913
|
-
const
|
|
11915
|
+
const normalizedFrameImages = frameImages == null ? void 0 : frameImages.map((frame) => ({
|
|
11916
|
+
image: normalizeImageData(frame.image),
|
|
11917
|
+
frameType: frame.frameType
|
|
11918
|
+
}));
|
|
11919
|
+
const normalizedInputReferences = inputReferences == null ? void 0 : inputReferences.map(
|
|
11920
|
+
(reference) => normalizeImageData(reference)
|
|
11921
|
+
);
|
|
11922
|
+
const effectiveInputReferences = normalizedFrameImages != null && normalizedFrameImages.length > 0 ? void 0 : normalizedInputReferences;
|
|
11923
|
+
const warnings = [];
|
|
11924
|
+
if (normalizedFrameImages != null && normalizedFrameImages.length > 0 && normalizedInputReferences != null && normalizedInputReferences.length > 0) {
|
|
11925
|
+
warnings.push({
|
|
11926
|
+
type: "other",
|
|
11927
|
+
message: "inputReferences were ignored because frameImages were provided; frameImages and inputReferences cannot be combined."
|
|
11928
|
+
});
|
|
11929
|
+
}
|
|
11930
|
+
const firstFrameImage = (_a22 = normalizedFrameImages == null ? void 0 : normalizedFrameImages.find(
|
|
11931
|
+
(frame) => frame.frameType === "first_frame"
|
|
11932
|
+
)) == null ? void 0 : _a22.image;
|
|
11933
|
+
if (image != null && firstFrameImage != null) {
|
|
11934
|
+
warnings.push({
|
|
11935
|
+
type: "other",
|
|
11936
|
+
message: "prompt.image was ignored because a first_frame frameImage was provided; the first_frame frameImage takes precedence as the start image."
|
|
11937
|
+
});
|
|
11938
|
+
}
|
|
11939
|
+
const resolvedImage = firstFrameImage != null ? firstFrameImage : image;
|
|
11940
|
+
const maxVideosPerCallWithDefault = (_b = maxVideosPerCall != null ? maxVideosPerCall : await invokeModelMaxVideosPerCall(model)) != null ? _b : 1;
|
|
11914
11941
|
const callCount = Math.ceil(n / maxVideosPerCallWithDefault);
|
|
11915
11942
|
const callVideoCounts = Array.from({ length: callCount }, (_, index) => {
|
|
11916
11943
|
const remaining = n - index * maxVideosPerCallWithDefault;
|
|
@@ -11918,7 +11945,7 @@ async function experimental_generateVideo({
|
|
|
11918
11945
|
});
|
|
11919
11946
|
const results = await Promise.all(
|
|
11920
11947
|
callVideoCounts.map(
|
|
11921
|
-
async (callVideoCount) => retry(
|
|
11948
|
+
async (callVideoCount) => await retry(
|
|
11922
11949
|
() => model.doGenerate({
|
|
11923
11950
|
prompt,
|
|
11924
11951
|
n: callVideoCount,
|
|
@@ -11927,8 +11954,10 @@ async function experimental_generateVideo({
|
|
|
11927
11954
|
duration,
|
|
11928
11955
|
fps,
|
|
11929
11956
|
seed,
|
|
11957
|
+
image: resolvedImage,
|
|
11958
|
+
frameImages: normalizedFrameImages,
|
|
11959
|
+
inputReferences: effectiveInputReferences,
|
|
11930
11960
|
generateAudio,
|
|
11931
|
-
image,
|
|
11932
11961
|
providerOptions: providerOptions != null ? providerOptions : {},
|
|
11933
11962
|
headers: headersWithUserAgent,
|
|
11934
11963
|
abortSignal
|
|
@@ -11937,7 +11966,6 @@ async function experimental_generateVideo({
|
|
|
11937
11966
|
)
|
|
11938
11967
|
);
|
|
11939
11968
|
const videos = [];
|
|
11940
|
-
const warnings = [];
|
|
11941
11969
|
const responses = [];
|
|
11942
11970
|
const providerMetadata = {};
|
|
11943
11971
|
for (const result of results) {
|
|
@@ -12033,56 +12061,49 @@ async function experimental_generateVideo({
|
|
|
12033
12061
|
};
|
|
12034
12062
|
}
|
|
12035
12063
|
function normalizePrompt2(promptArg) {
|
|
12036
|
-
var _a22, _b;
|
|
12037
12064
|
if (typeof promptArg === "string") {
|
|
12038
12065
|
return {
|
|
12039
12066
|
prompt: promptArg,
|
|
12040
12067
|
image: void 0
|
|
12041
12068
|
};
|
|
12042
12069
|
}
|
|
12043
|
-
|
|
12044
|
-
|
|
12045
|
-
|
|
12046
|
-
|
|
12047
|
-
|
|
12048
|
-
|
|
12049
|
-
|
|
12050
|
-
|
|
12051
|
-
|
|
12052
|
-
|
|
12053
|
-
|
|
12054
|
-
|
|
12055
|
-
|
|
12056
|
-
|
|
12057
|
-
|
|
12058
|
-
|
|
12059
|
-
|
|
12060
|
-
const bytes = (0, import_provider_utils35.convertBase64ToUint8Array)(dataContent);
|
|
12061
|
-
const mediaType = (_a22 = detectMediaType({
|
|
12062
|
-
data: bytes,
|
|
12063
|
-
signatures: imageMediaTypeSignatures
|
|
12064
|
-
})) != null ? _a22 : "image/png";
|
|
12065
|
-
image = {
|
|
12066
|
-
type: "file",
|
|
12067
|
-
mediaType,
|
|
12068
|
-
data: bytes
|
|
12069
|
-
};
|
|
12070
|
-
}
|
|
12071
|
-
} else if (dataContent instanceof Uint8Array) {
|
|
12072
|
-
const mediaType = (_b = detectMediaType({
|
|
12073
|
-
data: dataContent,
|
|
12074
|
-
signatures: imageMediaTypeSignatures
|
|
12075
|
-
})) != null ? _b : "image/png";
|
|
12076
|
-
image = {
|
|
12070
|
+
return {
|
|
12071
|
+
prompt: promptArg.text,
|
|
12072
|
+
image: promptArg.image != null ? normalizeImageData(promptArg.image) : void 0
|
|
12073
|
+
};
|
|
12074
|
+
}
|
|
12075
|
+
function normalizeImageData(dataContent) {
|
|
12076
|
+
var _a22, _b;
|
|
12077
|
+
if (typeof dataContent === "string") {
|
|
12078
|
+
if (dataContent.startsWith("http://") || dataContent.startsWith("https://")) {
|
|
12079
|
+
return {
|
|
12080
|
+
type: "url",
|
|
12081
|
+
url: dataContent
|
|
12082
|
+
};
|
|
12083
|
+
}
|
|
12084
|
+
if (dataContent.startsWith("data:")) {
|
|
12085
|
+
const { mediaType, base64Content } = splitDataUrl(dataContent);
|
|
12086
|
+
return {
|
|
12077
12087
|
type: "file",
|
|
12078
|
-
mediaType,
|
|
12079
|
-
data:
|
|
12088
|
+
mediaType: mediaType != null ? mediaType : "image/png",
|
|
12089
|
+
data: (0, import_provider_utils35.convertBase64ToUint8Array)(base64Content != null ? base64Content : "")
|
|
12080
12090
|
};
|
|
12081
12091
|
}
|
|
12092
|
+
const bytes2 = (0, import_provider_utils35.convertBase64ToUint8Array)(dataContent);
|
|
12093
|
+
return {
|
|
12094
|
+
type: "file",
|
|
12095
|
+
mediaType: (_a22 = detectMediaType({
|
|
12096
|
+
data: bytes2,
|
|
12097
|
+
signatures: imageMediaTypeSignatures
|
|
12098
|
+
})) != null ? _a22 : "image/png",
|
|
12099
|
+
data: bytes2
|
|
12100
|
+
};
|
|
12082
12101
|
}
|
|
12102
|
+
const bytes = convertDataContentToUint8Array(dataContent);
|
|
12083
12103
|
return {
|
|
12084
|
-
|
|
12085
|
-
image
|
|
12104
|
+
type: "file",
|
|
12105
|
+
mediaType: (_b = detectMediaType({ data: bytes, signatures: imageMediaTypeSignatures })) != null ? _b : "image/png",
|
|
12106
|
+
data: bytes
|
|
12086
12107
|
};
|
|
12087
12108
|
}
|
|
12088
12109
|
async function invokeModelMaxVideosPerCall(model) {
|