ai 3.3.27 → 3.3.29

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,17 @@
1
1
  # ai
2
2
 
3
+ ## 3.3.29
4
+
5
+ ### Patch Changes
6
+
7
+ - 1e3dfd2: feat (ai/core): enhance pipeToData/TextStreamResponse methods
8
+
9
+ ## 3.3.28
10
+
11
+ ### Patch Changes
12
+
13
+ - db61c53: feat (ai/core): middleware support
14
+
3
15
  ## 3.3.27
4
16
 
5
17
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { Schema, DeepPartial, ToolInvocation, Attachment, JSONValue as JSONValue$1, CreateMessage, FunctionCall as FunctionCall$1, AssistantMessage, DataMessage } from '@ai-sdk/ui-utils';
2
2
  export { AssistantMessage, AssistantStatus, ChatRequest, ChatRequestOptions, CreateMessage, DataMessage, DeepPartial, Function, FunctionCall, FunctionCallHandler, IdGenerator, JSONValue, Message, RequestOptions, Schema, StreamPart, Tool, ToolCall, ToolCallHandler, ToolChoice, ToolInvocation, UseAssistantOptions, formatStreamPart, jsonSchema, parseStreamPart, processDataProtocolResponse, readDataStream } from '@ai-sdk/ui-utils';
3
3
  import { AttributeValue } from '@opentelemetry/api';
4
- import { EmbeddingModelV1, EmbeddingModelV1Embedding, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, JSONValue, NoSuchModelError, AISDKError } from '@ai-sdk/provider';
5
- export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
4
+ import { EmbeddingModelV1, EmbeddingModelV1Embedding, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, JSONValue, LanguageModelV1CallOptions, NoSuchModelError, AISDKError } from '@ai-sdk/provider';
5
+ export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LanguageModelV1, LanguageModelV1CallOptions, LanguageModelV1Prompt, LanguageModelV1StreamPart, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
6
6
  import { z } from 'zod';
7
7
  import { ServerResponse } from 'http';
8
8
  import { ServerResponse as ServerResponse$1 } from 'node:http';
@@ -870,19 +870,16 @@ interface StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM> {
870
870
  writes each text delta as a separate chunk.
871
871
 
872
872
  @param response A Node.js response-like object (ServerResponse).
873
- @param init Optional headers and status code.
873
+ @param init Optional headers, status code, and status text.
874
874
  */
875
- pipeTextStreamToResponse(response: ServerResponse, init?: {
876
- headers?: Record<string, string>;
877
- status?: number;
878
- }): void;
875
+ pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit): void;
879
876
  /**
880
877
  Creates a simple text stream response.
881
878
  The response has a `Content-Type` header set to `text/plain; charset=utf-8`.
882
879
  Each text delta is encoded as UTF-8 and sent as a separate chunk.
883
880
  Non-text-delta events are ignored.
884
881
 
885
- @param init Optional headers and status code.
882
+ @param init Optional headers, status code, and status text.
886
883
  */
887
884
  toTextStreamResponse(init?: ResponseInit): Response;
888
885
  }
@@ -1541,15 +1538,15 @@ interface StreamTextResult<TOOLS extends Record<string, CoreTool>> {
1541
1538
  }): void;
1542
1539
  /**
1543
1540
  Writes data stream output to a Node.js response-like object.
1544
- It sets a `Content-Type` header to `text/plain; charset=utf-8` and
1545
- writes each data stream part as a separate chunk.
1546
1541
 
1547
1542
  @param response A Node.js response-like object (ServerResponse).
1548
- @param init Optional headers and status code.
1543
+ @param options An object with an init property (ResponseInit) and a data property.
1544
+ You can also pass in a ResponseInit directly (deprecated).
1549
1545
  */
1550
- pipeDataStreamToResponse(response: ServerResponse$1, init?: {
1551
- headers?: Record<string, string>;
1552
- status?: number;
1546
+ pipeDataStreamToResponse(response: ServerResponse$1, options?: ResponseInit | {
1547
+ init?: ResponseInit;
1548
+ data?: StreamData;
1549
+ getErrorMessage?: (error: unknown) => string;
1553
1550
  }): void;
1554
1551
  /**
1555
1552
  Writes text delta output to a Node.js response-like object.
@@ -1557,12 +1554,9 @@ interface StreamTextResult<TOOLS extends Record<string, CoreTool>> {
1557
1554
  writes each text delta as a separate chunk.
1558
1555
 
1559
1556
  @param response A Node.js response-like object (ServerResponse).
1560
- @param init Optional headers and status code.
1557
+ @param init Optional headers, status code, and status text.
1561
1558
  */
1562
- pipeTextStreamToResponse(response: ServerResponse$1, init?: {
1563
- headers?: Record<string, string>;
1564
- status?: number;
1565
- }): void;
1559
+ pipeTextStreamToResponse(response: ServerResponse$1, init?: ResponseInit): void;
1566
1560
  /**
1567
1561
  Converts the result to a streamed response object with a stream data part stream.
1568
1562
  It can be used with the `useChat` and `useCompletion` hooks.
@@ -1597,7 +1591,7 @@ interface StreamTextResult<TOOLS extends Record<string, CoreTool>> {
1597
1591
  Each text delta is encoded as UTF-8 and sent as a separate chunk.
1598
1592
  Non-text-delta events are ignored.
1599
1593
 
1600
- @param init Optional headers and status code.
1594
+ @param init Optional headers, status code, and status text.
1601
1595
  */
1602
1596
  toTextStreamResponse(init?: ResponseInit): Response;
1603
1597
  }
@@ -1789,6 +1783,72 @@ Callback that is called when the LLM response and all request tool executions
1789
1783
  */
1790
1784
  declare const experimental_streamText: typeof streamText;
1791
1785
 
1786
+ /**
1787
+ * Experimental middleware for LanguageModelV1.
1788
+ * This type defines the structure for middleware that can be used to modify
1789
+ * the behavior of LanguageModelV1 operations.
1790
+ */
1791
+ type Experimental_LanguageModelV1Middleware = {
1792
+ /**
1793
+ * Transforms the parameters before they are passed to the language model.
1794
+ * @param options - Object containing the type of operation and the parameters.
1795
+ * @param options.type - The type of operation ('generate' or 'stream').
1796
+ * @param options.params - The original parameters for the language model call.
1797
+ * @returns A promise that resolves to the transformed parameters.
1798
+ */
1799
+ transformParams?: (options: {
1800
+ type: 'generate' | 'stream';
1801
+ params: LanguageModelV1CallOptions;
1802
+ }) => PromiseLike<LanguageModelV1CallOptions>;
1803
+ /**
1804
+ * Wraps the generate operation of the language model.
1805
+ * @param options - Object containing the generate function, parameters, and model.
1806
+ * @param options.doGenerate - The original generate function.
1807
+ * @param options.params - The parameters for the generate call. If the
1808
+ * `transformParams` middleware is used, this will be the transformed parameters.
1809
+ * @param options.model - The language model instance.
1810
+ * @returns A promise that resolves to the result of the generate operation.
1811
+ */
1812
+ wrapGenerate?: (options: {
1813
+ doGenerate: () => ReturnType<LanguageModelV1['doGenerate']>;
1814
+ params: LanguageModelV1CallOptions;
1815
+ model: LanguageModelV1;
1816
+ }) => Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
1817
+ /**
1818
+ * Wraps the stream operation of the language model.
1819
+ * @param options - Object containing the stream function, parameters, and model.
1820
+ * @param options.doStream - The original stream function.
1821
+ * @param options.params - The parameters for the stream call. If the
1822
+ * `transformParams` middleware is used, this will be the transformed parameters.
1823
+ * @param options.model - The language model instance.
1824
+ * @returns A promise that resolves to the result of the stream operation.
1825
+ */
1826
+ wrapStream?: (options: {
1827
+ doStream: () => ReturnType<LanguageModelV1['doStream']>;
1828
+ params: LanguageModelV1CallOptions;
1829
+ model: LanguageModelV1;
1830
+ }) => PromiseLike<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
1831
+ };
1832
+
1833
+ /**
1834
+ * Wraps a LanguageModelV1 instance with middleware functionality.
1835
+ * This function allows you to apply middleware to transform parameters,
1836
+ * wrap generate operations, and wrap stream operations of a language model.
1837
+ *
1838
+ * @param options - Configuration options for wrapping the language model.
1839
+ * @param options.model - The original LanguageModelV1 instance to be wrapped.
1840
+ * @param options.middleware - The middleware to be applied to the language model.
1841
+ * @param options.modelId - Optional custom model ID to override the original model's ID.
1842
+ * @param options.providerId - Optional custom provider ID to override the original model's provider.
1843
+ * @returns A new LanguageModelV1 instance with middleware applied.
1844
+ */
1845
+ declare const experimental_wrapLanguageModel: ({ model, middleware: { transformParams, wrapGenerate, wrapStream }, modelId, providerId, }: {
1846
+ model: LanguageModelV1;
1847
+ middleware: Experimental_LanguageModelV1Middleware;
1848
+ modelId?: string;
1849
+ providerId?: string;
1850
+ }) => LanguageModelV1;
1851
+
1792
1852
  /**
1793
1853
  * Creates a custom provider with specified language models, text embedding models, and an optional fallback provider.
1794
1854
  *
@@ -2872,6 +2932,8 @@ declare function ReplicateStream(res: Prediction, cb?: AIStreamCallbacksAndOptio
2872
2932
 
2873
2933
  /**
2874
2934
  * A utility function to stream a ReadableStream to a Node.js response-like object.
2935
+ *
2936
+ * @deprecated Use `pipeDataStreamToResponse` (part of `StreamTextResult`) instead.
2875
2937
  */
2876
2938
  declare function streamToResponse(res: ReadableStream, response: ServerResponse$1, init?: {
2877
2939
  headers?: Record<string, string>;
@@ -2901,4 +2963,4 @@ declare const generateId: () => string;
2901
2963
  */
2902
2964
  declare const nanoid: () => string;
2903
2965
 
2904
- export { AIStream, AIStreamCallbacksAndOptions, AIStreamParser, AIStreamParserOptions, AWSBedrockAnthropicMessagesStream, AWSBedrockAnthropicStream, AWSBedrockCohereStream, AWSBedrockLlama2Stream, AWSBedrockStream, AnthropicStream, AssistantContent, AssistantResponse, CallWarning, CohereStream, CompletionTokenUsage, CompletionUsage, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolChoice, CoreToolMessage, CoreUserMessage, DataContent, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, EmbeddingTokenUsage, ExperimentalAssistantMessage, ExperimentalMessage, ExperimentalTool, ExperimentalToolMessage, ExperimentalUserMessage, FinishReason, FunctionCallPayload, GenerateObjectResult, GenerateTextResult, GoogleGenerativeAIStream, HuggingFaceStream, ImagePart, InkeepAIStreamCallbacksAndOptions, InkeepChatResultCallbacks, InkeepOnFinalMetadata, InkeepStream, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LangChainStream, LanguageModel, LanguageModelResponseMetadata, LanguageModelResponseMetadataWithHeaders, LanguageModelUsage, LogProbs, MessageConversionError, MistralStream, NoObjectGeneratedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, OpenAIStream, OpenAIStreamCallbacks, Provider, ProviderMetadata, ReplicateStream, RetryError, StreamData, StreamObjectResult, StreamTextResult, StreamingTextResponse, TextPart$1 as TextPart, TextStreamPart, TokenUsage, ToolCallPart, ToolCallPayload, ToolContent, ToolResultPart, UserContent, convertToCoreMessages, cosineSimilarity, createCallbacksTransformer, createEventStreamTransformer, createStreamDataTransformer, embed, embedMany, experimental_AssistantResponse, experimental_ModelRegistry, experimental_Provider, experimental_ProviderRegistry, experimental_StreamData, experimental_createModelRegistry, experimental_createProviderRegistry, experimental_customProvider, experimental_generateObject, experimental_generateText, experimental_streamObject, experimental_streamText, generateId, generateObject, generateText, nanoid, readableFromAsyncIterable, streamObject, streamText, streamToResponse, tool, trimStartOfStreamHelper };
2966
+ export { AIStream, AIStreamCallbacksAndOptions, AIStreamParser, AIStreamParserOptions, AWSBedrockAnthropicMessagesStream, AWSBedrockAnthropicStream, AWSBedrockCohereStream, AWSBedrockLlama2Stream, AWSBedrockStream, AnthropicStream, AssistantContent, AssistantResponse, CallWarning, CohereStream, CompletionTokenUsage, CompletionUsage, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolChoice, CoreToolMessage, CoreUserMessage, DataContent, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, EmbeddingTokenUsage, ExperimentalAssistantMessage, ExperimentalMessage, ExperimentalTool, ExperimentalToolMessage, ExperimentalUserMessage, Experimental_LanguageModelV1Middleware, FinishReason, FunctionCallPayload, GenerateObjectResult, GenerateTextResult, GoogleGenerativeAIStream, HuggingFaceStream, ImagePart, InkeepAIStreamCallbacksAndOptions, InkeepChatResultCallbacks, InkeepOnFinalMetadata, InkeepStream, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LangChainStream, LanguageModel, LanguageModelResponseMetadata, LanguageModelResponseMetadataWithHeaders, LanguageModelUsage, LogProbs, MessageConversionError, MistralStream, NoObjectGeneratedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, OpenAIStream, OpenAIStreamCallbacks, Provider, ProviderMetadata, ReplicateStream, RetryError, StreamData, StreamObjectResult, StreamTextResult, StreamingTextResponse, TextPart$1 as TextPart, TextStreamPart, TokenUsage, ToolCallPart, ToolCallPayload, ToolContent, ToolResultPart, UserContent, convertToCoreMessages, cosineSimilarity, createCallbacksTransformer, createEventStreamTransformer, createStreamDataTransformer, embed, embedMany, experimental_AssistantResponse, experimental_ModelRegistry, experimental_Provider, experimental_ProviderRegistry, experimental_StreamData, experimental_createModelRegistry, experimental_createProviderRegistry, experimental_customProvider, experimental_generateObject, experimental_generateText, experimental_streamObject, experimental_streamText, experimental_wrapLanguageModel, generateId, generateObject, generateText, nanoid, readableFromAsyncIterable, streamObject, streamText, streamToResponse, tool, trimStartOfStreamHelper };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { Schema, DeepPartial, ToolInvocation, Attachment, JSONValue as JSONValue$1, CreateMessage, FunctionCall as FunctionCall$1, AssistantMessage, DataMessage } from '@ai-sdk/ui-utils';
2
2
  export { AssistantMessage, AssistantStatus, ChatRequest, ChatRequestOptions, CreateMessage, DataMessage, DeepPartial, Function, FunctionCall, FunctionCallHandler, IdGenerator, JSONValue, Message, RequestOptions, Schema, StreamPart, Tool, ToolCall, ToolCallHandler, ToolChoice, ToolInvocation, UseAssistantOptions, formatStreamPart, jsonSchema, parseStreamPart, processDataProtocolResponse, readDataStream } from '@ai-sdk/ui-utils';
3
3
  import { AttributeValue } from '@opentelemetry/api';
4
- import { EmbeddingModelV1, EmbeddingModelV1Embedding, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, JSONValue, NoSuchModelError, AISDKError } from '@ai-sdk/provider';
5
- export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
4
+ import { EmbeddingModelV1, EmbeddingModelV1Embedding, LanguageModelV1, LanguageModelV1FinishReason, LanguageModelV1LogProbs, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, JSONValue, LanguageModelV1CallOptions, NoSuchModelError, AISDKError } from '@ai-sdk/provider';
5
+ export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LanguageModelV1, LanguageModelV1CallOptions, LanguageModelV1Prompt, LanguageModelV1StreamPart, LoadAPIKeyError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from '@ai-sdk/provider';
6
6
  import { z } from 'zod';
7
7
  import { ServerResponse } from 'http';
8
8
  import { ServerResponse as ServerResponse$1 } from 'node:http';
@@ -870,19 +870,16 @@ interface StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM> {
870
870
  writes each text delta as a separate chunk.
871
871
 
872
872
  @param response A Node.js response-like object (ServerResponse).
873
- @param init Optional headers and status code.
873
+ @param init Optional headers, status code, and status text.
874
874
  */
875
- pipeTextStreamToResponse(response: ServerResponse, init?: {
876
- headers?: Record<string, string>;
877
- status?: number;
878
- }): void;
875
+ pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit): void;
879
876
  /**
880
877
  Creates a simple text stream response.
881
878
  The response has a `Content-Type` header set to `text/plain; charset=utf-8`.
882
879
  Each text delta is encoded as UTF-8 and sent as a separate chunk.
883
880
  Non-text-delta events are ignored.
884
881
 
885
- @param init Optional headers and status code.
882
+ @param init Optional headers, status code, and status text.
886
883
  */
887
884
  toTextStreamResponse(init?: ResponseInit): Response;
888
885
  }
@@ -1541,15 +1538,15 @@ interface StreamTextResult<TOOLS extends Record<string, CoreTool>> {
1541
1538
  }): void;
1542
1539
  /**
1543
1540
  Writes data stream output to a Node.js response-like object.
1544
- It sets a `Content-Type` header to `text/plain; charset=utf-8` and
1545
- writes each data stream part as a separate chunk.
1546
1541
 
1547
1542
  @param response A Node.js response-like object (ServerResponse).
1548
- @param init Optional headers and status code.
1543
+ @param options An object with an init property (ResponseInit) and a data property.
1544
+ You can also pass in a ResponseInit directly (deprecated).
1549
1545
  */
1550
- pipeDataStreamToResponse(response: ServerResponse$1, init?: {
1551
- headers?: Record<string, string>;
1552
- status?: number;
1546
+ pipeDataStreamToResponse(response: ServerResponse$1, options?: ResponseInit | {
1547
+ init?: ResponseInit;
1548
+ data?: StreamData;
1549
+ getErrorMessage?: (error: unknown) => string;
1553
1550
  }): void;
1554
1551
  /**
1555
1552
  Writes text delta output to a Node.js response-like object.
@@ -1557,12 +1554,9 @@ interface StreamTextResult<TOOLS extends Record<string, CoreTool>> {
1557
1554
  writes each text delta as a separate chunk.
1558
1555
 
1559
1556
  @param response A Node.js response-like object (ServerResponse).
1560
- @param init Optional headers and status code.
1557
+ @param init Optional headers, status code, and status text.
1561
1558
  */
1562
- pipeTextStreamToResponse(response: ServerResponse$1, init?: {
1563
- headers?: Record<string, string>;
1564
- status?: number;
1565
- }): void;
1559
+ pipeTextStreamToResponse(response: ServerResponse$1, init?: ResponseInit): void;
1566
1560
  /**
1567
1561
  Converts the result to a streamed response object with a stream data part stream.
1568
1562
  It can be used with the `useChat` and `useCompletion` hooks.
@@ -1597,7 +1591,7 @@ interface StreamTextResult<TOOLS extends Record<string, CoreTool>> {
1597
1591
  Each text delta is encoded as UTF-8 and sent as a separate chunk.
1598
1592
  Non-text-delta events are ignored.
1599
1593
 
1600
- @param init Optional headers and status code.
1594
+ @param init Optional headers, status code, and status text.
1601
1595
  */
1602
1596
  toTextStreamResponse(init?: ResponseInit): Response;
1603
1597
  }
@@ -1789,6 +1783,72 @@ Callback that is called when the LLM response and all request tool executions
1789
1783
  */
1790
1784
  declare const experimental_streamText: typeof streamText;
1791
1785
 
1786
+ /**
1787
+ * Experimental middleware for LanguageModelV1.
1788
+ * This type defines the structure for middleware that can be used to modify
1789
+ * the behavior of LanguageModelV1 operations.
1790
+ */
1791
+ type Experimental_LanguageModelV1Middleware = {
1792
+ /**
1793
+ * Transforms the parameters before they are passed to the language model.
1794
+ * @param options - Object containing the type of operation and the parameters.
1795
+ * @param options.type - The type of operation ('generate' or 'stream').
1796
+ * @param options.params - The original parameters for the language model call.
1797
+ * @returns A promise that resolves to the transformed parameters.
1798
+ */
1799
+ transformParams?: (options: {
1800
+ type: 'generate' | 'stream';
1801
+ params: LanguageModelV1CallOptions;
1802
+ }) => PromiseLike<LanguageModelV1CallOptions>;
1803
+ /**
1804
+ * Wraps the generate operation of the language model.
1805
+ * @param options - Object containing the generate function, parameters, and model.
1806
+ * @param options.doGenerate - The original generate function.
1807
+ * @param options.params - The parameters for the generate call. If the
1808
+ * `transformParams` middleware is used, this will be the transformed parameters.
1809
+ * @param options.model - The language model instance.
1810
+ * @returns A promise that resolves to the result of the generate operation.
1811
+ */
1812
+ wrapGenerate?: (options: {
1813
+ doGenerate: () => ReturnType<LanguageModelV1['doGenerate']>;
1814
+ params: LanguageModelV1CallOptions;
1815
+ model: LanguageModelV1;
1816
+ }) => Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
1817
+ /**
1818
+ * Wraps the stream operation of the language model.
1819
+ * @param options - Object containing the stream function, parameters, and model.
1820
+ * @param options.doStream - The original stream function.
1821
+ * @param options.params - The parameters for the stream call. If the
1822
+ * `transformParams` middleware is used, this will be the transformed parameters.
1823
+ * @param options.model - The language model instance.
1824
+ * @returns A promise that resolves to the result of the stream operation.
1825
+ */
1826
+ wrapStream?: (options: {
1827
+ doStream: () => ReturnType<LanguageModelV1['doStream']>;
1828
+ params: LanguageModelV1CallOptions;
1829
+ model: LanguageModelV1;
1830
+ }) => PromiseLike<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
1831
+ };
1832
+
1833
+ /**
1834
+ * Wraps a LanguageModelV1 instance with middleware functionality.
1835
+ * This function allows you to apply middleware to transform parameters,
1836
+ * wrap generate operations, and wrap stream operations of a language model.
1837
+ *
1838
+ * @param options - Configuration options for wrapping the language model.
1839
+ * @param options.model - The original LanguageModelV1 instance to be wrapped.
1840
+ * @param options.middleware - The middleware to be applied to the language model.
1841
+ * @param options.modelId - Optional custom model ID to override the original model's ID.
1842
+ * @param options.providerId - Optional custom provider ID to override the original model's provider.
1843
+ * @returns A new LanguageModelV1 instance with middleware applied.
1844
+ */
1845
+ declare const experimental_wrapLanguageModel: ({ model, middleware: { transformParams, wrapGenerate, wrapStream }, modelId, providerId, }: {
1846
+ model: LanguageModelV1;
1847
+ middleware: Experimental_LanguageModelV1Middleware;
1848
+ modelId?: string;
1849
+ providerId?: string;
1850
+ }) => LanguageModelV1;
1851
+
1792
1852
  /**
1793
1853
  * Creates a custom provider with specified language models, text embedding models, and an optional fallback provider.
1794
1854
  *
@@ -2872,6 +2932,8 @@ declare function ReplicateStream(res: Prediction, cb?: AIStreamCallbacksAndOptio
2872
2932
 
2873
2933
  /**
2874
2934
  * A utility function to stream a ReadableStream to a Node.js response-like object.
2935
+ *
2936
+ * @deprecated Use `pipeDataStreamToResponse` (part of `StreamTextResult`) instead.
2875
2937
  */
2876
2938
  declare function streamToResponse(res: ReadableStream, response: ServerResponse$1, init?: {
2877
2939
  headers?: Record<string, string>;
@@ -2901,4 +2963,4 @@ declare const generateId: () => string;
2901
2963
  */
2902
2964
  declare const nanoid: () => string;
2903
2965
 
2904
- export { AIStream, AIStreamCallbacksAndOptions, AIStreamParser, AIStreamParserOptions, AWSBedrockAnthropicMessagesStream, AWSBedrockAnthropicStream, AWSBedrockCohereStream, AWSBedrockLlama2Stream, AWSBedrockStream, AnthropicStream, AssistantContent, AssistantResponse, CallWarning, CohereStream, CompletionTokenUsage, CompletionUsage, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolChoice, CoreToolMessage, CoreUserMessage, DataContent, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, EmbeddingTokenUsage, ExperimentalAssistantMessage, ExperimentalMessage, ExperimentalTool, ExperimentalToolMessage, ExperimentalUserMessage, FinishReason, FunctionCallPayload, GenerateObjectResult, GenerateTextResult, GoogleGenerativeAIStream, HuggingFaceStream, ImagePart, InkeepAIStreamCallbacksAndOptions, InkeepChatResultCallbacks, InkeepOnFinalMetadata, InkeepStream, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LangChainStream, LanguageModel, LanguageModelResponseMetadata, LanguageModelResponseMetadataWithHeaders, LanguageModelUsage, LogProbs, MessageConversionError, MistralStream, NoObjectGeneratedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, OpenAIStream, OpenAIStreamCallbacks, Provider, ProviderMetadata, ReplicateStream, RetryError, StreamData, StreamObjectResult, StreamTextResult, StreamingTextResponse, TextPart$1 as TextPart, TextStreamPart, TokenUsage, ToolCallPart, ToolCallPayload, ToolContent, ToolResultPart, UserContent, convertToCoreMessages, cosineSimilarity, createCallbacksTransformer, createEventStreamTransformer, createStreamDataTransformer, embed, embedMany, experimental_AssistantResponse, experimental_ModelRegistry, experimental_Provider, experimental_ProviderRegistry, experimental_StreamData, experimental_createModelRegistry, experimental_createProviderRegistry, experimental_customProvider, experimental_generateObject, experimental_generateText, experimental_streamObject, experimental_streamText, generateId, generateObject, generateText, nanoid, readableFromAsyncIterable, streamObject, streamText, streamToResponse, tool, trimStartOfStreamHelper };
2966
+ export { AIStream, AIStreamCallbacksAndOptions, AIStreamParser, AIStreamParserOptions, AWSBedrockAnthropicMessagesStream, AWSBedrockAnthropicStream, AWSBedrockCohereStream, AWSBedrockLlama2Stream, AWSBedrockStream, AnthropicStream, AssistantContent, AssistantResponse, CallWarning, CohereStream, CompletionTokenUsage, CompletionUsage, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolChoice, CoreToolMessage, CoreUserMessage, DataContent, DownloadError, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, EmbeddingTokenUsage, ExperimentalAssistantMessage, ExperimentalMessage, ExperimentalTool, ExperimentalToolMessage, ExperimentalUserMessage, Experimental_LanguageModelV1Middleware, FinishReason, FunctionCallPayload, GenerateObjectResult, GenerateTextResult, GoogleGenerativeAIStream, HuggingFaceStream, ImagePart, InkeepAIStreamCallbacksAndOptions, InkeepChatResultCallbacks, InkeepOnFinalMetadata, InkeepStream, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidToolArgumentsError, langchainAdapter as LangChainAdapter, LangChainStream, LanguageModel, LanguageModelResponseMetadata, LanguageModelResponseMetadataWithHeaders, LanguageModelUsage, LogProbs, MessageConversionError, MistralStream, NoObjectGeneratedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, OpenAIStream, OpenAIStreamCallbacks, Provider, ProviderMetadata, ReplicateStream, RetryError, StreamData, StreamObjectResult, StreamTextResult, StreamingTextResponse, TextPart$1 as TextPart, TextStreamPart, TokenUsage, ToolCallPart, ToolCallPayload, ToolContent, ToolResultPart, UserContent, convertToCoreMessages, cosineSimilarity, createCallbacksTransformer, createEventStreamTransformer, createStreamDataTransformer, embed, embedMany, experimental_AssistantResponse, experimental_ModelRegistry, experimental_Provider, experimental_ProviderRegistry, experimental_StreamData, experimental_createModelRegistry, experimental_createProviderRegistry, experimental_customProvider, experimental_generateObject, experimental_generateText, experimental_streamObject, experimental_streamText, experimental_wrapLanguageModel, generateId, generateObject, generateText, nanoid, readableFromAsyncIterable, streamObject, streamText, streamToResponse, tool, trimStartOfStreamHelper };
package/dist/index.js CHANGED
@@ -76,6 +76,7 @@ __export(streams_exports, {
76
76
  experimental_generateText: () => experimental_generateText,
77
77
  experimental_streamObject: () => experimental_streamObject,
78
78
  experimental_streamText: () => experimental_streamText,
79
+ experimental_wrapLanguageModel: () => experimental_wrapLanguageModel,
79
80
  formatStreamPart: () => import_ui_utils10.formatStreamPart,
80
81
  generateId: () => generateId2,
81
82
  generateObject: () => generateObject,
@@ -2151,6 +2152,55 @@ function now() {
2151
2152
 
2152
2153
  // core/generate-object/stream-object.ts
2153
2154
  var import_provider_utils7 = require("@ai-sdk/provider-utils");
2155
+
2156
+ // core/util/prepare-outgoing-http-headers.ts
2157
+ function prepareOutgoingHttpHeaders(init, {
2158
+ contentType,
2159
+ dataStreamVersion
2160
+ }) {
2161
+ const headers = {};
2162
+ if ((init == null ? void 0 : init.headers) != null) {
2163
+ for (const [key, value] of Object.entries(init.headers)) {
2164
+ headers[key] = value;
2165
+ }
2166
+ }
2167
+ if (headers["Content-Type"] == null) {
2168
+ headers["Content-Type"] = contentType;
2169
+ }
2170
+ if (dataStreamVersion !== void 0) {
2171
+ headers["X-Vercel-AI-Data-Stream"] = dataStreamVersion;
2172
+ }
2173
+ return headers;
2174
+ }
2175
+
2176
+ // core/util/write-to-server-response.ts
2177
+ function writeToServerResponse({
2178
+ response,
2179
+ status,
2180
+ statusText,
2181
+ headers,
2182
+ stream
2183
+ }) {
2184
+ response.writeHead(status != null ? status : 200, statusText, headers);
2185
+ const reader = stream.getReader();
2186
+ const read = async () => {
2187
+ try {
2188
+ while (true) {
2189
+ const { done, value } = await reader.read();
2190
+ if (done)
2191
+ break;
2192
+ response.write(value);
2193
+ }
2194
+ } catch (error) {
2195
+ throw error;
2196
+ } finally {
2197
+ response.end();
2198
+ }
2199
+ };
2200
+ read();
2201
+ }
2202
+
2203
+ // core/generate-object/stream-object.ts
2154
2204
  var originalGenerateId2 = (0, import_provider_utils7.createIdGenerator)({ prefix: "aiobj-", length: 24 });
2155
2205
  async function streamObject({
2156
2206
  model,
@@ -2629,27 +2679,15 @@ var DefaultStreamObjectResult = class {
2629
2679
  });
2630
2680
  }
2631
2681
  pipeTextStreamToResponse(response, init) {
2632
- var _a11;
2633
- response.writeHead((_a11 = init == null ? void 0 : init.status) != null ? _a11 : 200, {
2634
- "Content-Type": "text/plain; charset=utf-8",
2635
- ...init == null ? void 0 : init.headers
2682
+ writeToServerResponse({
2683
+ response,
2684
+ status: init == null ? void 0 : init.status,
2685
+ statusText: init == null ? void 0 : init.statusText,
2686
+ headers: prepareOutgoingHttpHeaders(init, {
2687
+ contentType: "text/plain; charset=utf-8"
2688
+ }),
2689
+ stream: this.textStream.pipeThrough(new TextEncoderStream())
2636
2690
  });
2637
- const reader = this.textStream.pipeThrough(new TextEncoderStream()).getReader();
2638
- const read = async () => {
2639
- try {
2640
- while (true) {
2641
- const { done, value } = await reader.read();
2642
- if (done)
2643
- break;
2644
- response.write(value);
2645
- }
2646
- } catch (error) {
2647
- throw error;
2648
- } finally {
2649
- response.end();
2650
- }
2651
- };
2652
- read();
2653
2691
  }
2654
2692
  toTextStreamResponse(init) {
2655
2693
  var _a11;
@@ -4128,51 +4166,35 @@ var DefaultStreamTextResult = class {
4128
4166
  pipeAIStreamToResponse(response, init) {
4129
4167
  return this.pipeDataStreamToResponse(response, init);
4130
4168
  }
4131
- pipeDataStreamToResponse(response, init) {
4132
- var _a11;
4133
- response.writeHead((_a11 = init == null ? void 0 : init.status) != null ? _a11 : 200, {
4134
- "Content-Type": "text/plain; charset=utf-8",
4135
- ...init == null ? void 0 : init.headers
4136
- });
4137
- const reader = this.toDataStream().getReader();
4138
- const read = async () => {
4139
- try {
4140
- while (true) {
4141
- const { done, value } = await reader.read();
4142
- if (done)
4143
- break;
4144
- response.write(value);
4145
- }
4146
- } catch (error) {
4147
- throw error;
4148
- } finally {
4149
- response.end();
4150
- }
4169
+ pipeDataStreamToResponse(response, options) {
4170
+ const init = options == null ? void 0 : "init" in options ? options.init : {
4171
+ headers: "headers" in options ? options.headers : void 0,
4172
+ status: "status" in options ? options.status : void 0,
4173
+ statusText: "statusText" in options ? options.statusText : void 0
4151
4174
  };
4152
- read();
4175
+ const data = options == null ? void 0 : "data" in options ? options.data : void 0;
4176
+ const getErrorMessage4 = options == null ? void 0 : "getErrorMessage" in options ? options.getErrorMessage : void 0;
4177
+ writeToServerResponse({
4178
+ response,
4179
+ status: init == null ? void 0 : init.status,
4180
+ statusText: init == null ? void 0 : init.statusText,
4181
+ headers: prepareOutgoingHttpHeaders(init, {
4182
+ contentType: "text/plain; charset=utf-8",
4183
+ dataStreamVersion: "v1"
4184
+ }),
4185
+ stream: data ? mergeStreams(data.stream, this.toDataStream({ getErrorMessage: getErrorMessage4 })) : this.toDataStream({ getErrorMessage: getErrorMessage4 })
4186
+ });
4153
4187
  }
4154
4188
  pipeTextStreamToResponse(response, init) {
4155
- var _a11;
4156
- response.writeHead((_a11 = init == null ? void 0 : init.status) != null ? _a11 : 200, {
4157
- "Content-Type": "text/plain; charset=utf-8",
4158
- ...init == null ? void 0 : init.headers
4189
+ writeToServerResponse({
4190
+ response,
4191
+ status: init == null ? void 0 : init.status,
4192
+ statusText: init == null ? void 0 : init.statusText,
4193
+ headers: prepareOutgoingHttpHeaders(init, {
4194
+ contentType: "text/plain; charset=utf-8"
4195
+ }),
4196
+ stream: this.textStream.pipeThrough(new TextEncoderStream())
4159
4197
  });
4160
- const reader = this.textStream.pipeThrough(new TextEncoderStream()).getReader();
4161
- const read = async () => {
4162
- try {
4163
- while (true) {
4164
- const { done, value } = await reader.read();
4165
- if (done)
4166
- break;
4167
- response.write(value);
4168
- }
4169
- } catch (error) {
4170
- throw error;
4171
- } finally {
4172
- response.end();
4173
- }
4174
- };
4175
- read();
4176
4198
  }
4177
4199
  toAIStreamResponse(options) {
4178
4200
  return this.toDataStreamResponse(options);
@@ -4208,6 +4230,39 @@ var DefaultStreamTextResult = class {
4208
4230
  };
4209
4231
  var experimental_streamText = streamText;
4210
4232
 
4233
+ // core/middleware/wrap-language-model.ts
4234
+ var experimental_wrapLanguageModel = ({
4235
+ model,
4236
+ middleware: { transformParams, wrapGenerate, wrapStream },
4237
+ modelId,
4238
+ providerId
4239
+ }) => {
4240
+ async function doTransform({
4241
+ params,
4242
+ type
4243
+ }) {
4244
+ return transformParams ? await transformParams({ params, type }) : params;
4245
+ }
4246
+ return {
4247
+ specificationVersion: "v1",
4248
+ provider: providerId != null ? providerId : model.provider,
4249
+ modelId: modelId != null ? modelId : model.modelId,
4250
+ defaultObjectGenerationMode: model.defaultObjectGenerationMode,
4251
+ supportsImageUrls: model.supportsImageUrls,
4252
+ supportsStructuredOutputs: model.supportsStructuredOutputs,
4253
+ async doGenerate(params) {
4254
+ const transformedParams = await doTransform({ params, type: "generate" });
4255
+ const doGenerate = async () => model.doGenerate(transformedParams);
4256
+ return wrapGenerate ? wrapGenerate({ doGenerate, params: transformedParams, model }) : doGenerate();
4257
+ },
4258
+ async doStream(params) {
4259
+ const transformedParams = await doTransform({ params, type: "stream" });
4260
+ const doStream = async () => model.doStream(transformedParams);
4261
+ return wrapStream ? wrapStream({ doStream, params: transformedParams, model }) : doStream();
4262
+ }
4263
+ };
4264
+ };
4265
+
4211
4266
  // core/prompt/attachments-to-parts.ts
4212
4267
  function attachmentsToParts(attachments) {
4213
4268
  var _a11, _b, _c;
@@ -5639,6 +5694,7 @@ var nanoid = import_provider_utils11.generateId;
5639
5694
  experimental_generateText,
5640
5695
  experimental_streamObject,
5641
5696
  experimental_streamText,
5697
+ experimental_wrapLanguageModel,
5642
5698
  formatStreamPart,
5643
5699
  generateId,
5644
5700
  generateObject,