ai 4.0.14 → 4.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # ai
2
2
 
3
+ ## 4.0.15
4
+
5
+ ### Patch Changes
6
+
7
+ - cc16a83: feat (ai/core): add smoothStream helper
8
+ - cc16a83: feat (ai/core): add experimental transform option to streamText
9
+
3
10
  ## 4.0.14
4
11
 
5
12
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -2037,7 +2037,7 @@ If set and supported by the model, calls will generate deterministic results.
2037
2037
  @return
2038
2038
  A result object for accessing different stream types and additional information.
2039
2039
  */
2040
- declare function streamText<TOOLS extends Record<string, CoreTool>>({ model, tools, toolChoice, system, prompt, messages, maxRetries, abortSignal, headers, maxSteps, experimental_continueSteps: continueSteps, experimental_telemetry: telemetry, experimental_providerMetadata: providerMetadata, experimental_toolCallStreaming: toolCallStreaming, experimental_activeTools: activeTools, experimental_repairToolCall: repairToolCall, onChunk, onFinish, onStepFinish, _internal: { now, generateId, currentDate, }, ...settings }: CallSettings & Prompt & {
2040
+ declare function streamText<TOOLS extends Record<string, CoreTool>>({ model, tools, toolChoice, system, prompt, messages, maxRetries, abortSignal, headers, maxSteps, experimental_continueSteps: continueSteps, experimental_telemetry: telemetry, experimental_providerMetadata: providerMetadata, experimental_toolCallStreaming: toolCallStreaming, experimental_activeTools: activeTools, experimental_repairToolCall: repairToolCall, experimental_transform: transform, onChunk, onFinish, onStepFinish, _internal: { now, generateId, currentDate, }, ...settings }: CallSettings & Prompt & {
2041
2041
  /**
2042
2042
  The language model to use.
2043
2043
  */
@@ -2088,6 +2088,10 @@ Enable streaming of tool call deltas as they are generated. Disabled by default.
2088
2088
  */
2089
2089
  experimental_toolCallStreaming?: boolean;
2090
2090
  /**
2091
+ Optional transformation that is applied to the stream.
2092
+ */
2093
+ experimental_transform?: TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2094
+ /**
2091
2095
  Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.
2092
2096
  */
2093
2097
  onChunk?: (event: {
@@ -2121,6 +2125,16 @@ Details for all steps.
2121
2125
  };
2122
2126
  }): StreamTextResult<TOOLS>;
2123
2127
 
2128
+ declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, _internal: { delay }, }?: {
2129
+ delayInMs?: number;
2130
+ /**
2131
+ * Internal. For test use only. May change without notice.
2132
+ */
2133
+ _internal?: {
2134
+ delay?: (delayInMs: number) => Promise<void>;
2135
+ };
2136
+ }): TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2137
+
2124
2138
  /**
2125
2139
  * Experimental middleware for LanguageModelV1.
2126
2140
  * This type defines the structure for middleware that can be used to modify
@@ -2485,4 +2499,4 @@ declare namespace llamaindexAdapter {
2485
2499
  };
2486
2500
  }
2487
2501
 
2488
- 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, 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, streamObject, streamText, tool };
2502
+ 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, 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 };
package/dist/index.d.ts CHANGED
@@ -2037,7 +2037,7 @@ If set and supported by the model, calls will generate deterministic results.
2037
2037
  @return
2038
2038
  A result object for accessing different stream types and additional information.
2039
2039
  */
2040
- declare function streamText<TOOLS extends Record<string, CoreTool>>({ model, tools, toolChoice, system, prompt, messages, maxRetries, abortSignal, headers, maxSteps, experimental_continueSteps: continueSteps, experimental_telemetry: telemetry, experimental_providerMetadata: providerMetadata, experimental_toolCallStreaming: toolCallStreaming, experimental_activeTools: activeTools, experimental_repairToolCall: repairToolCall, onChunk, onFinish, onStepFinish, _internal: { now, generateId, currentDate, }, ...settings }: CallSettings & Prompt & {
2040
+ declare function streamText<TOOLS extends Record<string, CoreTool>>({ model, tools, toolChoice, system, prompt, messages, maxRetries, abortSignal, headers, maxSteps, experimental_continueSteps: continueSteps, experimental_telemetry: telemetry, experimental_providerMetadata: providerMetadata, experimental_toolCallStreaming: toolCallStreaming, experimental_activeTools: activeTools, experimental_repairToolCall: repairToolCall, experimental_transform: transform, onChunk, onFinish, onStepFinish, _internal: { now, generateId, currentDate, }, ...settings }: CallSettings & Prompt & {
2041
2041
  /**
2042
2042
  The language model to use.
2043
2043
  */
@@ -2088,6 +2088,10 @@ Enable streaming of tool call deltas as they are generated. Disabled by default.
2088
2088
  */
2089
2089
  experimental_toolCallStreaming?: boolean;
2090
2090
  /**
2091
+ Optional transformation that is applied to the stream.
2092
+ */
2093
+ experimental_transform?: TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2094
+ /**
2091
2095
  Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.
2092
2096
  */
2093
2097
  onChunk?: (event: {
@@ -2121,6 +2125,16 @@ Details for all steps.
2121
2125
  };
2122
2126
  }): StreamTextResult<TOOLS>;
2123
2127
 
2128
+ declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInMs, _internal: { delay }, }?: {
2129
+ delayInMs?: number;
2130
+ /**
2131
+ * Internal. For test use only. May change without notice.
2132
+ */
2133
+ _internal?: {
2134
+ delay?: (delayInMs: number) => Promise<void>;
2135
+ };
2136
+ }): TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2137
+
2124
2138
  /**
2125
2139
  * Experimental middleware for LanguageModelV1.
2126
2140
  * This type defines the structure for middleware that can be used to modify
@@ -2485,4 +2499,4 @@ declare namespace llamaindexAdapter {
2485
2499
  };
2486
2500
  }
2487
2501
 
2488
- 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, 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, streamObject, streamText, tool };
2502
+ 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, 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 };
package/dist/index.js CHANGED
@@ -69,6 +69,7 @@ __export(streams_exports, {
69
69
  pipeDataStreamToResponse: () => pipeDataStreamToResponse,
70
70
  processDataStream: () => import_ui_utils14.processDataStream,
71
71
  processTextStream: () => import_ui_utils14.processTextStream,
72
+ smoothStream: () => smoothStream,
72
73
  streamObject: () => streamObject,
73
74
  streamText: () => streamText,
74
75
  tool: () => tool
@@ -4243,6 +4244,7 @@ function streamText({
4243
4244
  experimental_toolCallStreaming: toolCallStreaming = false,
4244
4245
  experimental_activeTools: activeTools,
4245
4246
  experimental_repairToolCall: repairToolCall,
4247
+ experimental_transform: transform,
4246
4248
  onChunk,
4247
4249
  onFinish,
4248
4250
  onStepFinish,
@@ -4266,6 +4268,7 @@ function streamText({
4266
4268
  tools,
4267
4269
  toolChoice,
4268
4270
  toolCallStreaming,
4271
+ transform,
4269
4272
  activeTools,
4270
4273
  repairToolCall,
4271
4274
  maxSteps,
@@ -4293,6 +4296,7 @@ var DefaultStreamTextResult = class {
4293
4296
  tools,
4294
4297
  toolChoice,
4295
4298
  toolCallStreaming,
4299
+ transform,
4296
4300
  activeTools,
4297
4301
  repairToolCall,
4298
4302
  maxSteps,
@@ -4315,7 +4319,6 @@ var DefaultStreamTextResult = class {
4315
4319
  this.requestPromise = new DelayedPromise();
4316
4320
  this.responsePromise = new DelayedPromise();
4317
4321
  this.stepsPromise = new DelayedPromise();
4318
- this.stitchableStream = createStitchableStream();
4319
4322
  if (maxSteps < 1) {
4320
4323
  throw new InvalidArgumentError({
4321
4324
  parameter: "maxSteps",
@@ -4323,6 +4326,10 @@ var DefaultStreamTextResult = class {
4323
4326
  message: "maxSteps must be at least 1"
4324
4327
  });
4325
4328
  }
4329
+ const stitchableStream = createStitchableStream();
4330
+ this.addStream = stitchableStream.addStream;
4331
+ this.closeStream = stitchableStream.close;
4332
+ this.baseStream = transform ? stitchableStream.stream.pipeThrough(transform) : stitchableStream.stream;
4326
4333
  const { maxRetries, retry } = prepareRetries({
4327
4334
  maxRetries: maxRetriesArg
4328
4335
  });
@@ -4488,7 +4495,7 @@ var DefaultStreamTextResult = class {
4488
4495
  hasWhitespaceSuffix = chunk.textDelta.trimEnd() !== chunk.textDelta;
4489
4496
  await (onChunk == null ? void 0 : onChunk({ chunk }));
4490
4497
  }
4491
- self.stitchableStream.addStream(
4498
+ self.addStream(
4492
4499
  transformedStream.pipeThrough(
4493
4500
  new TransformStream({
4494
4501
  async transform(chunk, controller) {
@@ -4716,7 +4723,7 @@ var DefaultStreamTextResult = class {
4716
4723
  ...stepResponse
4717
4724
  }
4718
4725
  });
4719
- self.stitchableStream.close();
4726
+ self.closeStream();
4720
4727
  rootSpan.setAttributes(
4721
4728
  selectTelemetryAttributes({
4722
4729
  telemetry,
@@ -4790,7 +4797,7 @@ var DefaultStreamTextResult = class {
4790
4797
  });
4791
4798
  }
4792
4799
  }).catch((error) => {
4793
- self.stitchableStream.addStream(
4800
+ self.addStream(
4794
4801
  new ReadableStream({
4795
4802
  start(controller) {
4796
4803
  controller.enqueue({ type: "error", error });
@@ -4798,7 +4805,7 @@ var DefaultStreamTextResult = class {
4798
4805
  }
4799
4806
  })
4800
4807
  );
4801
- self.stitchableStream.close();
4808
+ self.closeStream();
4802
4809
  });
4803
4810
  }
4804
4811
  get warnings() {
@@ -4840,8 +4847,8 @@ var DefaultStreamTextResult = class {
4840
4847
  However, the LLM results are expected to be small enough to not cause issues.
4841
4848
  */
4842
4849
  teeStream() {
4843
- const [stream1, stream2] = this.stitchableStream.stream.tee();
4844
- this.stitchableStream.stream = stream2;
4850
+ const [stream1, stream2] = this.baseStream.tee();
4851
+ this.baseStream = stream2;
4845
4852
  return stream1;
4846
4853
  }
4847
4854
  get textStream() {
@@ -5037,6 +5044,40 @@ var DefaultStreamTextResult = class {
5037
5044
  }
5038
5045
  };
5039
5046
 
5047
+ // core/generate-text/smooth-stream.ts
5048
+ function smoothStream({
5049
+ delayInMs = 40,
5050
+ _internal: { delay: delay2 = delay } = {}
5051
+ } = {}) {
5052
+ let buffer = "";
5053
+ return new TransformStream({
5054
+ async transform(chunk, controller) {
5055
+ if (chunk.type === "step-finish") {
5056
+ if (buffer.length > 0) {
5057
+ controller.enqueue({ type: "text-delta", textDelta: buffer });
5058
+ buffer = "";
5059
+ }
5060
+ controller.enqueue(chunk);
5061
+ return;
5062
+ }
5063
+ if (chunk.type !== "text-delta") {
5064
+ controller.enqueue(chunk);
5065
+ return;
5066
+ }
5067
+ buffer += chunk.textDelta;
5068
+ while (buffer.match(/\s/)) {
5069
+ const whitespaceIndex = buffer.search(/\s/);
5070
+ const word = buffer.slice(0, whitespaceIndex + 1);
5071
+ controller.enqueue({ type: "text-delta", textDelta: word });
5072
+ buffer = buffer.slice(whitespaceIndex + 1);
5073
+ if (delayInMs > 0) {
5074
+ await delay2(delayInMs);
5075
+ }
5076
+ }
5077
+ }
5078
+ });
5079
+ }
5080
+
5040
5081
  // core/middleware/wrap-language-model.ts
5041
5082
  var experimental_wrapLanguageModel = ({
5042
5083
  model,
@@ -5601,6 +5642,7 @@ var StreamData = class {
5601
5642
  pipeDataStreamToResponse,
5602
5643
  processDataStream,
5603
5644
  processTextStream,
5645
+ smoothStream,
5604
5646
  streamObject,
5605
5647
  streamText,
5606
5648
  tool