ai 4.0.34 → 4.0.36

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,19 @@
1
1
  # ai
2
2
 
3
+ ## 4.0.36
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [37f4510]
8
+ - @ai-sdk/ui-utils@1.0.10
9
+ - @ai-sdk/react@1.0.11
10
+
11
+ ## 4.0.35
12
+
13
+ ### Patch Changes
14
+
15
+ - 3491f78: feat (ai/core): support multiple stream text transforms
16
+
3
17
  ## 4.0.34
4
18
 
5
19
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -2031,6 +2031,37 @@ type TextStreamPart<TOOLS extends Record<string, CoreTool>> = {
2031
2031
  error: unknown;
2032
2032
  };
2033
2033
 
2034
+ /**
2035
+ * Smooths text streaming output.
2036
+ *
2037
+ * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms. Can be set to `null` to skip the delay.
2038
+ * @param chunking - Controls how the text is chunked for streaming. Use "word" to stream word by word (default), "line" to stream line by line, or provide a custom RegExp pattern for custom chunking.
2039
+ *
2040
+ * @returns A transform stream that smooths text streaming output.
2041
+ */
2042
+ declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, chunking, _internal: { delay }, }?: {
2043
+ delayInMs?: number | null;
2044
+ chunking?: 'word' | 'line' | RegExp;
2045
+ /**
2046
+ * Internal. For test use only. May change without notice.
2047
+ */
2048
+ _internal?: {
2049
+ delay?: (delayInMs: number | null) => Promise<void>;
2050
+ };
2051
+ }): (options: {
2052
+ tools: TOOLS;
2053
+ }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2054
+
2055
+ /**
2056
+ A transformation that is applied to the stream.
2057
+
2058
+ @param stopStream - A function that stops the source stream.
2059
+ @param tools - The tools that are accessible to and can be called by the model. The model needs to support calling tools.
2060
+ */
2061
+ type StreamTextTransform<TOOLS extends Record<string, CoreTool>> = (options: {
2062
+ tools: TOOLS;
2063
+ stopStream: () => void;
2064
+ }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2034
2065
  /**
2035
2066
  Generate a text and call tools for a given prompt using a language model.
2036
2067
 
@@ -2133,15 +2164,11 @@ Enable streaming of tool call deltas as they are generated. Disabled by default.
2133
2164
  */
2134
2165
  experimental_toolCallStreaming?: boolean;
2135
2166
  /**
2136
- Optional transformation that is applied to the stream.
2137
-
2138
- @param stopStream - A function that stops the source stream.
2139
- @param tools - The tools that are accessible to and can be called by the model. The model needs to support calling tools.
2167
+ Optional stream transformations.
2168
+ They are applied in the order they are provided.
2169
+ The stream transformations must maintain the stream structure for streamText to work correctly.
2140
2170
  */
2141
- experimental_transform?: (options: {
2142
- tools: TOOLS;
2143
- stopStream: () => void;
2144
- }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2171
+ experimental_transform?: StreamTextTransform<TOOLS> | Array<StreamTextTransform<TOOLS>>;
2145
2172
  /**
2146
2173
  Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.
2147
2174
  */
@@ -2176,27 +2203,6 @@ Details for all steps.
2176
2203
  };
2177
2204
  }): StreamTextResult<TOOLS, PARTIAL_OUTPUT>;
2178
2205
 
2179
- /**
2180
- * Smooths text streaming output.
2181
- *
2182
- * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms. Can be set to `null` to skip the delay.
2183
- * @param chunking - Controls how the text is chunked for streaming. Use "word" to stream word by word (default), "line" to stream line by line, or provide a custom RegExp pattern for custom chunking.
2184
- *
2185
- * @returns A transform stream that smooths text streaming output.
2186
- */
2187
- declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, chunking, _internal: { delay }, }?: {
2188
- delayInMs?: number | null;
2189
- chunking?: 'word' | 'line' | RegExp;
2190
- /**
2191
- * Internal. For test use only. May change without notice.
2192
- */
2193
- _internal?: {
2194
- delay?: (delayInMs: number | null) => Promise<void>;
2195
- };
2196
- }): (options: {
2197
- tools: TOOLS;
2198
- }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2199
-
2200
2206
  /**
2201
2207
  * Experimental middleware for LanguageModelV1.
2202
2208
  * This type defines the structure for middleware that can be used to modify
@@ -2617,4 +2623,4 @@ declare namespace llamaindexAdapter {
2617
2623
  };
2618
2624
  }
2619
2625
 
2620
- 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 };
2626
+ 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, StreamTextTransform, 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
@@ -2031,6 +2031,37 @@ type TextStreamPart<TOOLS extends Record<string, CoreTool>> = {
2031
2031
  error: unknown;
2032
2032
  };
2033
2033
 
2034
+ /**
2035
+ * Smooths text streaming output.
2036
+ *
2037
+ * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms. Can be set to `null` to skip the delay.
2038
+ * @param chunking - Controls how the text is chunked for streaming. Use "word" to stream word by word (default), "line" to stream line by line, or provide a custom RegExp pattern for custom chunking.
2039
+ *
2040
+ * @returns A transform stream that smooths text streaming output.
2041
+ */
2042
+ declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, chunking, _internal: { delay }, }?: {
2043
+ delayInMs?: number | null;
2044
+ chunking?: 'word' | 'line' | RegExp;
2045
+ /**
2046
+ * Internal. For test use only. May change without notice.
2047
+ */
2048
+ _internal?: {
2049
+ delay?: (delayInMs: number | null) => Promise<void>;
2050
+ };
2051
+ }): (options: {
2052
+ tools: TOOLS;
2053
+ }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2054
+
2055
+ /**
2056
+ A transformation that is applied to the stream.
2057
+
2058
+ @param stopStream - A function that stops the source stream.
2059
+ @param tools - The tools that are accessible to and can be called by the model. The model needs to support calling tools.
2060
+ */
2061
+ type StreamTextTransform<TOOLS extends Record<string, CoreTool>> = (options: {
2062
+ tools: TOOLS;
2063
+ stopStream: () => void;
2064
+ }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2034
2065
  /**
2035
2066
  Generate a text and call tools for a given prompt using a language model.
2036
2067
 
@@ -2133,15 +2164,11 @@ Enable streaming of tool call deltas as they are generated. Disabled by default.
2133
2164
  */
2134
2165
  experimental_toolCallStreaming?: boolean;
2135
2166
  /**
2136
- Optional transformation that is applied to the stream.
2137
-
2138
- @param stopStream - A function that stops the source stream.
2139
- @param tools - The tools that are accessible to and can be called by the model. The model needs to support calling tools.
2167
+ Optional stream transformations.
2168
+ They are applied in the order they are provided.
2169
+ The stream transformations must maintain the stream structure for streamText to work correctly.
2140
2170
  */
2141
- experimental_transform?: (options: {
2142
- tools: TOOLS;
2143
- stopStream: () => void;
2144
- }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2171
+ experimental_transform?: StreamTextTransform<TOOLS> | Array<StreamTextTransform<TOOLS>>;
2145
2172
  /**
2146
2173
  Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.
2147
2174
  */
@@ -2176,27 +2203,6 @@ Details for all steps.
2176
2203
  };
2177
2204
  }): StreamTextResult<TOOLS, PARTIAL_OUTPUT>;
2178
2205
 
2179
- /**
2180
- * Smooths text streaming output.
2181
- *
2182
- * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms. Can be set to `null` to skip the delay.
2183
- * @param chunking - Controls how the text is chunked for streaming. Use "word" to stream word by word (default), "line" to stream line by line, or provide a custom RegExp pattern for custom chunking.
2184
- *
2185
- * @returns A transform stream that smooths text streaming output.
2186
- */
2187
- declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, chunking, _internal: { delay }, }?: {
2188
- delayInMs?: number | null;
2189
- chunking?: 'word' | 'line' | RegExp;
2190
- /**
2191
- * Internal. For test use only. May change without notice.
2192
- */
2193
- _internal?: {
2194
- delay?: (delayInMs: number | null) => Promise<void>;
2195
- };
2196
- }): (options: {
2197
- tools: TOOLS;
2198
- }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2199
-
2200
2206
  /**
2201
2207
  * Experimental middleware for LanguageModelV1.
2202
2208
  * This type defines the structure for middleware that can be used to modify
@@ -2617,4 +2623,4 @@ declare namespace llamaindexAdapter {
2617
2623
  };
2618
2624
  }
2619
2625
 
2620
- 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 };
2626
+ 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, StreamTextTransform, 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
@@ -4144,6 +4144,53 @@ var object = ({
4144
4144
  };
4145
4145
  };
4146
4146
 
4147
+ // core/generate-text/smooth-stream.ts
4148
+ var import_provider17 = require("@ai-sdk/provider");
4149
+ var CHUNKING_REGEXPS = {
4150
+ word: /\s*\S+\s+/m,
4151
+ line: /[^\n]*\n/m
4152
+ };
4153
+ function smoothStream({
4154
+ delayInMs = 10,
4155
+ chunking = "word",
4156
+ _internal: { delay: delay2 = delay } = {}
4157
+ } = {}) {
4158
+ const chunkingRegexp = typeof chunking === "string" ? CHUNKING_REGEXPS[chunking] : chunking;
4159
+ if (chunkingRegexp == null) {
4160
+ throw new import_provider17.InvalidArgumentError({
4161
+ argument: "chunking",
4162
+ message: `Chunking must be "word" or "line" or a RegExp. Received: ${chunking}`
4163
+ });
4164
+ }
4165
+ return () => {
4166
+ let buffer = "";
4167
+ return new TransformStream({
4168
+ async transform(chunk, controller) {
4169
+ if (chunk.type === "step-finish") {
4170
+ if (buffer.length > 0) {
4171
+ controller.enqueue({ type: "text-delta", textDelta: buffer });
4172
+ buffer = "";
4173
+ }
4174
+ controller.enqueue(chunk);
4175
+ return;
4176
+ }
4177
+ if (chunk.type !== "text-delta") {
4178
+ controller.enqueue(chunk);
4179
+ return;
4180
+ }
4181
+ buffer += chunk.textDelta;
4182
+ let match;
4183
+ while ((match = chunkingRegexp.exec(buffer)) != null) {
4184
+ const chunk2 = match[0];
4185
+ controller.enqueue({ type: "text-delta", textDelta: chunk2 });
4186
+ buffer = buffer.slice(chunk2.length);
4187
+ await delay2(delayInMs);
4188
+ }
4189
+ }
4190
+ });
4191
+ };
4192
+ }
4193
+
4147
4194
  // core/generate-text/stream-text.ts
4148
4195
  var import_provider_utils11 = require("@ai-sdk/provider-utils");
4149
4196
  var import_ui_utils8 = require("@ai-sdk/ui-utils");
@@ -4470,7 +4517,7 @@ function streamText({
4470
4517
  tools,
4471
4518
  toolChoice,
4472
4519
  toolCallStreaming,
4473
- transform,
4520
+ transforms: transform == null ? [] : Array.isArray(transform) ? transform : [transform],
4474
4521
  activeTools,
4475
4522
  repairToolCall,
4476
4523
  maxSteps,
@@ -4550,7 +4597,7 @@ var DefaultStreamTextResult = class {
4550
4597
  tools,
4551
4598
  toolChoice,
4552
4599
  toolCallStreaming,
4553
- transform,
4600
+ transforms,
4554
4601
  activeTools,
4555
4602
  repairToolCall,
4556
4603
  maxSteps,
@@ -4743,7 +4790,7 @@ var DefaultStreamTextResult = class {
4743
4790
  this.addStream = stitchableStream.addStream;
4744
4791
  this.closeStream = stitchableStream.close;
4745
4792
  let stream = stitchableStream.stream;
4746
- if (transform) {
4793
+ for (const transform of transforms) {
4747
4794
  stream = stream.pipeThrough(
4748
4795
  transform({
4749
4796
  tools,
@@ -5417,53 +5464,6 @@ var DefaultStreamTextResult = class {
5417
5464
  }
5418
5465
  };
5419
5466
 
5420
- // core/generate-text/smooth-stream.ts
5421
- var import_provider17 = require("@ai-sdk/provider");
5422
- var CHUNKING_REGEXPS = {
5423
- word: /\s*\S+\s+/m,
5424
- line: /[^\n]*\n/m
5425
- };
5426
- function smoothStream({
5427
- delayInMs = 10,
5428
- chunking = "word",
5429
- _internal: { delay: delay2 = delay } = {}
5430
- } = {}) {
5431
- const chunkingRegexp = typeof chunking === "string" ? CHUNKING_REGEXPS[chunking] : chunking;
5432
- if (chunkingRegexp == null) {
5433
- throw new import_provider17.InvalidArgumentError({
5434
- argument: "chunking",
5435
- message: `Chunking must be "word" or "line" or a RegExp. Received: ${chunking}`
5436
- });
5437
- }
5438
- return () => {
5439
- let buffer = "";
5440
- return new TransformStream({
5441
- async transform(chunk, controller) {
5442
- if (chunk.type === "step-finish") {
5443
- if (buffer.length > 0) {
5444
- controller.enqueue({ type: "text-delta", textDelta: buffer });
5445
- buffer = "";
5446
- }
5447
- controller.enqueue(chunk);
5448
- return;
5449
- }
5450
- if (chunk.type !== "text-delta") {
5451
- controller.enqueue(chunk);
5452
- return;
5453
- }
5454
- buffer += chunk.textDelta;
5455
- let match;
5456
- while ((match = chunkingRegexp.exec(buffer)) != null) {
5457
- const chunk2 = match[0];
5458
- controller.enqueue({ type: "text-delta", textDelta: chunk2 });
5459
- buffer = buffer.slice(chunk2.length);
5460
- await delay2(delayInMs);
5461
- }
5462
- }
5463
- });
5464
- };
5465
- }
5466
-
5467
5467
  // core/middleware/wrap-language-model.ts
5468
5468
  var experimental_wrapLanguageModel = ({
5469
5469
  model,