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 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.216" : "0.0.0-test";
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 maxVideosPerCallWithDefault = (_a22 = maxVideosPerCall != null ? maxVideosPerCall : await invokeModelMaxVideosPerCall(model)) != null ? _a22 : 1;
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
- let image;
12044
- if (promptArg.image != null) {
12045
- const dataContent = promptArg.image;
12046
- if (typeof dataContent === "string") {
12047
- if (dataContent.startsWith("http://") || dataContent.startsWith("https://")) {
12048
- image = {
12049
- type: "url",
12050
- url: dataContent
12051
- };
12052
- } else if (dataContent.startsWith("data:")) {
12053
- const { mediaType, base64Content } = splitDataUrl(dataContent);
12054
- image = {
12055
- type: "file",
12056
- mediaType: mediaType != null ? mediaType : "image/png",
12057
- data: (0, import_provider_utils35.convertBase64ToUint8Array)(base64Content != null ? base64Content : "")
12058
- };
12059
- } else {
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: dataContent
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
- prompt: promptArg.text,
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) {