ai 4.1.13 → 4.1.15

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,24 @@
1
1
  # ai
2
2
 
3
+ ## 4.1.15
4
+
5
+ ### Patch Changes
6
+
7
+ - d89c3b9: feat (provider): add image model support to provider specification
8
+ - d89c3b9: feat (core): type ahead for model ids with custom provider
9
+ - 08f54fc: chore (ai/core): move custom provider to stable
10
+ - Updated dependencies [d89c3b9]
11
+ - @ai-sdk/provider@1.0.7
12
+ - @ai-sdk/provider-utils@2.1.6
13
+ - @ai-sdk/ui-utils@1.1.8
14
+ - @ai-sdk/react@1.1.8
15
+
16
+ ## 4.1.14
17
+
18
+ ### Patch Changes
19
+
20
+ - ca89615: fix (ai/core): only append assistant response at the end when there is a final user message
21
+
3
22
  ## 4.1.13
4
23
 
5
24
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -2,7 +2,7 @@ import { IDGenerator } from '@ai-sdk/provider-utils';
2
2
  export { CoreToolCall, CoreToolResult, IDGenerator, ToolCall, ToolResult, createIdGenerator, generateId } from '@ai-sdk/provider-utils';
3
3
  import { DataStreamString, ToolInvocation, Attachment, Schema, DeepPartial, Message, JSONValue as JSONValue$1, AssistantMessage, DataMessage } from '@ai-sdk/ui-utils';
4
4
  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';
5
- import { JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, ImageModelV1, ImageModelV1CallWarning, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, LanguageModelV1CallOptions, AISDKError, LanguageModelV1FunctionToolCall, JSONSchema7, NoSuchModelError } from '@ai-sdk/provider';
5
+ import { JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, ImageModelV1, ImageModelV1CallWarning, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, LanguageModelV1CallOptions, AISDKError, LanguageModelV1FunctionToolCall, JSONSchema7, ProviderV1, NoSuchModelError } from '@ai-sdk/provider';
6
6
  export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LanguageModelV1, LanguageModelV1CallOptions, LanguageModelV1Prompt, LanguageModelV1StreamPart, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
7
7
  import { ServerResponse } from 'node:http';
8
8
  import { AttributeValue, Tracer } from '@opentelemetry/api';
@@ -190,7 +190,7 @@ type LanguageModelResponseMetadata = {
190
190
  };
191
191
 
192
192
  /**
193
- * Provider for language and text embedding models.
193
+ * Provider for language, text embedding, and image models.
194
194
  */
195
195
  type Provider = {
196
196
  /**
@@ -215,6 +215,15 @@ type Provider = {
215
215
  @throws {NoSuchModelError} If no such model exists.
216
216
  */
217
217
  textEmbeddingModel(modelId: string): EmbeddingModel<string>;
218
+ /**
219
+ Returns the image model with the given id.
220
+ The model id is then passed to the provider function to get the model.
221
+
222
+ @param {string} id - The id of the model to return.
223
+
224
+ @returns {ImageModel} The image model associated with the id
225
+ */
226
+ imageModel(modelId: string): ImageModel;
218
227
  };
219
228
 
220
229
  /**
@@ -2491,11 +2500,21 @@ declare const experimental_wrapLanguageModel: ({ model, middleware: { transformP
2491
2500
  *
2492
2501
  * @throws {NoSuchModelError} Throws when a requested model is not found and no fallback provider is available.
2493
2502
  */
2494
- declare function experimental_customProvider({ languageModels, textEmbeddingModels, fallbackProvider, }: {
2495
- languageModels?: Record<string, LanguageModelV1>;
2496
- textEmbeddingModels?: Record<string, EmbeddingModelV1<string>>;
2497
- fallbackProvider?: Provider;
2498
- }): Provider;
2503
+ declare function customProvider<LANGUAGE_MODELS extends Record<string, LanguageModelV1>, EMBEDDING_MODELS extends Record<string, EmbeddingModelV1<string>>, IMAGE_MODELS extends Record<string, ImageModelV1>>({ languageModels, textEmbeddingModels, imageModels, fallbackProvider, }: {
2504
+ languageModels?: LANGUAGE_MODELS;
2505
+ textEmbeddingModels?: EMBEDDING_MODELS;
2506
+ imageModels?: IMAGE_MODELS;
2507
+ fallbackProvider?: ProviderV1;
2508
+ }): Provider & {
2509
+ languageModel(modelId: ExtractModelId<LANGUAGE_MODELS>): LanguageModelV1;
2510
+ textEmbeddingModel(modelId: ExtractModelId<EMBEDDING_MODELS>): EmbeddingModelV1<string>;
2511
+ imageModel(modelId: ExtractModelId<IMAGE_MODELS>): ImageModelV1;
2512
+ };
2513
+ /**
2514
+ * @deprecated Use `customProvider` instead.
2515
+ */
2516
+ declare const experimental_customProvider: typeof customProvider;
2517
+ type ExtractModelId<MODELS extends Record<string, unknown>> = Extract<keyof MODELS, string>;
2499
2518
 
2500
2519
  declare const symbol$b: unique symbol;
2501
2520
  declare class NoSuchProviderError extends NoSuchModelError {
@@ -2515,7 +2534,7 @@ declare class NoSuchProviderError extends NoSuchModelError {
2515
2534
  /**
2516
2535
  * Creates a registry for the given providers.
2517
2536
  */
2518
- declare function experimental_createProviderRegistry(providers: Record<string, Provider>): Provider;
2537
+ declare function experimental_createProviderRegistry(providers: Record<string, ProviderV1>): Provider;
2519
2538
 
2520
2539
  /**
2521
2540
  * Calculates the cosine similarity between two vectors. This is a useful metric for
@@ -2858,4 +2877,4 @@ declare namespace llamaindexAdapter {
2858
2877
  };
2859
2878
  }
2860
2879
 
2861
- export { AssistantContent, AssistantResponse, CallWarning, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolCallUnion, CoreToolChoice, CoreToolMessage, 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, ImageModelResponseMetadata, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LanguageModelV1Middleware, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, RetryError, StepResult, StreamData, StreamObjectResult, StreamTextResult, StreamTextTransform, TelemetrySettings, TextPart, TextStreamPart, Tool, ToolCallPart, ToolCallRepairError, ToolCallRepairFunction, ToolCallUnion, ToolChoice, ToolContent, ToolExecutionError, ToolExecutionOptions, ToolResultPart, ToolResultUnion, ToolSet, UserContent, appendClientMessage, appendResponseMessages, convertToCoreMessages, coreAssistantMessageSchema, coreMessageSchema, coreSystemMessageSchema, coreToolMessageSchema, coreUserMessageSchema, cosineSimilarity, createDataStream, createDataStreamResponse, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, extractReasoningMiddleware, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, smoothStream, streamObject, streamText, tool, wrapLanguageModel };
2880
+ export { AssistantContent, AssistantResponse, CallWarning, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolCallUnion, CoreToolChoice, CoreToolMessage, 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, ImageModelResponseMetadata, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LanguageModelV1Middleware, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, RetryError, StepResult, StreamData, StreamObjectResult, StreamTextResult, StreamTextTransform, TelemetrySettings, TextPart, TextStreamPart, Tool, ToolCallPart, ToolCallRepairError, ToolCallRepairFunction, ToolCallUnion, ToolChoice, ToolContent, ToolExecutionError, ToolExecutionOptions, ToolResultPart, ToolResultUnion, ToolSet, UserContent, appendClientMessage, appendResponseMessages, convertToCoreMessages, coreAssistantMessageSchema, coreMessageSchema, coreSystemMessageSchema, coreToolMessageSchema, coreUserMessageSchema, cosineSimilarity, createDataStream, createDataStreamResponse, customProvider, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, extractReasoningMiddleware, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, smoothStream, streamObject, streamText, tool, wrapLanguageModel };
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import { IDGenerator } from '@ai-sdk/provider-utils';
2
2
  export { CoreToolCall, CoreToolResult, IDGenerator, ToolCall, ToolResult, createIdGenerator, generateId } from '@ai-sdk/provider-utils';
3
3
  import { DataStreamString, ToolInvocation, Attachment, Schema, DeepPartial, Message, JSONValue as JSONValue$1, AssistantMessage, DataMessage } from '@ai-sdk/ui-utils';
4
4
  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';
5
- import { JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, ImageModelV1, ImageModelV1CallWarning, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, LanguageModelV1CallOptions, AISDKError, LanguageModelV1FunctionToolCall, JSONSchema7, NoSuchModelError } from '@ai-sdk/provider';
5
+ import { JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, ImageModelV1, ImageModelV1CallWarning, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, LanguageModelV1CallOptions, AISDKError, LanguageModelV1FunctionToolCall, JSONSchema7, ProviderV1, NoSuchModelError } from '@ai-sdk/provider';
6
6
  export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LanguageModelV1, LanguageModelV1CallOptions, LanguageModelV1Prompt, LanguageModelV1StreamPart, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
7
7
  import { ServerResponse } from 'node:http';
8
8
  import { AttributeValue, Tracer } from '@opentelemetry/api';
@@ -190,7 +190,7 @@ type LanguageModelResponseMetadata = {
190
190
  };
191
191
 
192
192
  /**
193
- * Provider for language and text embedding models.
193
+ * Provider for language, text embedding, and image models.
194
194
  */
195
195
  type Provider = {
196
196
  /**
@@ -215,6 +215,15 @@ type Provider = {
215
215
  @throws {NoSuchModelError} If no such model exists.
216
216
  */
217
217
  textEmbeddingModel(modelId: string): EmbeddingModel<string>;
218
+ /**
219
+ Returns the image model with the given id.
220
+ The model id is then passed to the provider function to get the model.
221
+
222
+ @param {string} id - The id of the model to return.
223
+
224
+ @returns {ImageModel} The image model associated with the id
225
+ */
226
+ imageModel(modelId: string): ImageModel;
218
227
  };
219
228
 
220
229
  /**
@@ -2491,11 +2500,21 @@ declare const experimental_wrapLanguageModel: ({ model, middleware: { transformP
2491
2500
  *
2492
2501
  * @throws {NoSuchModelError} Throws when a requested model is not found and no fallback provider is available.
2493
2502
  */
2494
- declare function experimental_customProvider({ languageModels, textEmbeddingModels, fallbackProvider, }: {
2495
- languageModels?: Record<string, LanguageModelV1>;
2496
- textEmbeddingModels?: Record<string, EmbeddingModelV1<string>>;
2497
- fallbackProvider?: Provider;
2498
- }): Provider;
2503
+ declare function customProvider<LANGUAGE_MODELS extends Record<string, LanguageModelV1>, EMBEDDING_MODELS extends Record<string, EmbeddingModelV1<string>>, IMAGE_MODELS extends Record<string, ImageModelV1>>({ languageModels, textEmbeddingModels, imageModels, fallbackProvider, }: {
2504
+ languageModels?: LANGUAGE_MODELS;
2505
+ textEmbeddingModels?: EMBEDDING_MODELS;
2506
+ imageModels?: IMAGE_MODELS;
2507
+ fallbackProvider?: ProviderV1;
2508
+ }): Provider & {
2509
+ languageModel(modelId: ExtractModelId<LANGUAGE_MODELS>): LanguageModelV1;
2510
+ textEmbeddingModel(modelId: ExtractModelId<EMBEDDING_MODELS>): EmbeddingModelV1<string>;
2511
+ imageModel(modelId: ExtractModelId<IMAGE_MODELS>): ImageModelV1;
2512
+ };
2513
+ /**
2514
+ * @deprecated Use `customProvider` instead.
2515
+ */
2516
+ declare const experimental_customProvider: typeof customProvider;
2517
+ type ExtractModelId<MODELS extends Record<string, unknown>> = Extract<keyof MODELS, string>;
2499
2518
 
2500
2519
  declare const symbol$b: unique symbol;
2501
2520
  declare class NoSuchProviderError extends NoSuchModelError {
@@ -2515,7 +2534,7 @@ declare class NoSuchProviderError extends NoSuchModelError {
2515
2534
  /**
2516
2535
  * Creates a registry for the given providers.
2517
2536
  */
2518
- declare function experimental_createProviderRegistry(providers: Record<string, Provider>): Provider;
2537
+ declare function experimental_createProviderRegistry(providers: Record<string, ProviderV1>): Provider;
2519
2538
 
2520
2539
  /**
2521
2540
  * Calculates the cosine similarity between two vectors. This is a useful metric for
@@ -2858,4 +2877,4 @@ declare namespace llamaindexAdapter {
2858
2877
  };
2859
2878
  }
2860
2879
 
2861
- export { AssistantContent, AssistantResponse, CallWarning, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolCallUnion, CoreToolChoice, CoreToolMessage, 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, ImageModelResponseMetadata, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LanguageModelV1Middleware, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, RetryError, StepResult, StreamData, StreamObjectResult, StreamTextResult, StreamTextTransform, TelemetrySettings, TextPart, TextStreamPart, Tool, ToolCallPart, ToolCallRepairError, ToolCallRepairFunction, ToolCallUnion, ToolChoice, ToolContent, ToolExecutionError, ToolExecutionOptions, ToolResultPart, ToolResultUnion, ToolSet, UserContent, appendClientMessage, appendResponseMessages, convertToCoreMessages, coreAssistantMessageSchema, coreMessageSchema, coreSystemMessageSchema, coreToolMessageSchema, coreUserMessageSchema, cosineSimilarity, createDataStream, createDataStreamResponse, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, extractReasoningMiddleware, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, smoothStream, streamObject, streamText, tool, wrapLanguageModel };
2880
+ export { AssistantContent, AssistantResponse, CallWarning, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolCallUnion, CoreToolChoice, CoreToolMessage, 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, ImageModelResponseMetadata, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LanguageModelV1Middleware, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, RetryError, StepResult, StreamData, StreamObjectResult, StreamTextResult, StreamTextTransform, TelemetrySettings, TextPart, TextStreamPart, Tool, ToolCallPart, ToolCallRepairError, ToolCallRepairFunction, ToolCallUnion, ToolChoice, ToolContent, ToolExecutionError, ToolExecutionOptions, ToolResultPart, ToolResultUnion, ToolSet, UserContent, appendClientMessage, appendResponseMessages, convertToCoreMessages, coreAssistantMessageSchema, coreMessageSchema, coreSystemMessageSchema, coreToolMessageSchema, coreUserMessageSchema, cosineSimilarity, createDataStream, createDataStreamResponse, customProvider, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, extractReasoningMiddleware, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, smoothStream, streamObject, streamText, tool, wrapLanguageModel };
package/dist/index.js CHANGED
@@ -62,6 +62,7 @@ __export(streams_exports, {
62
62
  createDataStream: () => createDataStream,
63
63
  createDataStreamResponse: () => createDataStreamResponse,
64
64
  createIdGenerator: () => import_provider_utils14.createIdGenerator,
65
+ customProvider: () => customProvider,
65
66
  embed: () => embed,
66
67
  embedMany: () => embedMany,
67
68
  experimental_createProviderRegistry: () => experimental_createProviderRegistry,
@@ -1596,7 +1597,9 @@ function convertToCoreMessages(messages, options) {
1596
1597
  var _a15;
1597
1598
  const tools = (_a15 = options == null ? void 0 : options.tools) != null ? _a15 : {};
1598
1599
  const coreMessages = [];
1599
- for (const message of messages) {
1600
+ for (let i = 0; i < messages.length; i++) {
1601
+ const message = messages[i];
1602
+ const isLastMessage = i === messages.length - 1;
1600
1603
  const { role, content, toolInvocations, experimental_attachments } = message;
1601
1604
  switch (role) {
1602
1605
  case "system": {
@@ -1625,11 +1628,11 @@ function convertToCoreMessages(messages, options) {
1625
1628
  var _a16;
1626
1629
  return Math.max(max, (_a16 = toolInvocation.step) != null ? _a16 : 0);
1627
1630
  }, 0);
1628
- for (let i = 0; i <= maxStep; i++) {
1631
+ for (let i2 = 0; i2 <= maxStep; i2++) {
1629
1632
  const stepInvocations = toolInvocations.filter(
1630
1633
  (toolInvocation) => {
1631
1634
  var _a16;
1632
- return ((_a16 = toolInvocation.step) != null ? _a16 : 0) === i;
1635
+ return ((_a16 = toolInvocation.step) != null ? _a16 : 0) === i2;
1633
1636
  }
1634
1637
  );
1635
1638
  if (stepInvocations.length === 0) {
@@ -1638,6 +1641,7 @@ function convertToCoreMessages(messages, options) {
1638
1641
  coreMessages.push({
1639
1642
  role: "assistant",
1640
1643
  content: [
1644
+ ...isLastMessage && content && i2 === 0 ? [{ type: "text", text: content }] : [],
1641
1645
  ...stepInvocations.map(
1642
1646
  ({ toolCallId, toolName, args }) => ({
1643
1647
  type: "tool-call",
@@ -1674,7 +1678,7 @@ function convertToCoreMessages(messages, options) {
1674
1678
  })
1675
1679
  });
1676
1680
  }
1677
- if (content) {
1681
+ if (content && !isLastMessage) {
1678
1682
  coreMessages.push({ role: "assistant", content });
1679
1683
  }
1680
1684
  break;
@@ -5867,9 +5871,10 @@ function appendResponseMessages({
5867
5871
 
5868
5872
  // core/registry/custom-provider.ts
5869
5873
  var import_provider19 = require("@ai-sdk/provider");
5870
- function experimental_customProvider({
5874
+ function customProvider({
5871
5875
  languageModels,
5872
5876
  textEmbeddingModels,
5877
+ imageModels,
5873
5878
  fallbackProvider
5874
5879
  }) {
5875
5880
  return {
@@ -5890,9 +5895,19 @@ function experimental_customProvider({
5890
5895
  return fallbackProvider.textEmbeddingModel(modelId);
5891
5896
  }
5892
5897
  throw new import_provider19.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
5898
+ },
5899
+ imageModel(modelId) {
5900
+ if (imageModels != null && modelId in imageModels) {
5901
+ return imageModels[modelId];
5902
+ }
5903
+ if (fallbackProvider == null ? void 0 : fallbackProvider.imageModel) {
5904
+ return fallbackProvider.imageModel(modelId);
5905
+ }
5906
+ throw new import_provider19.NoSuchModelError({ modelId, modelType: "imageModel" });
5893
5907
  }
5894
5908
  };
5895
5909
  }
5910
+ var experimental_customProvider = customProvider;
5896
5911
 
5897
5912
  // core/registry/no-such-provider-error.ts
5898
5913
  var import_provider20 = require("@ai-sdk/provider");
@@ -5932,7 +5947,10 @@ var DefaultProviderRegistry = class {
5932
5947
  constructor() {
5933
5948
  this.providers = {};
5934
5949
  }
5935
- registerProvider({ id, provider }) {
5950
+ registerProvider({
5951
+ id,
5952
+ provider
5953
+ }) {
5936
5954
  this.providers[id] = provider;
5937
5955
  }
5938
5956
  getProvider(id) {
@@ -5980,6 +5998,16 @@ var DefaultProviderRegistry = class {
5980
5998
  }
5981
5999
  return model;
5982
6000
  }
6001
+ imageModel(id) {
6002
+ var _a15;
6003
+ const [providerId, modelId] = this.splitId(id, "imageModel");
6004
+ const provider = this.getProvider(providerId);
6005
+ const model = (_a15 = provider.imageModel) == null ? void 0 : _a15.call(provider, modelId);
6006
+ if (model == null) {
6007
+ throw new import_provider21.NoSuchModelError({ modelId: id, modelType: "imageModel" });
6008
+ }
6009
+ return model;
6010
+ }
5983
6011
  /**
5984
6012
  * @deprecated Use `textEmbeddingModel` instead.
5985
6013
  */
@@ -6426,6 +6454,7 @@ var StreamData = class {
6426
6454
  createDataStream,
6427
6455
  createDataStreamResponse,
6428
6456
  createIdGenerator,
6457
+ customProvider,
6429
6458
  embed,
6430
6459
  embedMany,
6431
6460
  experimental_createProviderRegistry,