ai 4.0.25 → 4.0.27

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,20 @@
1
1
  # ai
2
2
 
3
+ ## 4.0.27
4
+
5
+ ### Patch Changes
6
+
7
+ - a56734f: feat (ai/core): export simulateReadableStream in ai package
8
+ - 9589601: feat (ai/core): support null delay in smoothStream
9
+ - e3cc23a: feat (ai/core): support regexp chunking pattern in smoothStream
10
+ - e463e73: feat (ai/core): support skipping delays in simulateReadableStream
11
+
12
+ ## 4.0.26
13
+
14
+ ### Patch Changes
15
+
16
+ - a8f3242: feat (ai/core): add line chunking mode to smoothStream
17
+
3
18
  ## 4.0.25
4
19
 
5
20
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -2151,16 +2151,19 @@ Details for all steps.
2151
2151
  /**
2152
2152
  * Smooths text streaming output.
2153
2153
  *
2154
- * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms.
2154
+ * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms. Can be set to `null` to skip the delay.
2155
+ * @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.
2156
+ *
2155
2157
  * @returns A transform stream that smooths text streaming output.
2156
2158
  */
2157
- declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, _internal: { delay }, }?: {
2158
- delayInMs?: number;
2159
+ declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, chunking, _internal: { delay }, }?: {
2160
+ delayInMs?: number | null;
2161
+ chunking?: 'word' | 'line' | RegExp;
2159
2162
  /**
2160
2163
  * Internal. For test use only. May change without notice.
2161
2164
  */
2162
2165
  _internal?: {
2163
- delay?: (delayInMs: number) => Promise<void>;
2166
+ delay?: (delayInMs: number | null) => Promise<void>;
2164
2167
  };
2165
2168
  }): (options: {
2166
2169
  tools: TOOLS;
@@ -2281,6 +2284,24 @@ declare function experimental_createProviderRegistry(providers: Record<string, P
2281
2284
  */
2282
2285
  declare function cosineSimilarity(vector1: number[], vector2: number[]): number;
2283
2286
 
2287
+ /**
2288
+ * Creates a ReadableStream that emits the provided values with an optional delay between each value.
2289
+ *
2290
+ * @param options - The configuration options
2291
+ * @param options.chunks - Array of values to be emitted by the stream
2292
+ * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.
2293
+ * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.
2294
+ * @returns A ReadableStream that emits the provided values
2295
+ */
2296
+ declare function simulateReadableStream<T>({ chunks, initialDelayInMs, chunkDelayInMs, _internal, }: {
2297
+ chunks: T[];
2298
+ initialDelayInMs?: number | null;
2299
+ chunkDelayInMs?: number | null;
2300
+ _internal?: {
2301
+ delay?: (ms: number | null) => Promise<void>;
2302
+ };
2303
+ }): ReadableStream<T>;
2304
+
2284
2305
  declare const symbol$9: unique symbol;
2285
2306
  declare class InvalidArgumentError extends AISDKError {
2286
2307
  private readonly [symbol$9];
@@ -2566,4 +2587,4 @@ declare namespace llamaindexAdapter {
2566
2587
  };
2567
2588
  }
2568
2589
 
2569
- 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, smoothStream, streamObject, streamText, tool };
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 };
package/dist/index.d.ts CHANGED
@@ -2151,16 +2151,19 @@ Details for all steps.
2151
2151
  /**
2152
2152
  * Smooths text streaming output.
2153
2153
  *
2154
- * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms.
2154
+ * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms. Can be set to `null` to skip the delay.
2155
+ * @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.
2156
+ *
2155
2157
  * @returns A transform stream that smooths text streaming output.
2156
2158
  */
2157
- declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, _internal: { delay }, }?: {
2158
- delayInMs?: number;
2159
+ declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, chunking, _internal: { delay }, }?: {
2160
+ delayInMs?: number | null;
2161
+ chunking?: 'word' | 'line' | RegExp;
2159
2162
  /**
2160
2163
  * Internal. For test use only. May change without notice.
2161
2164
  */
2162
2165
  _internal?: {
2163
- delay?: (delayInMs: number) => Promise<void>;
2166
+ delay?: (delayInMs: number | null) => Promise<void>;
2164
2167
  };
2165
2168
  }): (options: {
2166
2169
  tools: TOOLS;
@@ -2281,6 +2284,24 @@ declare function experimental_createProviderRegistry(providers: Record<string, P
2281
2284
  */
2282
2285
  declare function cosineSimilarity(vector1: number[], vector2: number[]): number;
2283
2286
 
2287
+ /**
2288
+ * Creates a ReadableStream that emits the provided values with an optional delay between each value.
2289
+ *
2290
+ * @param options - The configuration options
2291
+ * @param options.chunks - Array of values to be emitted by the stream
2292
+ * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.
2293
+ * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.
2294
+ * @returns A ReadableStream that emits the provided values
2295
+ */
2296
+ declare function simulateReadableStream<T>({ chunks, initialDelayInMs, chunkDelayInMs, _internal, }: {
2297
+ chunks: T[];
2298
+ initialDelayInMs?: number | null;
2299
+ chunkDelayInMs?: number | null;
2300
+ _internal?: {
2301
+ delay?: (ms: number | null) => Promise<void>;
2302
+ };
2303
+ }): ReadableStream<T>;
2304
+
2284
2305
  declare const symbol$9: unique symbol;
2285
2306
  declare class InvalidArgumentError extends AISDKError {
2286
2307
  private readonly [symbol$9];
@@ -2566,4 +2587,4 @@ declare namespace llamaindexAdapter {
2566
2587
  };
2567
2588
  }
2568
2589
 
2569
- 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, smoothStream, streamObject, streamText, tool };
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 };
package/dist/index.js CHANGED
@@ -70,6 +70,7 @@ __export(streams_exports, {
70
70
  pipeDataStreamToResponse: () => pipeDataStreamToResponse,
71
71
  processDataStream: () => import_ui_utils14.processDataStream,
72
72
  processTextStream: () => import_ui_utils14.processTextStream,
73
+ simulateReadableStream: () => simulateReadableStream,
73
74
  smoothStream: () => smoothStream,
74
75
  streamObject: () => streamObject,
75
76
  streamText: () => streamText,
@@ -289,7 +290,7 @@ var import_provider_utils = require("@ai-sdk/provider-utils");
289
290
 
290
291
  // util/delay.ts
291
292
  async function delay(delayInMs) {
292
- return delayInMs === void 0 ? Promise.resolve() : new Promise((resolve) => setTimeout(resolve, delayInMs));
293
+ return delayInMs == null ? Promise.resolve() : new Promise((resolve) => setTimeout(resolve, delayInMs));
293
294
  }
294
295
 
295
296
  // util/retry-error.ts
@@ -5347,37 +5348,50 @@ var DefaultStreamTextResult = class {
5347
5348
  };
5348
5349
 
5349
5350
  // core/generate-text/smooth-stream.ts
5351
+ var import_provider17 = require("@ai-sdk/provider");
5352
+ var CHUNKING_REGEXPS = {
5353
+ word: /\s*\S+\s+/m,
5354
+ line: /[^\n]*\n/m
5355
+ };
5350
5356
  function smoothStream({
5351
5357
  delayInMs = 10,
5358
+ chunking = "word",
5352
5359
  _internal: { delay: delay2 = delay } = {}
5353
5360
  } = {}) {
5354
- let buffer = "";
5355
- return () => new TransformStream({
5356
- async transform(chunk, controller) {
5357
- if (chunk.type === "step-finish") {
5358
- if (buffer.length > 0) {
5359
- controller.enqueue({ type: "text-delta", textDelta: buffer });
5360
- buffer = "";
5361
+ const chunkingRegexp = typeof chunking === "string" ? CHUNKING_REGEXPS[chunking] : chunking;
5362
+ if (chunkingRegexp == null) {
5363
+ throw new import_provider17.InvalidArgumentError({
5364
+ argument: "chunking",
5365
+ message: `Chunking must be "word" or "line" or a RegExp. Received: ${chunking}`
5366
+ });
5367
+ }
5368
+ return () => {
5369
+ let buffer = "";
5370
+ return new TransformStream({
5371
+ async transform(chunk, controller) {
5372
+ if (chunk.type === "step-finish") {
5373
+ if (buffer.length > 0) {
5374
+ controller.enqueue({ type: "text-delta", textDelta: buffer });
5375
+ buffer = "";
5376
+ }
5377
+ controller.enqueue(chunk);
5378
+ return;
5361
5379
  }
5362
- controller.enqueue(chunk);
5363
- return;
5364
- }
5365
- if (chunk.type !== "text-delta") {
5366
- controller.enqueue(chunk);
5367
- return;
5368
- }
5369
- buffer += chunk.textDelta;
5370
- const regexp = /\s*\S+\s+/m;
5371
- while (regexp.test(buffer)) {
5372
- const chunk2 = buffer.match(regexp)[0];
5373
- controller.enqueue({ type: "text-delta", textDelta: chunk2 });
5374
- buffer = buffer.slice(chunk2.length);
5375
- if (delayInMs > 0) {
5380
+ if (chunk.type !== "text-delta") {
5381
+ controller.enqueue(chunk);
5382
+ return;
5383
+ }
5384
+ buffer += chunk.textDelta;
5385
+ let match;
5386
+ while ((match = chunkingRegexp.exec(buffer)) != null) {
5387
+ const chunk2 = match[0];
5388
+ controller.enqueue({ type: "text-delta", textDelta: chunk2 });
5389
+ buffer = buffer.slice(chunk2.length);
5376
5390
  await delay2(delayInMs);
5377
5391
  }
5378
5392
  }
5379
- }
5380
- });
5393
+ });
5394
+ };
5381
5395
  }
5382
5396
 
5383
5397
  // core/middleware/wrap-language-model.ts
@@ -5415,7 +5429,7 @@ var experimental_wrapLanguageModel = ({
5415
5429
  };
5416
5430
 
5417
5431
  // core/registry/custom-provider.ts
5418
- var import_provider17 = require("@ai-sdk/provider");
5432
+ var import_provider18 = require("@ai-sdk/provider");
5419
5433
  function experimental_customProvider({
5420
5434
  languageModels,
5421
5435
  textEmbeddingModels,
@@ -5429,7 +5443,7 @@ function experimental_customProvider({
5429
5443
  if (fallbackProvider) {
5430
5444
  return fallbackProvider.languageModel(modelId);
5431
5445
  }
5432
- throw new import_provider17.NoSuchModelError({ modelId, modelType: "languageModel" });
5446
+ throw new import_provider18.NoSuchModelError({ modelId, modelType: "languageModel" });
5433
5447
  },
5434
5448
  textEmbeddingModel(modelId) {
5435
5449
  if (textEmbeddingModels != null && modelId in textEmbeddingModels) {
@@ -5438,18 +5452,18 @@ function experimental_customProvider({
5438
5452
  if (fallbackProvider) {
5439
5453
  return fallbackProvider.textEmbeddingModel(modelId);
5440
5454
  }
5441
- throw new import_provider17.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
5455
+ throw new import_provider18.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
5442
5456
  }
5443
5457
  };
5444
5458
  }
5445
5459
 
5446
5460
  // core/registry/no-such-provider-error.ts
5447
- var import_provider18 = require("@ai-sdk/provider");
5461
+ var import_provider19 = require("@ai-sdk/provider");
5448
5462
  var name13 = "AI_NoSuchProviderError";
5449
5463
  var marker13 = `vercel.ai.error.${name13}`;
5450
5464
  var symbol13 = Symbol.for(marker13);
5451
5465
  var _a13;
5452
- var NoSuchProviderError = class extends import_provider18.NoSuchModelError {
5466
+ var NoSuchProviderError = class extends import_provider19.NoSuchModelError {
5453
5467
  constructor({
5454
5468
  modelId,
5455
5469
  modelType,
@@ -5463,13 +5477,13 @@ var NoSuchProviderError = class extends import_provider18.NoSuchModelError {
5463
5477
  this.availableProviders = availableProviders;
5464
5478
  }
5465
5479
  static isInstance(error) {
5466
- return import_provider18.AISDKError.hasMarker(error, marker13);
5480
+ return import_provider19.AISDKError.hasMarker(error, marker13);
5467
5481
  }
5468
5482
  };
5469
5483
  _a13 = symbol13;
5470
5484
 
5471
5485
  // core/registry/provider-registry.ts
5472
- var import_provider19 = require("@ai-sdk/provider");
5486
+ var import_provider20 = require("@ai-sdk/provider");
5473
5487
  function experimental_createProviderRegistry(providers) {
5474
5488
  const registry = new DefaultProviderRegistry();
5475
5489
  for (const [id, provider] of Object.entries(providers)) {
@@ -5499,7 +5513,7 @@ var DefaultProviderRegistry = class {
5499
5513
  splitId(id, modelType) {
5500
5514
  const index = id.indexOf(":");
5501
5515
  if (index === -1) {
5502
- throw new import_provider19.NoSuchModelError({
5516
+ throw new import_provider20.NoSuchModelError({
5503
5517
  modelId: id,
5504
5518
  modelType,
5505
5519
  message: `Invalid ${modelType} id for registry: ${id} (must be in the format "providerId:modelId")`
@@ -5512,7 +5526,7 @@ var DefaultProviderRegistry = class {
5512
5526
  const [providerId, modelId] = this.splitId(id, "languageModel");
5513
5527
  const model = (_b = (_a14 = this.getProvider(providerId)).languageModel) == null ? void 0 : _b.call(_a14, modelId);
5514
5528
  if (model == null) {
5515
- throw new import_provider19.NoSuchModelError({ modelId: id, modelType: "languageModel" });
5529
+ throw new import_provider20.NoSuchModelError({ modelId: id, modelType: "languageModel" });
5516
5530
  }
5517
5531
  return model;
5518
5532
  }
@@ -5522,7 +5536,7 @@ var DefaultProviderRegistry = class {
5522
5536
  const provider = this.getProvider(providerId);
5523
5537
  const model = (_a14 = provider.textEmbeddingModel) == null ? void 0 : _a14.call(provider, modelId);
5524
5538
  if (model == null) {
5525
- throw new import_provider19.NoSuchModelError({
5539
+ throw new import_provider20.NoSuchModelError({
5526
5540
  modelId: id,
5527
5541
  modelType: "textEmbeddingModel"
5528
5542
  });
@@ -5561,6 +5575,28 @@ function magnitude(vector) {
5561
5575
  return Math.sqrt(dotProduct(vector, vector));
5562
5576
  }
5563
5577
 
5578
+ // core/util/simulate-readable-stream.ts
5579
+ function simulateReadableStream({
5580
+ chunks,
5581
+ initialDelayInMs = 0,
5582
+ chunkDelayInMs = 0,
5583
+ _internal
5584
+ }) {
5585
+ var _a14;
5586
+ const delay2 = (_a14 = _internal == null ? void 0 : _internal.delay) != null ? _a14 : delay;
5587
+ let index = 0;
5588
+ return new ReadableStream({
5589
+ async pull(controller) {
5590
+ if (index < chunks.length) {
5591
+ await delay2(index === 0 ? initialDelayInMs : chunkDelayInMs);
5592
+ controller.enqueue(chunks[index++]);
5593
+ } else {
5594
+ controller.close();
5595
+ }
5596
+ }
5597
+ });
5598
+ }
5599
+
5564
5600
  // streams/assistant-response.ts
5565
5601
  var import_ui_utils10 = require("@ai-sdk/ui-utils");
5566
5602
  function AssistantResponse({ threadId, messageId }, process2) {
@@ -5945,6 +5981,7 @@ var StreamData = class {
5945
5981
  pipeDataStreamToResponse,
5946
5982
  processDataStream,
5947
5983
  processTextStream,
5984
+ simulateReadableStream,
5948
5985
  smoothStream,
5949
5986
  streamObject,
5950
5987
  streamText,