ai 5.0.0-canary.0 → 5.0.0-canary.2

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/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@ 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, Message, Schema, DeepPartial, JSONValue as JSONValue$1 } from '@ai-sdk/ui-utils';
4
4
  export { Attachment, ChatRequest, ChatRequestOptions, CreateMessage, DataStreamPart, DeepPartial, IdGenerator, JSONValue, Message, RequestOptions, Schema, ToolInvocation, UIMessage, formatDataStreamPart, jsonSchema, parseDataStreamPart, processDataStream, processTextStream, zodSchema } from '@ai-sdk/ui-utils';
5
- import { LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1Source, JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, ImageModelV1, ImageModelV1CallWarning, LanguageModelV1ProviderMetadata, LanguageModelV1CallOptions, AISDKError, LanguageModelV1FunctionToolCall, JSONSchema7, JSONParseError, TypeValidationError, ProviderV1, NoSuchModelError } from '@ai-sdk/provider';
6
- export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LanguageModelV1, LanguageModelV1CallOptions, LanguageModelV1Prompt, LanguageModelV1StreamPart, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
5
+ import { LanguageModelV2, LanguageModelV2FinishReason, LanguageModelV2LogProbs, LanguageModelV2CallWarning, LanguageModelV2Source, JSONValue, EmbeddingModelV1, EmbeddingModelV1Embedding, ImageModelV1, ImageModelV1CallWarning, LanguageModelV2ProviderMetadata, LanguageModelV2CallOptions, AISDKError, LanguageModelV2FunctionToolCall, JSONSchema7, JSONParseError, TypeValidationError, LanguageModelV2Middleware, ProviderV2, NoSuchModelError } from '@ai-sdk/provider';
6
+ export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LanguageModelV2, LanguageModelV2CallOptions, LanguageModelV2Prompt, LanguageModelV2StreamPart, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
7
7
  import { ServerResponse } from 'node:http';
8
8
  import { AttributeValue, Tracer } from '@opentelemetry/api';
9
9
  import { z } from 'zod';
@@ -12,7 +12,7 @@ import { ServerResponse as ServerResponse$1 } from 'http';
12
12
  /**
13
13
  Language model that is used by the AI SDK Core functions.
14
14
  */
15
- type LanguageModel = LanguageModelV1;
15
+ type LanguageModel = LanguageModelV2;
16
16
  /**
17
17
  Reason why a language model finished generating a response.
18
18
 
@@ -24,22 +24,22 @@ Can be one of the following:
24
24
  - `error`: model stopped because of an error
25
25
  - `other`: model stopped for other reasons
26
26
  */
27
- type FinishReason = LanguageModelV1FinishReason;
27
+ type FinishReason = LanguageModelV2FinishReason;
28
28
  /**
29
29
  Log probabilities for each token and its top log probabilities.
30
30
 
31
31
  @deprecated Will become a provider extension in the future.
32
32
  */
33
- type LogProbs = LanguageModelV1LogProbs;
33
+ type LogProbs = LanguageModelV2LogProbs;
34
34
  /**
35
35
  Warning from the model provider for this call. The call will proceed, but e.g.
36
36
  some settings might not be supported, which can lead to suboptimal results.
37
37
  */
38
- type CallWarning = LanguageModelV1CallWarning;
38
+ type CallWarning = LanguageModelV2CallWarning;
39
39
  /**
40
40
  A source that has been used as input to generate the response.
41
41
  */
42
- type Source = LanguageModelV1Source;
42
+ type Source = LanguageModelV2Source;
43
43
  /**
44
44
  Tool choice for the generation. It supports the following settings:
45
45
 
@@ -240,14 +240,14 @@ Additional provider-specific metadata that is returned from the provider.
240
240
  This is needed to enable provider-specific functionality that can be
241
241
  fully encapsulated in the provider.
242
242
  */
243
- type ProviderMetadata = LanguageModelV1ProviderMetadata;
243
+ type ProviderMetadata = LanguageModelV2ProviderMetadata;
244
244
  /**
245
245
  Additional provider-specific options.
246
246
 
247
247
  They are passed through to the provider from the AI SDK and enable
248
248
  provider-specific functionality that can be fully encapsulated in the provider.
249
249
  */
250
- type ProviderOptions = LanguageModelV1ProviderMetadata;
250
+ type ProviderOptions = LanguageModelV2ProviderMetadata;
251
251
 
252
252
  /**
253
253
  Represents the number of tokens used in a prompt and completion.
@@ -2243,7 +2243,7 @@ interface Output<OUTPUT, PARTIAL> {
2243
2243
  }): string | undefined;
2244
2244
  responseFormat: (options: {
2245
2245
  model: LanguageModel;
2246
- }) => LanguageModelV1CallOptions['responseFormat'];
2246
+ }) => LanguageModelV2CallOptions['responseFormat'];
2247
2247
  parsePartial(options: {
2248
2248
  text: string;
2249
2249
  }): {
@@ -2254,6 +2254,7 @@ interface Output<OUTPUT, PARTIAL> {
2254
2254
  }, context: {
2255
2255
  response: LanguageModelResponseMetadata;
2256
2256
  usage: LanguageModelUsage;
2257
+ finishReason: FinishReason;
2257
2258
  }): OUTPUT;
2258
2259
  }
2259
2260
  declare const text: () => Output<string, string>;
@@ -2351,13 +2352,13 @@ declare function convertToCoreMessages<TOOLS extends ToolSet = never>(messages:
2351
2352
  type ToolCallRepairFunction<TOOLS extends ToolSet> = (options: {
2352
2353
  system: string | undefined;
2353
2354
  messages: CoreMessage[];
2354
- toolCall: LanguageModelV1FunctionToolCall;
2355
+ toolCall: LanguageModelV2FunctionToolCall;
2355
2356
  tools: TOOLS;
2356
2357
  parameterSchema: (options: {
2357
2358
  toolName: string;
2358
2359
  }) => JSONSchema7;
2359
2360
  error: NoSuchToolError | InvalidToolArgumentsError;
2360
- }) => Promise<LanguageModelV1FunctionToolCall | null>;
2361
+ }) => Promise<LanguageModelV2FunctionToolCall | null>;
2361
2362
 
2362
2363
  /**
2363
2364
  Callback that is set using the `onStepFinish` option.
@@ -2538,6 +2539,9 @@ type DataStreamOptions = {
2538
2539
  */
2539
2540
  experimental_sendStart?: boolean;
2540
2541
  };
2542
+ type ConsumeStreamOptions = {
2543
+ onError?: (error: unknown) => void;
2544
+ };
2541
2545
  /**
2542
2546
  A result object for accessing different stream types and additional information.
2543
2547
  */
@@ -2658,8 +2662,10 @@ interface StreamTextResult<TOOLS extends ToolSet, PARTIAL_OUTPUT> {
2658
2662
  This is useful to force the stream to finish.
2659
2663
  It effectively removes the backpressure and allows the stream to finish,
2660
2664
  triggering the `onFinish` callback and the promise resolution.
2665
+
2666
+ If an error occurs, it is passed to the optional `onError` callback.
2661
2667
  */
2662
- consumeStream(): Promise<void>;
2668
+ consumeStream(options?: ConsumeStreamOptions): Promise<void>;
2663
2669
  /**
2664
2670
  Converts the result to a data stream.
2665
2671
 
@@ -2805,6 +2811,14 @@ type TextStreamPart<TOOLS extends ToolSet> = {
2805
2811
  error: unknown;
2806
2812
  };
2807
2813
 
2814
+ /**
2815
+ * Detects the first chunk in a buffer.
2816
+ *
2817
+ * @param buffer - The buffer to detect the first chunk in.
2818
+ *
2819
+ * @returns The first detected chunk, or `undefined` if no chunk was detected.
2820
+ */
2821
+ type ChunkDetector = (buffer: string) => string | undefined | null;
2808
2822
  /**
2809
2823
  * Smooths text streaming output.
2810
2824
  *
@@ -2815,7 +2829,7 @@ type TextStreamPart<TOOLS extends ToolSet> = {
2815
2829
  */
2816
2830
  declare function smoothStream<TOOLS extends ToolSet>({ delayInMs, chunking, _internal: { delay }, }?: {
2817
2831
  delayInMs?: number | null;
2818
- chunking?: 'word' | 'line' | RegExp;
2832
+ chunking?: 'word' | 'line' | RegExp | ChunkDetector;
2819
2833
  /**
2820
2834
  * Internal. For test use only. May change without notice.
2821
2835
  */
@@ -3778,74 +3792,14 @@ Callback that is called when the LLM response and the final object validation ar
3778
3792
  };
3779
3793
  }): StreamObjectResult<JSONValue, JSONValue, never>;
3780
3794
 
3781
- /**
3782
- * Experimental middleware for LanguageModelV1.
3783
- * This type defines the structure for middleware that can be used to modify
3784
- * the behavior of LanguageModelV1 operations.
3785
- */
3786
- type LanguageModelV1Middleware = {
3787
- /**
3788
- * Middleware specification version. Use `v1` for the current version.
3789
- */
3790
- middlewareVersion?: 'v1' | undefined;
3791
- /**
3792
- * Transforms the parameters before they are passed to the language model.
3793
- * @param options - Object containing the type of operation and the parameters.
3794
- * @param options.type - The type of operation ('generate' or 'stream').
3795
- * @param options.params - The original parameters for the language model call.
3796
- * @returns A promise that resolves to the transformed parameters.
3797
- */
3798
- transformParams?: (options: {
3799
- type: 'generate' | 'stream';
3800
- params: LanguageModelV1CallOptions;
3801
- }) => PromiseLike<LanguageModelV1CallOptions>;
3802
- /**
3803
- * Wraps the generate operation of the language model.
3804
- * @param options - Object containing the generate function, parameters, and model.
3805
- * @param options.doGenerate - The original generate function.
3806
- * @param options.doStream - The original stream function.
3807
- * @param options.params - The parameters for the generate call. If the
3808
- * `transformParams` middleware is used, this will be the transformed parameters.
3809
- * @param options.model - The language model instance.
3810
- * @returns A promise that resolves to the result of the generate operation.
3811
- */
3812
- wrapGenerate?: (options: {
3813
- doGenerate: () => ReturnType<LanguageModelV1['doGenerate']>;
3814
- doStream: () => ReturnType<LanguageModelV1['doStream']>;
3815
- params: LanguageModelV1CallOptions;
3816
- model: LanguageModelV1;
3817
- }) => Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
3818
- /**
3819
- * Wraps the stream operation of the language model.
3820
- *
3821
- * @param options - Object containing the stream function, parameters, and model.
3822
- * @param options.doGenerate - The original generate function.
3823
- * @param options.doStream - The original stream function.
3824
- * @param options.params - The parameters for the stream call. If the
3825
- * `transformParams` middleware is used, this will be the transformed parameters.
3826
- * @param options.model - The language model instance.
3827
- * @returns A promise that resolves to the result of the stream operation.
3828
- */
3829
- wrapStream?: (options: {
3830
- doGenerate: () => ReturnType<LanguageModelV1['doGenerate']>;
3831
- doStream: () => ReturnType<LanguageModelV1['doStream']>;
3832
- params: LanguageModelV1CallOptions;
3833
- model: LanguageModelV1;
3834
- }) => PromiseLike<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
3835
- };
3836
- /**
3837
- * @deprecated Use `LanguageModelV1Middleware` instead.
3838
- */
3839
- type Experimental_LanguageModelV1Middleware = LanguageModelV1Middleware;
3840
-
3841
3795
  /**
3842
3796
  * Applies default settings for a language model.
3843
3797
  */
3844
3798
  declare function defaultSettingsMiddleware({ settings, }: {
3845
- settings: Partial<LanguageModelV1CallOptions & {
3846
- providerMetadata?: LanguageModelV1ProviderMetadata;
3799
+ settings: Partial<LanguageModelV2CallOptions & {
3800
+ providerMetadata?: LanguageModelV2ProviderMetadata;
3847
3801
  }>;
3848
- }): LanguageModelV1Middleware;
3802
+ }): LanguageModelV2Middleware;
3849
3803
 
3850
3804
  /**
3851
3805
  * Extract an XML-tagged reasoning section from the generated text and exposes it
@@ -3859,40 +3813,40 @@ declare function extractReasoningMiddleware({ tagName, separator, startWithReaso
3859
3813
  tagName: string;
3860
3814
  separator?: string;
3861
3815
  startWithReasoning?: boolean;
3862
- }): LanguageModelV1Middleware;
3816
+ }): LanguageModelV2Middleware;
3863
3817
 
3864
3818
  /**
3865
3819
  * Simulates streaming chunks with the response from a generate call.
3866
3820
  */
3867
- declare function simulateStreamingMiddleware(): LanguageModelV1Middleware;
3821
+ declare function simulateStreamingMiddleware(): LanguageModelV2Middleware;
3868
3822
 
3869
3823
  /**
3870
- * Wraps a LanguageModelV1 instance with middleware functionality.
3824
+ * Wraps a LanguageModelV2 instance with middleware functionality.
3871
3825
  * This function allows you to apply middleware to transform parameters,
3872
3826
  * wrap generate operations, and wrap stream operations of a language model.
3873
3827
  *
3874
3828
  * @param options - Configuration options for wrapping the language model.
3875
- * @param options.model - The original LanguageModelV1 instance to be wrapped.
3829
+ * @param options.model - The original LanguageModelV2 instance to be wrapped.
3876
3830
  * @param options.middleware - The middleware to be applied to the language model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.
3877
3831
  * @param options.modelId - Optional custom model ID to override the original model's ID.
3878
3832
  * @param options.providerId - Optional custom provider ID to override the original model's provider.
3879
- * @returns A new LanguageModelV1 instance with middleware applied.
3833
+ * @returns A new LanguageModelV2 instance with middleware applied.
3880
3834
  */
3881
3835
  declare const wrapLanguageModel: ({ model, middleware: middlewareArg, modelId, providerId, }: {
3882
- model: LanguageModelV1;
3883
- middleware: LanguageModelV1Middleware | LanguageModelV1Middleware[];
3836
+ model: LanguageModelV2;
3837
+ middleware: LanguageModelV2Middleware | LanguageModelV2Middleware[];
3884
3838
  modelId?: string;
3885
3839
  providerId?: string;
3886
- }) => LanguageModelV1;
3840
+ }) => LanguageModelV2;
3887
3841
  /**
3888
3842
  * @deprecated Use `wrapLanguageModel` instead.
3889
3843
  */
3890
3844
  declare const experimental_wrapLanguageModel: ({ model, middleware: middlewareArg, modelId, providerId, }: {
3891
- model: LanguageModelV1;
3892
- middleware: LanguageModelV1Middleware | LanguageModelV1Middleware[];
3845
+ model: LanguageModelV2;
3846
+ middleware: LanguageModelV2Middleware | LanguageModelV2Middleware[];
3893
3847
  modelId?: string;
3894
3848
  providerId?: string;
3895
- }) => LanguageModelV1;
3849
+ }) => LanguageModelV2;
3896
3850
 
3897
3851
  /**
3898
3852
  * Creates a custom provider with specified language models, text embedding models, and an optional fallback provider.
@@ -3910,7 +3864,7 @@ declare function customProvider<LANGUAGE_MODELS extends Record<string, LanguageM
3910
3864
  languageModels?: LANGUAGE_MODELS;
3911
3865
  textEmbeddingModels?: EMBEDDING_MODELS;
3912
3866
  imageModels?: IMAGE_MODELS;
3913
- fallbackProvider?: ProviderV1;
3867
+ fallbackProvider?: ProviderV2;
3914
3868
  }): Provider & {
3915
3869
  languageModel(modelId: ExtractModelId<LANGUAGE_MODELS>): LanguageModel;
3916
3870
  textEmbeddingModel(modelId: ExtractModelId<EMBEDDING_MODELS>): EmbeddingModel<string>;
@@ -3938,7 +3892,7 @@ declare class NoSuchProviderError extends NoSuchModelError {
3938
3892
  }
3939
3893
 
3940
3894
  type ExtractLiteralUnion<T> = T extends string ? string extends T ? never : T : never;
3941
- interface ProviderRegistryProvider<PROVIDERS extends Record<string, ProviderV1> = Record<string, ProviderV1>, SEPARATOR extends string = ':'> {
3895
+ interface ProviderRegistryProvider<PROVIDERS extends Record<string, ProviderV2> = Record<string, ProviderV2>, SEPARATOR extends string = ':'> {
3942
3896
  languageModel<KEY extends keyof PROVIDERS>(id: KEY extends string ? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['languageModel']>>[0]>}` : never): LanguageModel;
3943
3897
  languageModel<KEY extends keyof PROVIDERS>(id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never): LanguageModel;
3944
3898
  textEmbeddingModel<KEY extends keyof PROVIDERS>(id: KEY extends string ? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['textEmbeddingModel']>>[0]>}` : never): EmbeddingModel<string>;
@@ -3949,7 +3903,7 @@ interface ProviderRegistryProvider<PROVIDERS extends Record<string, ProviderV1>
3949
3903
  /**
3950
3904
  * Creates a registry for the given providers.
3951
3905
  */
3952
- declare function createProviderRegistry<PROVIDERS extends Record<string, ProviderV1>, SEPARATOR extends string = ':'>(providers: PROVIDERS, { separator, }?: {
3906
+ declare function createProviderRegistry<PROVIDERS extends Record<string, ProviderV2>, SEPARATOR extends string = ':'>(providers: PROVIDERS, { separator, }?: {
3953
3907
  separator?: SEPARATOR;
3954
3908
  }): ProviderRegistryProvider<PROVIDERS, SEPARATOR>;
3955
3909
  /**
@@ -4114,12 +4068,17 @@ declare class NoObjectGeneratedError extends AISDKError {
4114
4068
  The usage of the model.
4115
4069
  */
4116
4070
  readonly usage: LanguageModelUsage | undefined;
4117
- constructor({ message, cause, text, response, usage, }: {
4071
+ /**
4072
+ Reason why the model finished generating a response.
4073
+ */
4074
+ readonly finishReason: FinishReason | undefined;
4075
+ constructor({ message, cause, text, response, usage, finishReason, }: {
4118
4076
  message?: string;
4119
4077
  cause?: Error;
4120
4078
  text?: string;
4121
4079
  response: LanguageModelResponseMetadata;
4122
4080
  usage: LanguageModelUsage;
4081
+ finishReason: FinishReason;
4123
4082
  });
4124
4083
  static isInstance(error: unknown): error is NoObjectGeneratedError;
4125
4084
  }
@@ -4339,4 +4298,4 @@ declare namespace llamaindexAdapter {
4339
4298
  };
4340
4299
  }
4341
4300
 
4342
- export { AssistantContent, CallWarning, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolCallUnion, CoreToolChoice, CoreToolMessage, CoreToolResultUnion, CoreUserMessage, DataContent, DataStreamOptions, DataStreamWriter, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, GenerateImageResult as Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, Experimental_LanguageModelV1Middleware, FilePart, FinishReason, GenerateObjectResult, GenerateTextOnStepFinishCallback, GenerateTextResult, GeneratedFile, ImageModel, ImageGenerationWarning as ImageModelCallWarning, ImageModelResponseMetadata, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolArgumentsError, JSONRPCError, JSONRPCMessage, JSONRPCNotification, JSONRPCRequest, JSONRPCResponse, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LanguageModelV1Middleware, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MCPClientError, MCPTransport, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, ProviderRegistryProvider, RepairTextFunction, RetryError, StepResult, StreamData, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStepFinishCallback, 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, createProviderRegistry, customProvider, defaultSettingsMiddleware, embed, embedMany, createMCPClient as experimental_createMCPClient, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, extractReasoningMiddleware, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, simulateStreamingMiddleware, smoothStream, streamObject, streamText, tool, wrapLanguageModel };
4301
+ export { AssistantContent, CallWarning, ChunkDetector, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolCallUnion, CoreToolChoice, CoreToolMessage, CoreToolResultUnion, CoreUserMessage, DataContent, DataStreamOptions, DataStreamWriter, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, GenerateImageResult as Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, FilePart, FinishReason, GenerateObjectResult, GenerateTextOnStepFinishCallback, GenerateTextResult, GeneratedFile, ImageModel, ImageGenerationWarning as ImageModelCallWarning, ImageModelResponseMetadata, ImagePart, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolArgumentsError, JSONRPCError, JSONRPCMessage, JSONRPCNotification, JSONRPCRequest, JSONRPCResponse, langchainAdapter as LangChainAdapter, LanguageModel, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, llamaindexAdapter as LlamaIndexAdapter, LogProbs, MCPClientError, MCPTransport, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, Provider, ProviderMetadata, ProviderRegistryProvider, RepairTextFunction, RetryError, StepResult, StreamData, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStepFinishCallback, 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, createProviderRegistry, customProvider, defaultSettingsMiddleware, embed, embedMany, createMCPClient as experimental_createMCPClient, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, experimental_wrapLanguageModel, extractReasoningMiddleware, generateObject, generateText, pipeDataStreamToResponse, simulateReadableStream, simulateStreamingMiddleware, smoothStream, streamObject, streamText, tool, wrapLanguageModel };
package/dist/index.js CHANGED
@@ -1112,13 +1112,15 @@ var NoObjectGeneratedError = class extends import_provider5.AISDKError {
1112
1112
  cause,
1113
1113
  text: text2,
1114
1114
  response,
1115
- usage
1115
+ usage,
1116
+ finishReason
1116
1117
  }) {
1117
1118
  super({ name: name4, message, cause });
1118
1119
  this[_a4] = true;
1119
1120
  this.text = text2;
1120
1121
  this.response = response;
1121
1122
  this.usage = usage;
1123
+ this.finishReason = finishReason;
1122
1124
  }
1123
1125
  static isInstance(error) {
1124
1126
  return import_provider5.AISDKError.hasMarker(error, marker4);
@@ -2280,7 +2282,8 @@ var noSchemaOutputStrategy = {
2280
2282
  message: "No object generated: response did not match schema.",
2281
2283
  text: context.text,
2282
2284
  response: context.response,
2283
- usage: context.usage
2285
+ usage: context.usage,
2286
+ finishReason: context.finishReason
2284
2287
  })
2285
2288
  } : { success: true, value };
2286
2289
  },
@@ -2777,7 +2780,8 @@ async function generateObject({
2777
2780
  throw new NoObjectGeneratedError({
2778
2781
  message: "No object generated: the model did not return a response.",
2779
2782
  response: responseData,
2780
- usage: calculateLanguageModelUsage(result2.usage)
2783
+ usage: calculateLanguageModelUsage(result2.usage),
2784
+ finishReason: result2.finishReason
2781
2785
  });
2782
2786
  }
2783
2787
  span2.setAttributes(
@@ -2886,7 +2890,8 @@ async function generateObject({
2886
2890
  throw new NoObjectGeneratedError({
2887
2891
  message: "No object generated: the tool was not called.",
2888
2892
  response: responseData,
2889
- usage: calculateLanguageModelUsage(result2.usage)
2893
+ usage: calculateLanguageModelUsage(result2.usage),
2894
+ finishReason: result2.finishReason
2890
2895
  });
2891
2896
  }
2892
2897
  span2.setAttributes(
@@ -2942,7 +2947,8 @@ async function generateObject({
2942
2947
  cause: parseResult.error,
2943
2948
  text: result2,
2944
2949
  response,
2945
- usage: calculateLanguageModelUsage(usage)
2950
+ usage: calculateLanguageModelUsage(usage),
2951
+ finishReason
2946
2952
  });
2947
2953
  }
2948
2954
  const validationResult = outputStrategy.validateFinalResult(
@@ -2959,7 +2965,8 @@ async function generateObject({
2959
2965
  cause: validationResult.error,
2960
2966
  text: result2,
2961
2967
  response,
2962
- usage: calculateLanguageModelUsage(usage)
2968
+ usage: calculateLanguageModelUsage(usage),
2969
+ finishReason
2963
2970
  });
2964
2971
  }
2965
2972
  return validationResult.value;
@@ -3564,7 +3571,8 @@ var DefaultStreamObjectResult = class {
3564
3571
  cause: validationResult.error,
3565
3572
  text: accumulatedText,
3566
3573
  response,
3567
- usage
3574
+ usage,
3575
+ finishReason
3568
3576
  });
3569
3577
  self.objectPromise.reject(error);
3570
3578
  }
@@ -4392,7 +4400,11 @@ async function generateText({
4392
4400
  }
4393
4401
  return output.parseOutput(
4394
4402
  { text: text2 },
4395
- { response: currentModelResponse.response, usage }
4403
+ {
4404
+ response: currentModelResponse.response,
4405
+ usage,
4406
+ finishReason: currentModelResponse.finishReason
4407
+ }
4396
4408
  );
4397
4409
  },
4398
4410
  toolCalls: currentToolCalls,
@@ -4637,7 +4649,8 @@ var object = ({
4637
4649
  cause: parseResult.error,
4638
4650
  text: text2,
4639
4651
  response: context.response,
4640
- usage: context.usage
4652
+ usage: context.usage,
4653
+ finishReason: context.finishReason
4641
4654
  });
4642
4655
  }
4643
4656
  const validationResult = (0, import_provider_utils10.safeValidateTypes)({
@@ -4650,7 +4663,8 @@ var object = ({
4650
4663
  cause: validationResult.error,
4651
4664
  text: text2,
4652
4665
  response: context.response,
4653
- usage: context.usage
4666
+ usage: context.usage,
4667
+ finishReason: context.finishReason
4654
4668
  });
4655
4669
  }
4656
4670
  return validationResult.value;
@@ -4659,23 +4673,49 @@ var object = ({
4659
4673
  };
4660
4674
 
4661
4675
  // core/generate-text/smooth-stream.ts
4662
- var import_provider21 = require("@ai-sdk/provider");
4663
4676
  var import_provider_utils11 = require("@ai-sdk/provider-utils");
4677
+ var import_provider21 = require("@ai-sdk/provider");
4664
4678
  var CHUNKING_REGEXPS = {
4665
- word: /\s*\S+\s+/m,
4666
- line: /[^\n]*\n/m
4679
+ word: /\S+\s+/m,
4680
+ line: /\n+/m
4667
4681
  };
4668
4682
  function smoothStream({
4669
4683
  delayInMs = 10,
4670
4684
  chunking = "word",
4671
4685
  _internal: { delay: delay2 = import_provider_utils11.delay } = {}
4672
4686
  } = {}) {
4673
- const chunkingRegexp = typeof chunking === "string" ? CHUNKING_REGEXPS[chunking] : chunking;
4674
- if (chunkingRegexp == null) {
4675
- throw new import_provider21.InvalidArgumentError({
4676
- argument: "chunking",
4677
- message: `Chunking must be "word" or "line" or a RegExp. Received: ${chunking}`
4678
- });
4687
+ let detectChunk;
4688
+ if (typeof chunking === "function") {
4689
+ detectChunk = (buffer) => {
4690
+ const match = chunking(buffer);
4691
+ if (match == null) {
4692
+ return null;
4693
+ }
4694
+ if (!match.length) {
4695
+ throw new Error(`Chunking function must return a non-empty string.`);
4696
+ }
4697
+ if (!buffer.startsWith(match)) {
4698
+ throw new Error(
4699
+ `Chunking function must return a match that is a prefix of the buffer. Received: "${match}" expected to start with "${buffer}"`
4700
+ );
4701
+ }
4702
+ return match;
4703
+ };
4704
+ } else {
4705
+ const chunkingRegex = typeof chunking === "string" ? CHUNKING_REGEXPS[chunking] : chunking;
4706
+ if (chunkingRegex == null) {
4707
+ throw new import_provider21.InvalidArgumentError({
4708
+ argument: "chunking",
4709
+ message: `Chunking must be "word" or "line" or a RegExp. Received: ${chunking}`
4710
+ });
4711
+ }
4712
+ detectChunk = (buffer) => {
4713
+ const match = chunkingRegex.exec(buffer);
4714
+ if (!match) {
4715
+ return null;
4716
+ }
4717
+ return buffer.slice(0, match.index) + (match == null ? void 0 : match[0]);
4718
+ };
4679
4719
  }
4680
4720
  return () => {
4681
4721
  let buffer = "";
@@ -4691,10 +4731,9 @@ function smoothStream({
4691
4731
  }
4692
4732
  buffer += chunk.textDelta;
4693
4733
  let match;
4694
- while ((match = chunkingRegexp.exec(buffer)) != null) {
4695
- const chunk2 = match[0];
4696
- controller.enqueue({ type: "text-delta", textDelta: chunk2 });
4697
- buffer = buffer.slice(chunk2.length);
4734
+ while ((match = detectChunk(buffer)) != null) {
4735
+ controller.enqueue({ type: "text-delta", textDelta: match });
4736
+ buffer = buffer.slice(match.length);
4698
4737
  await delay2(delayInMs);
4699
4738
  }
4700
4739
  }
@@ -4712,6 +4751,25 @@ function asArray(value) {
4712
4751
  return value === void 0 ? [] : Array.isArray(value) ? value : [value];
4713
4752
  }
4714
4753
 
4754
+ // util/consume-stream.ts
4755
+ async function consumeStream({
4756
+ stream,
4757
+ onError
4758
+ }) {
4759
+ const reader = stream.getReader();
4760
+ try {
4761
+ while (true) {
4762
+ const { done } = await reader.read();
4763
+ if (done)
4764
+ break;
4765
+ }
4766
+ } catch (error) {
4767
+ onError == null ? void 0 : onError(error);
4768
+ } finally {
4769
+ reader.releaseLock();
4770
+ }
4771
+ }
4772
+
4715
4773
  // core/util/merge-streams.ts
4716
4774
  function mergeStreams(stream1, stream2) {
4717
4775
  const reader1 = stream1.getReader();
@@ -5953,9 +6011,15 @@ var DefaultStreamTextResult = class {
5953
6011
  )
5954
6012
  );
5955
6013
  }
5956
- async consumeStream() {
5957
- const stream = this.fullStream;
5958
- for await (const part of stream) {
6014
+ async consumeStream(options) {
6015
+ var _a17;
6016
+ try {
6017
+ await consumeStream({
6018
+ stream: this.fullStream,
6019
+ onError: options == null ? void 0 : options.onError
6020
+ });
6021
+ } catch (error) {
6022
+ (_a17 = options == null ? void 0 : options.onError) == null ? void 0 : _a17.call(options, error);
5959
6023
  }
5960
6024
  }
5961
6025
  get experimental_partialOutputStream() {
@@ -6264,7 +6328,7 @@ function defaultSettingsMiddleware({
6264
6328
  settings
6265
6329
  }) {
6266
6330
  return {
6267
- middlewareVersion: "v1",
6331
+ middlewareVersion: "v2",
6268
6332
  transformParams: async ({ params }) => {
6269
6333
  var _a17;
6270
6334
  return {
@@ -6309,7 +6373,7 @@ function extractReasoningMiddleware({
6309
6373
  const openingTag = `<${tagName}>`;
6310
6374
  const closingTag = `</${tagName}>`;
6311
6375
  return {
6312
- middlewareVersion: "v1",
6376
+ middlewareVersion: "v2",
6313
6377
  wrapGenerate: async ({ doGenerate }) => {
6314
6378
  const { text: rawText, ...rest } = await doGenerate();
6315
6379
  if (rawText == null) {
@@ -6395,7 +6459,7 @@ function extractReasoningMiddleware({
6395
6459
  // core/middleware/simulate-streaming-middleware.ts
6396
6460
  function simulateStreamingMiddleware() {
6397
6461
  return {
6398
- middlewareVersion: "v1",
6462
+ middlewareVersion: "v2",
6399
6463
  wrapStream: async ({ doGenerate }) => {
6400
6464
  const result = await doGenerate();
6401
6465
  const simulatedStream = new ReadableStream({
@@ -6500,7 +6564,7 @@ var doWrap = ({
6500
6564
  return transformParams ? await transformParams({ params, type }) : params;
6501
6565
  }
6502
6566
  return {
6503
- specificationVersion: "v1",
6567
+ specificationVersion: "v2",
6504
6568
  provider: providerId != null ? providerId : model.provider,
6505
6569
  modelId: modelId != null ? modelId : model.modelId,
6506
6570
  defaultObjectGenerationMode: model.defaultObjectGenerationMode,