ai 4.2.11 → 4.3.1

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.3.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 3d1bd38: feat(smooth-stream): chunking callbacks
8
+
9
+ ## 4.3.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 772a2d7: feat (core): Add finishReason field to NoObjectGeneratedError
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [2c19b9a]
18
+ - @ai-sdk/provider-utils@2.2.4
19
+ - @ai-sdk/react@1.2.6
20
+ - @ai-sdk/ui-utils@1.2.5
21
+
3
22
  ## 4.2.11
4
23
 
5
24
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -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>;
@@ -2805,6 +2806,14 @@ type TextStreamPart<TOOLS extends ToolSet> = {
2805
2806
  error: unknown;
2806
2807
  };
2807
2808
 
2809
+ /**
2810
+ * Detects the first chunk in a buffer.
2811
+ *
2812
+ * @param buffer - The buffer to detect the first chunk in.
2813
+ *
2814
+ * @returns The first detected chunk, or `undefined` if no chunk was detected.
2815
+ */
2816
+ type ChunkDetector = (buffer: string) => string | undefined | null;
2808
2817
  /**
2809
2818
  * Smooths text streaming output.
2810
2819
  *
@@ -2815,7 +2824,7 @@ type TextStreamPart<TOOLS extends ToolSet> = {
2815
2824
  */
2816
2825
  declare function smoothStream<TOOLS extends ToolSet>({ delayInMs, chunking, _internal: { delay }, }?: {
2817
2826
  delayInMs?: number | null;
2818
- chunking?: 'word' | 'line' | RegExp;
2827
+ chunking?: 'word' | 'line' | RegExp | ChunkDetector;
2819
2828
  /**
2820
2829
  * Internal. For test use only. May change without notice.
2821
2830
  */
@@ -4114,12 +4123,17 @@ declare class NoObjectGeneratedError extends AISDKError {
4114
4123
  The usage of the model.
4115
4124
  */
4116
4125
  readonly usage: LanguageModelUsage | undefined;
4117
- constructor({ message, cause, text, response, usage, }: {
4126
+ /**
4127
+ Reason why the model finished generating a response.
4128
+ */
4129
+ readonly finishReason: FinishReason | undefined;
4130
+ constructor({ message, cause, text, response, usage, finishReason, }: {
4118
4131
  message?: string;
4119
4132
  cause?: Error;
4120
4133
  text?: string;
4121
4134
  response: LanguageModelResponseMetadata;
4122
4135
  usage: LanguageModelUsage;
4136
+ finishReason: FinishReason;
4123
4137
  });
4124
4138
  static isInstance(error: unknown): error is NoObjectGeneratedError;
4125
4139
  }
@@ -4376,4 +4390,4 @@ declare namespace llamaindexAdapter {
4376
4390
  };
4377
4391
  }
4378
4392
 
4379
- export { AssistantContent, AssistantResponse, 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 };
4393
+ export { AssistantContent, AssistantResponse, 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, 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 };
package/dist/index.d.ts CHANGED
@@ -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>;
@@ -2805,6 +2806,14 @@ type TextStreamPart<TOOLS extends ToolSet> = {
2805
2806
  error: unknown;
2806
2807
  };
2807
2808
 
2809
+ /**
2810
+ * Detects the first chunk in a buffer.
2811
+ *
2812
+ * @param buffer - The buffer to detect the first chunk in.
2813
+ *
2814
+ * @returns The first detected chunk, or `undefined` if no chunk was detected.
2815
+ */
2816
+ type ChunkDetector = (buffer: string) => string | undefined | null;
2808
2817
  /**
2809
2818
  * Smooths text streaming output.
2810
2819
  *
@@ -2815,7 +2824,7 @@ type TextStreamPart<TOOLS extends ToolSet> = {
2815
2824
  */
2816
2825
  declare function smoothStream<TOOLS extends ToolSet>({ delayInMs, chunking, _internal: { delay }, }?: {
2817
2826
  delayInMs?: number | null;
2818
- chunking?: 'word' | 'line' | RegExp;
2827
+ chunking?: 'word' | 'line' | RegExp | ChunkDetector;
2819
2828
  /**
2820
2829
  * Internal. For test use only. May change without notice.
2821
2830
  */
@@ -4114,12 +4123,17 @@ declare class NoObjectGeneratedError extends AISDKError {
4114
4123
  The usage of the model.
4115
4124
  */
4116
4125
  readonly usage: LanguageModelUsage | undefined;
4117
- constructor({ message, cause, text, response, usage, }: {
4126
+ /**
4127
+ Reason why the model finished generating a response.
4128
+ */
4129
+ readonly finishReason: FinishReason | undefined;
4130
+ constructor({ message, cause, text, response, usage, finishReason, }: {
4118
4131
  message?: string;
4119
4132
  cause?: Error;
4120
4133
  text?: string;
4121
4134
  response: LanguageModelResponseMetadata;
4122
4135
  usage: LanguageModelUsage;
4136
+ finishReason: FinishReason;
4123
4137
  });
4124
4138
  static isInstance(error: unknown): error is NoObjectGeneratedError;
4125
4139
  }
@@ -4376,4 +4390,4 @@ declare namespace llamaindexAdapter {
4376
4390
  };
4377
4391
  }
4378
4392
 
4379
- export { AssistantContent, AssistantResponse, 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 };
4393
+ export { AssistantContent, AssistantResponse, 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, 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 };
package/dist/index.js CHANGED
@@ -1115,13 +1115,15 @@ var NoObjectGeneratedError = class extends import_provider5.AISDKError {
1115
1115
  cause,
1116
1116
  text: text2,
1117
1117
  response,
1118
- usage
1118
+ usage,
1119
+ finishReason
1119
1120
  }) {
1120
1121
  super({ name: name4, message, cause });
1121
1122
  this[_a4] = true;
1122
1123
  this.text = text2;
1123
1124
  this.response = response;
1124
1125
  this.usage = usage;
1126
+ this.finishReason = finishReason;
1125
1127
  }
1126
1128
  static isInstance(error) {
1127
1129
  return import_provider5.AISDKError.hasMarker(error, marker4);
@@ -2283,7 +2285,8 @@ var noSchemaOutputStrategy = {
2283
2285
  message: "No object generated: response did not match schema.",
2284
2286
  text: context.text,
2285
2287
  response: context.response,
2286
- usage: context.usage
2288
+ usage: context.usage,
2289
+ finishReason: context.finishReason
2287
2290
  })
2288
2291
  } : { success: true, value };
2289
2292
  },
@@ -2780,7 +2783,8 @@ async function generateObject({
2780
2783
  throw new NoObjectGeneratedError({
2781
2784
  message: "No object generated: the model did not return a response.",
2782
2785
  response: responseData,
2783
- usage: calculateLanguageModelUsage(result2.usage)
2786
+ usage: calculateLanguageModelUsage(result2.usage),
2787
+ finishReason: result2.finishReason
2784
2788
  });
2785
2789
  }
2786
2790
  span2.setAttributes(
@@ -2889,7 +2893,8 @@ async function generateObject({
2889
2893
  throw new NoObjectGeneratedError({
2890
2894
  message: "No object generated: the tool was not called.",
2891
2895
  response: responseData,
2892
- usage: calculateLanguageModelUsage(result2.usage)
2896
+ usage: calculateLanguageModelUsage(result2.usage),
2897
+ finishReason: result2.finishReason
2893
2898
  });
2894
2899
  }
2895
2900
  span2.setAttributes(
@@ -2945,7 +2950,8 @@ async function generateObject({
2945
2950
  cause: parseResult.error,
2946
2951
  text: result2,
2947
2952
  response,
2948
- usage: calculateLanguageModelUsage(usage)
2953
+ usage: calculateLanguageModelUsage(usage),
2954
+ finishReason
2949
2955
  });
2950
2956
  }
2951
2957
  const validationResult = outputStrategy.validateFinalResult(
@@ -2962,7 +2968,8 @@ async function generateObject({
2962
2968
  cause: validationResult.error,
2963
2969
  text: result2,
2964
2970
  response,
2965
- usage: calculateLanguageModelUsage(usage)
2971
+ usage: calculateLanguageModelUsage(usage),
2972
+ finishReason
2966
2973
  });
2967
2974
  }
2968
2975
  return validationResult.value;
@@ -3567,7 +3574,8 @@ var DefaultStreamObjectResult = class {
3567
3574
  cause: validationResult.error,
3568
3575
  text: accumulatedText,
3569
3576
  response,
3570
- usage
3577
+ usage,
3578
+ finishReason
3571
3579
  });
3572
3580
  self.objectPromise.reject(error);
3573
3581
  }
@@ -4395,7 +4403,11 @@ async function generateText({
4395
4403
  }
4396
4404
  return output.parseOutput(
4397
4405
  { text: text2 },
4398
- { response: currentModelResponse.response, usage }
4406
+ {
4407
+ response: currentModelResponse.response,
4408
+ usage,
4409
+ finishReason: currentModelResponse.finishReason
4410
+ }
4399
4411
  );
4400
4412
  },
4401
4413
  toolCalls: currentToolCalls,
@@ -4640,7 +4652,8 @@ var object = ({
4640
4652
  cause: parseResult.error,
4641
4653
  text: text2,
4642
4654
  response: context.response,
4643
- usage: context.usage
4655
+ usage: context.usage,
4656
+ finishReason: context.finishReason
4644
4657
  });
4645
4658
  }
4646
4659
  const validationResult = (0, import_provider_utils10.safeValidateTypes)({
@@ -4653,7 +4666,8 @@ var object = ({
4653
4666
  cause: validationResult.error,
4654
4667
  text: text2,
4655
4668
  response: context.response,
4656
- usage: context.usage
4669
+ usage: context.usage,
4670
+ finishReason: context.finishReason
4657
4671
  });
4658
4672
  }
4659
4673
  return validationResult.value;
@@ -4662,23 +4676,49 @@ var object = ({
4662
4676
  };
4663
4677
 
4664
4678
  // core/generate-text/smooth-stream.ts
4665
- var import_provider21 = require("@ai-sdk/provider");
4666
4679
  var import_provider_utils11 = require("@ai-sdk/provider-utils");
4680
+ var import_provider21 = require("@ai-sdk/provider");
4667
4681
  var CHUNKING_REGEXPS = {
4668
- word: /\s*\S+\s+/m,
4669
- line: /[^\n]*\n/m
4682
+ word: /\S+\s+/m,
4683
+ line: /\n+/m
4670
4684
  };
4671
4685
  function smoothStream({
4672
4686
  delayInMs = 10,
4673
4687
  chunking = "word",
4674
4688
  _internal: { delay: delay2 = import_provider_utils11.delay } = {}
4675
4689
  } = {}) {
4676
- const chunkingRegexp = typeof chunking === "string" ? CHUNKING_REGEXPS[chunking] : chunking;
4677
- if (chunkingRegexp == null) {
4678
- throw new import_provider21.InvalidArgumentError({
4679
- argument: "chunking",
4680
- message: `Chunking must be "word" or "line" or a RegExp. Received: ${chunking}`
4681
- });
4690
+ let detectChunk;
4691
+ if (typeof chunking === "function") {
4692
+ detectChunk = (buffer) => {
4693
+ const match = chunking(buffer);
4694
+ if (match == null) {
4695
+ return null;
4696
+ }
4697
+ if (!match.length) {
4698
+ throw new Error(`Chunking function must return a non-empty string.`);
4699
+ }
4700
+ if (!buffer.startsWith(match)) {
4701
+ throw new Error(
4702
+ `Chunking function must return a match that is a prefix of the buffer. Received: "${match}" expected to start with "${buffer}"`
4703
+ );
4704
+ }
4705
+ return match;
4706
+ };
4707
+ } else {
4708
+ const chunkingRegex = typeof chunking === "string" ? CHUNKING_REGEXPS[chunking] : chunking;
4709
+ if (chunkingRegex == null) {
4710
+ throw new import_provider21.InvalidArgumentError({
4711
+ argument: "chunking",
4712
+ message: `Chunking must be "word" or "line" or a RegExp. Received: ${chunking}`
4713
+ });
4714
+ }
4715
+ detectChunk = (buffer) => {
4716
+ const match = chunkingRegex.exec(buffer);
4717
+ if (!match) {
4718
+ return null;
4719
+ }
4720
+ return buffer.slice(0, match.index) + (match == null ? void 0 : match[0]);
4721
+ };
4682
4722
  }
4683
4723
  return () => {
4684
4724
  let buffer = "";
@@ -4694,10 +4734,9 @@ function smoothStream({
4694
4734
  }
4695
4735
  buffer += chunk.textDelta;
4696
4736
  let match;
4697
- while ((match = chunkingRegexp.exec(buffer)) != null) {
4698
- const chunk2 = match[0];
4699
- controller.enqueue({ type: "text-delta", textDelta: chunk2 });
4700
- buffer = buffer.slice(chunk2.length);
4737
+ while ((match = detectChunk(buffer)) != null) {
4738
+ controller.enqueue({ type: "text-delta", textDelta: match });
4739
+ buffer = buffer.slice(match.length);
4701
4740
  await delay2(delayInMs);
4702
4741
  }
4703
4742
  }