ai 4.0.27 → 4.0.29

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,26 @@
1
1
  # ai
2
2
 
3
+ ## 4.0.29
4
+
5
+ ### Patch Changes
6
+
7
+ - a92f5f6: feat (ai/core): generate many images with parallel model calls
8
+
9
+ ## 4.0.28
10
+
11
+ ### Patch Changes
12
+
13
+ - 19a2ce7: feat (ai/core): add aspectRatio and seed options to generateImage
14
+ - 6337688: feat: change image generation errors to warnings
15
+ - 8b422ea: feat (ai/core): add caching to generated images
16
+ - Updated dependencies [19a2ce7]
17
+ - Updated dependencies [19a2ce7]
18
+ - Updated dependencies [6337688]
19
+ - @ai-sdk/provider@1.0.4
20
+ - @ai-sdk/provider-utils@2.0.6
21
+ - @ai-sdk/ui-utils@1.0.7
22
+ - @ai-sdk/react@1.0.8
23
+
3
24
  ## 4.0.27
4
25
 
5
26
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { DataStreamString, ToolInvocation, Attachment, Schema, DeepPartial, JSONValue as JSONValue$1, AssistantMessage, DataMessage } from '@ai-sdk/ui-utils';
2
2
  export { AssistantMessage, AssistantStatus, Attachment, ChatRequest, ChatRequestOptions, CreateMessage, DataMessage, DataStreamPart, DeepPartial, IdGenerator, JSONValue, Message, RequestOptions, Schema, ToolInvocation, UseAssistantOptions, formatAssistantStreamPart, formatDataStreamPart, jsonSchema, parseAssistantStreamPart, parseDataStreamPart, processDataStream, processTextStream } from '@ai-sdk/ui-utils';
3
3
  export { ToolCall as CoreToolCall, ToolResult as CoreToolResult, generateId } from '@ai-sdk/provider-utils';
4
- import { JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, ImageModelV1, LanguageModelV1CallOptions, AISDKError, LanguageModelV1FunctionToolCall, JSONSchema7, NoSuchModelError } from '@ai-sdk/provider';
4
+ import { JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, ImageModelV1, ImageModelV1CallWarning, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, LanguageModelV1CallOptions, AISDKError, LanguageModelV1FunctionToolCall, JSONSchema7, NoSuchModelError } from '@ai-sdk/provider';
5
5
  export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LanguageModelV1, LanguageModelV1CallOptions, LanguageModelV1Prompt, LanguageModelV1StreamPart, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
6
6
  import { ServerResponse } from 'node:http';
7
7
  import { AttributeValue, Tracer } from '@opentelemetry/api';
@@ -89,6 +89,16 @@ Embedding.
89
89
  */
90
90
  type Embedding = EmbeddingModelV1Embedding;
91
91
 
92
+ /**
93
+ Image model that is used by the AI SDK Core functions.
94
+ */
95
+ type ImageModel = ImageModelV1;
96
+ /**
97
+ Warning from the model provider for this call. The call will proceed, but e.g.
98
+ some settings might not be supported, which can lead to suboptimal results.
99
+ */
100
+ type ImageGenerationWarning = ImageModelV1CallWarning;
101
+
92
102
  /**
93
103
  Language model that is used by the AI SDK Core functions.
94
104
  */
@@ -365,6 +375,10 @@ interface GenerateImageResult {
365
375
  The images that were generated.
366
376
  */
367
377
  readonly images: Array<GeneratedImage>;
378
+ /**
379
+ Warnings for the call, e.g. unsupported settings.
380
+ */
381
+ readonly warnings: Array<ImageGenerationWarning>;
368
382
  }
369
383
  interface GeneratedImage {
370
384
  /**
@@ -384,6 +398,8 @@ Generates images using an image model.
384
398
  @param prompt - The prompt that should be used to generate the image.
385
399
  @param n - Number of images to generate. Default: 1.
386
400
  @param size - Size of the images to generate. Must have the format `{width}x{height}`.
401
+ @param aspectRatio - Aspect ratio of the images to generate. Must have the format `{width}:{height}`.
402
+ @param seed - Seed for the image generation.
387
403
  @param providerOptions - Additional provider-specific options that are passed through to the provider
388
404
  as body parameters.
389
405
  @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
@@ -392,7 +408,7 @@ as body parameters.
392
408
 
393
409
  @returns A result object that contains the generated images.
394
410
  */
395
- declare function generateImage({ model, prompt, n, size, providerOptions, maxRetries: maxRetriesArg, abortSignal, headers, }: {
411
+ declare function generateImage({ model, prompt, n, size, aspectRatio, seed, providerOptions, maxRetries: maxRetriesArg, abortSignal, headers, }: {
396
412
  /**
397
413
  The image model to use.
398
414
  */
@@ -406,10 +422,18 @@ declare function generateImage({ model, prompt, n, size, providerOptions, maxRet
406
422
  */
407
423
  n?: number;
408
424
  /**
409
- Size of the images to generate. Must have the format `{width}x{height}`.
425
+ Size of the images to generate. Must have the format `{width}x{height}`. If not provided, the default size will be used.
410
426
  */
411
427
  size?: `${number}x${number}`;
412
428
  /**
429
+ Aspect ratio of the images to generate. Must have the format `{width}:{height}`. If not provided, the default aspect ratio will be used.
430
+ */
431
+ aspectRatio?: `${number}:${number}`;
432
+ /**
433
+ Seed for the image generation. If not provided, the default seed will be used.
434
+ */
435
+ seed?: number;
436
+ /**
413
437
  Additional provider-specific options that are passed through to the provider
414
438
  as body parameters.
415
439
 
@@ -2587,4 +2611,4 @@ declare namespace llamaindexAdapter {
2587
2611
  };
2588
2612
  }
2589
2613
 
2590
- export { AssistantContent, AssistantResponse, CallWarning, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, ToolCallUnion as CoreToolCallUnion, CoreToolChoice, CoreToolMessage, ToolResultUnion as CoreToolResultUnion, CoreUserMessage, DataContent, DataStreamWriter, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, GenerateImageResult as Experimental_GenerateImageResult, GeneratedImage as Experimental_GeneratedImage, Experimental_LanguageModelV1Middleware, FilePart, FinishReason, GenerateObjectResult, GenerateTextResult, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MessageConversionError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, RetryError, StepResult, StreamData, StreamObjectResult, StreamTextResult, TextPart, TextStreamPart, ToolCallPart, ToolCallRepairError, ToolCallRepairFunction, ToolContent, ToolExecutionError, ToolExecutionOptions, ToolResultPart, UserContent, convertToCoreMessages, cosineSimilarity, createDataStream, createDataStreamResponse, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, smoothStream, streamObject, streamText, tool };
2614
+ export { AssistantContent, AssistantResponse, CallWarning, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, ToolCallUnion as CoreToolCallUnion, CoreToolChoice, CoreToolMessage, ToolResultUnion as CoreToolResultUnion, CoreUserMessage, DataContent, DataStreamWriter, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, GenerateImageResult as Experimental_GenerateImageResult, GeneratedImage as Experimental_GeneratedImage, Experimental_LanguageModelV1Middleware, FilePart, FinishReason, GenerateObjectResult, GenerateTextResult, ImageModel, ImageGenerationWarning as ImageModelCallWarning, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MessageConversionError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, RetryError, StepResult, StreamData, StreamObjectResult, StreamTextResult, TextPart, TextStreamPart, ToolCallPart, ToolCallRepairError, ToolCallRepairFunction, ToolContent, ToolExecutionError, ToolExecutionOptions, ToolResultPart, UserContent, convertToCoreMessages, cosineSimilarity, createDataStream, createDataStreamResponse, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, smoothStream, streamObject, streamText, tool };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { DataStreamString, ToolInvocation, Attachment, Schema, DeepPartial, JSONValue as JSONValue$1, AssistantMessage, DataMessage } from '@ai-sdk/ui-utils';
2
2
  export { AssistantMessage, AssistantStatus, Attachment, ChatRequest, ChatRequestOptions, CreateMessage, DataMessage, DataStreamPart, DeepPartial, IdGenerator, JSONValue, Message, RequestOptions, Schema, ToolInvocation, UseAssistantOptions, formatAssistantStreamPart, formatDataStreamPart, jsonSchema, parseAssistantStreamPart, parseDataStreamPart, processDataStream, processTextStream } from '@ai-sdk/ui-utils';
3
3
  export { ToolCall as CoreToolCall, ToolResult as CoreToolResult, generateId } from '@ai-sdk/provider-utils';
4
- import { JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, ImageModelV1, LanguageModelV1CallOptions, AISDKError, LanguageModelV1FunctionToolCall, JSONSchema7, NoSuchModelError } from '@ai-sdk/provider';
4
+ import { JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, ImageModelV1, ImageModelV1CallWarning, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, LanguageModelV1CallOptions, AISDKError, LanguageModelV1FunctionToolCall, JSONSchema7, NoSuchModelError } from '@ai-sdk/provider';
5
5
  export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LanguageModelV1, LanguageModelV1CallOptions, LanguageModelV1Prompt, LanguageModelV1StreamPart, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
6
6
  import { ServerResponse } from 'node:http';
7
7
  import { AttributeValue, Tracer } from '@opentelemetry/api';
@@ -89,6 +89,16 @@ Embedding.
89
89
  */
90
90
  type Embedding = EmbeddingModelV1Embedding;
91
91
 
92
+ /**
93
+ Image model that is used by the AI SDK Core functions.
94
+ */
95
+ type ImageModel = ImageModelV1;
96
+ /**
97
+ Warning from the model provider for this call. The call will proceed, but e.g.
98
+ some settings might not be supported, which can lead to suboptimal results.
99
+ */
100
+ type ImageGenerationWarning = ImageModelV1CallWarning;
101
+
92
102
  /**
93
103
  Language model that is used by the AI SDK Core functions.
94
104
  */
@@ -365,6 +375,10 @@ interface GenerateImageResult {
365
375
  The images that were generated.
366
376
  */
367
377
  readonly images: Array<GeneratedImage>;
378
+ /**
379
+ Warnings for the call, e.g. unsupported settings.
380
+ */
381
+ readonly warnings: Array<ImageGenerationWarning>;
368
382
  }
369
383
  interface GeneratedImage {
370
384
  /**
@@ -384,6 +398,8 @@ Generates images using an image model.
384
398
  @param prompt - The prompt that should be used to generate the image.
385
399
  @param n - Number of images to generate. Default: 1.
386
400
  @param size - Size of the images to generate. Must have the format `{width}x{height}`.
401
+ @param aspectRatio - Aspect ratio of the images to generate. Must have the format `{width}:{height}`.
402
+ @param seed - Seed for the image generation.
387
403
  @param providerOptions - Additional provider-specific options that are passed through to the provider
388
404
  as body parameters.
389
405
  @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
@@ -392,7 +408,7 @@ as body parameters.
392
408
 
393
409
  @returns A result object that contains the generated images.
394
410
  */
395
- declare function generateImage({ model, prompt, n, size, providerOptions, maxRetries: maxRetriesArg, abortSignal, headers, }: {
411
+ declare function generateImage({ model, prompt, n, size, aspectRatio, seed, providerOptions, maxRetries: maxRetriesArg, abortSignal, headers, }: {
396
412
  /**
397
413
  The image model to use.
398
414
  */
@@ -406,10 +422,18 @@ declare function generateImage({ model, prompt, n, size, providerOptions, maxRet
406
422
  */
407
423
  n?: number;
408
424
  /**
409
- Size of the images to generate. Must have the format `{width}x{height}`.
425
+ Size of the images to generate. Must have the format `{width}x{height}`. If not provided, the default size will be used.
410
426
  */
411
427
  size?: `${number}x${number}`;
412
428
  /**
429
+ Aspect ratio of the images to generate. Must have the format `{width}:{height}`. If not provided, the default aspect ratio will be used.
430
+ */
431
+ aspectRatio?: `${number}:${number}`;
432
+ /**
433
+ Seed for the image generation. If not provided, the default seed will be used.
434
+ */
435
+ seed?: number;
436
+ /**
413
437
  Additional provider-specific options that are passed through to the provider
414
438
  as body parameters.
415
439
 
@@ -2587,4 +2611,4 @@ declare namespace llamaindexAdapter {
2587
2611
  };
2588
2612
  }
2589
2613
 
2590
- export { AssistantContent, AssistantResponse, CallWarning, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, ToolCallUnion as CoreToolCallUnion, CoreToolChoice, CoreToolMessage, ToolResultUnion as CoreToolResultUnion, CoreUserMessage, DataContent, DataStreamWriter, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, GenerateImageResult as Experimental_GenerateImageResult, GeneratedImage as Experimental_GeneratedImage, Experimental_LanguageModelV1Middleware, FilePart, FinishReason, GenerateObjectResult, GenerateTextResult, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MessageConversionError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, RetryError, StepResult, StreamData, StreamObjectResult, StreamTextResult, TextPart, TextStreamPart, ToolCallPart, ToolCallRepairError, ToolCallRepairFunction, ToolContent, ToolExecutionError, ToolExecutionOptions, ToolResultPart, UserContent, convertToCoreMessages, cosineSimilarity, createDataStream, createDataStreamResponse, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, smoothStream, streamObject, streamText, tool };
2614
+ export { AssistantContent, AssistantResponse, CallWarning, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, ToolCallUnion as CoreToolCallUnion, CoreToolChoice, CoreToolMessage, ToolResultUnion as CoreToolResultUnion, CoreUserMessage, DataContent, DataStreamWriter, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, GenerateImageResult as Experimental_GenerateImageResult, GeneratedImage as Experimental_GeneratedImage, Experimental_LanguageModelV1Middleware, FilePart, FinishReason, GenerateObjectResult, GenerateTextResult, ImageModel, ImageGenerationWarning as ImageModelCallWarning, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MessageConversionError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, RetryError, StepResult, StreamData, StreamObjectResult, StreamTextResult, TextPart, TextStreamPart, ToolCallPart, ToolCallRepairError, ToolCallRepairFunction, ToolContent, ToolExecutionError, ToolExecutionOptions, ToolResultPart, UserContent, convertToCoreMessages, cosineSimilarity, createDataStream, createDataStreamResponse, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, smoothStream, streamObject, streamText, tool };
package/dist/index.js CHANGED
@@ -872,39 +872,82 @@ var import_provider_utils2 = require("@ai-sdk/provider-utils");
872
872
  async function generateImage({
873
873
  model,
874
874
  prompt,
875
- n,
875
+ n = 1,
876
876
  size,
877
+ aspectRatio,
878
+ seed,
877
879
  providerOptions,
878
880
  maxRetries: maxRetriesArg,
879
881
  abortSignal,
880
882
  headers
881
883
  }) {
884
+ var _a14;
882
885
  const { retry } = prepareRetries({ maxRetries: maxRetriesArg });
883
- const { images } = await retry(
884
- () => model.doGenerate({
885
- prompt,
886
- n: n != null ? n : 1,
887
- abortSignal,
888
- headers,
889
- size,
890
- providerOptions: providerOptions != null ? providerOptions : {}
891
- })
886
+ const maxImagesPerCall = (_a14 = model.maxImagesPerCall) != null ? _a14 : 1;
887
+ const callCount = Math.ceil(n / maxImagesPerCall);
888
+ const callImageCounts = Array.from({ length: callCount }, (_, i) => {
889
+ if (i < callCount - 1) {
890
+ return maxImagesPerCall;
891
+ }
892
+ const remainder = n % maxImagesPerCall;
893
+ return remainder === 0 ? maxImagesPerCall : remainder;
894
+ });
895
+ const results = await Promise.all(
896
+ callImageCounts.map(
897
+ async (callImageCount) => retry(
898
+ () => model.doGenerate({
899
+ prompt,
900
+ n: callImageCount,
901
+ abortSignal,
902
+ headers,
903
+ size,
904
+ aspectRatio,
905
+ seed,
906
+ providerOptions: providerOptions != null ? providerOptions : {}
907
+ })
908
+ )
909
+ )
892
910
  );
893
- return new DefaultGenerateImageResult({ base64Images: images });
911
+ const images = [];
912
+ const warnings = [];
913
+ for (const result of results) {
914
+ images.push(
915
+ ...result.images.map((image) => new DefaultGeneratedImage({ image }))
916
+ );
917
+ warnings.push(...result.warnings);
918
+ }
919
+ return new DefaultGenerateImageResult({ images, warnings });
894
920
  }
895
921
  var DefaultGenerateImageResult = class {
896
922
  constructor(options) {
897
- this.images = options.base64Images.map((base64) => ({
898
- base64,
899
- get uint8Array() {
900
- return (0, import_provider_utils2.convertBase64ToUint8Array)(this.base64);
901
- }
902
- }));
923
+ this.images = options.images;
924
+ this.warnings = options.warnings;
903
925
  }
904
926
  get image() {
905
927
  return this.images[0];
906
928
  }
907
929
  };
930
+ var DefaultGeneratedImage = class {
931
+ constructor({ image }) {
932
+ const isUint8Array = image instanceof Uint8Array;
933
+ this.base64Data = isUint8Array ? void 0 : image;
934
+ this.uint8ArrayData = isUint8Array ? image : void 0;
935
+ }
936
+ // lazy conversion with caching to avoid unnecessary conversion overhead:
937
+ get base64() {
938
+ if (this.base64Data == null) {
939
+ this.base64Data = (0, import_provider_utils2.convertUint8ArrayToBase64)(this.uint8ArrayData);
940
+ }
941
+ return this.base64Data;
942
+ }
943
+ // lazy conversion with caching to avoid unnecessary conversion overhead:
944
+ get uint8Array() {
945
+ if (this.uint8ArrayData == null) {
946
+ this.uint8ArrayData = (0, import_provider_utils2.convertBase64ToUint8Array)(this.base64Data);
947
+ }
948
+ return this.uint8ArrayData;
949
+ }
950
+ };
908
951
 
909
952
  // core/generate-object/generate-object.ts
910
953
  var import_provider_utils6 = require("@ai-sdk/provider-utils");