ai 3.1.9 → 3.1.11

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/dist/index.d.mts CHANGED
@@ -102,6 +102,60 @@ declare class EmbedResult<VALUE> {
102
102
  });
103
103
  }
104
104
 
105
+ /**
106
+ Embed several values using an embedding model. The type of the value is defined
107
+ by the embedding model.
108
+
109
+ `embedMany` automatically splits large requests into smaller chunks if the model
110
+ has a limit on how many embeddings can be generated in a single call.
111
+
112
+ @param model - The embedding model to use.
113
+ @param values - The values that should be embedded.
114
+
115
+ @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
116
+ @param abortSignal - An optional abort signal that can be used to cancel the call.
117
+
118
+ @returns A result object that contains the embeddings, the value, and additional information.
119
+ */
120
+ declare function embedMany<VALUE>({ model, values, maxRetries, abortSignal, }: {
121
+ /**
122
+ The embedding model to use.
123
+ */
124
+ model: EmbeddingModel<VALUE>;
125
+ /**
126
+ The values that should be embedded.
127
+ */
128
+ values: Array<VALUE>;
129
+ /**
130
+ Maximum number of retries per embedding model call. Set to 0 to disable retries.
131
+
132
+ @default 2
133
+ */
134
+ maxRetries?: number;
135
+ /**
136
+ Abort signal.
137
+ */
138
+ abortSignal?: AbortSignal;
139
+ }): Promise<EmbedManyResult<VALUE>>;
140
+ /**
141
+ The result of a `embedMany` call.
142
+ It contains the embeddings, the values, and additional information.
143
+ */
144
+ declare class EmbedManyResult<VALUE> {
145
+ /**
146
+ The values that were embedded.
147
+ */
148
+ readonly values: Array<VALUE>;
149
+ /**
150
+ The embeddings. They are in the same order as the values.
151
+ */
152
+ readonly embeddings: Array<Embedding>;
153
+ constructor(options: {
154
+ values: Array<VALUE>;
155
+ embeddings: Array<Embedding>;
156
+ });
157
+ }
158
+
105
159
  type TokenUsage = {
106
160
  promptTokens: number;
107
161
  completionTokens: number;
@@ -2143,12 +2197,9 @@ declare function ReplicateStream(res: Prediction, cb?: AIStreamCallbacksAndOptio
2143
2197
  declare class StreamData {
2144
2198
  private encoder;
2145
2199
  private controller;
2146
- stream: TransformStream<Uint8Array, Uint8Array>;
2147
- private isClosedPromise;
2148
- private isClosedPromiseResolver;
2200
+ stream: ReadableStream<Uint8Array>;
2149
2201
  private isClosed;
2150
- private data;
2151
- private messageAnnotations;
2202
+ private warningTimeout;
2152
2203
  constructor();
2153
2204
  close(): Promise<void>;
2154
2205
  append(value: JSONValue): void;
@@ -2216,4 +2267,4 @@ declare function streamToResponse(res: ReadableStream, response: ServerResponse,
2216
2267
  status?: number;
2217
2268
  }): void;
2218
2269
 
2219
- export { AIStream, AIStreamCallbacksAndOptions, AIStreamParser, AIStreamParserOptions, AWSBedrockAnthropicMessagesStream, AWSBedrockAnthropicStream, AWSBedrockCohereStream, AWSBedrockLlama2Stream, AWSBedrockStream, AnthropicStream, AssistantContent, AssistantMessage, AssistantResponse, AssistantStatus, CallWarning, ChatRequest, ChatRequestOptions, CohereStream, CompletionUsage, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolMessage, CoreUserMessage, CreateMessage, DataContent, DataMessage, DeepPartial, EmbedResult, Embedding, EmbeddingModel, ExperimentalAssistantMessage, ExperimentalMessage, ExperimentalTool, ExperimentalToolMessage, ExperimentalUserMessage, FinishReason, Function, FunctionCall$1 as FunctionCall, FunctionCallHandler, FunctionCallPayload, GenerateObjectResult, GenerateTextResult, GoogleGenerativeAIStream, HuggingFaceStream, IdGenerator, ImagePart, InkeepAIStreamCallbacksAndOptions, InkeepChatResultCallbacks, InkeepOnFinalMetadata, InkeepStream, JSONValue, langchainAdapter as LangChainAdapter, LangChainStream, LanguageModel, LogProbs, Message$1 as Message, MistralStream, ObjectStreamPart, ObjectStreamPartInput, OpenAIStream, OpenAIStreamCallbacks, ReactResponseRow, ReplicateStream, RequestOptions, StreamData, StreamObjectResult, StreamPart, StreamString, StreamTextResult, StreamingTextResponse, TextPart$1 as TextPart, TextStreamPart, Tool, ToolCall, ToolCallHandler, ToolCallPart, ToolCallPayload, ToolChoice, ToolContent, ToolInvocation, ToolResultPart, UseAssistantOptions, UseChatOptions, UseCompletionOptions, UserContent, convertDataContentToBase64String, convertDataContentToUint8Array, convertToCoreMessages, createCallbacksTransformer, createChunkDecoder, createEventStreamTransformer, createStreamDataTransformer, embed, experimental_AssistantResponse, experimental_StreamData, experimental_StreamingReactResponse, experimental_generateObject, experimental_generateText, experimental_streamObject, experimental_streamText, formatStreamPart, generateId, generateObject, generateText, isStreamStringEqualToType, generateId as nanoid, parseStreamPart, readDataStream, readableFromAsyncIterable, streamObject, streamText, streamToResponse, tool, trimStartOfStreamHelper };
2270
+ export { AIStream, AIStreamCallbacksAndOptions, AIStreamParser, AIStreamParserOptions, AWSBedrockAnthropicMessagesStream, AWSBedrockAnthropicStream, AWSBedrockCohereStream, AWSBedrockLlama2Stream, AWSBedrockStream, AnthropicStream, AssistantContent, AssistantMessage, AssistantResponse, AssistantStatus, CallWarning, ChatRequest, ChatRequestOptions, CohereStream, CompletionUsage, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolMessage, CoreUserMessage, CreateMessage, DataContent, DataMessage, DeepPartial, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, ExperimentalAssistantMessage, ExperimentalMessage, ExperimentalTool, ExperimentalToolMessage, ExperimentalUserMessage, FinishReason, Function, FunctionCall$1 as FunctionCall, FunctionCallHandler, FunctionCallPayload, GenerateObjectResult, GenerateTextResult, GoogleGenerativeAIStream, HuggingFaceStream, IdGenerator, ImagePart, InkeepAIStreamCallbacksAndOptions, InkeepChatResultCallbacks, InkeepOnFinalMetadata, InkeepStream, JSONValue, langchainAdapter as LangChainAdapter, LangChainStream, LanguageModel, LogProbs, Message$1 as Message, MistralStream, ObjectStreamPart, ObjectStreamPartInput, OpenAIStream, OpenAIStreamCallbacks, ReactResponseRow, ReplicateStream, RequestOptions, StreamData, StreamObjectResult, StreamPart, StreamString, StreamTextResult, StreamingTextResponse, TextPart$1 as TextPart, TextStreamPart, Tool, ToolCall, ToolCallHandler, ToolCallPart, ToolCallPayload, ToolChoice, ToolContent, ToolInvocation, ToolResultPart, UseAssistantOptions, UseChatOptions, UseCompletionOptions, UserContent, convertDataContentToBase64String, convertDataContentToUint8Array, convertToCoreMessages, createCallbacksTransformer, createChunkDecoder, createEventStreamTransformer, createStreamDataTransformer, embed, embedMany, experimental_AssistantResponse, experimental_StreamData, experimental_StreamingReactResponse, experimental_generateObject, experimental_generateText, experimental_streamObject, experimental_streamText, formatStreamPart, generateId, generateObject, generateText, isStreamStringEqualToType, generateId as nanoid, parseStreamPart, readDataStream, readableFromAsyncIterable, streamObject, streamText, streamToResponse, tool, trimStartOfStreamHelper };
package/dist/index.d.ts CHANGED
@@ -102,6 +102,60 @@ declare class EmbedResult<VALUE> {
102
102
  });
103
103
  }
104
104
 
105
+ /**
106
+ Embed several values using an embedding model. The type of the value is defined
107
+ by the embedding model.
108
+
109
+ `embedMany` automatically splits large requests into smaller chunks if the model
110
+ has a limit on how many embeddings can be generated in a single call.
111
+
112
+ @param model - The embedding model to use.
113
+ @param values - The values that should be embedded.
114
+
115
+ @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
116
+ @param abortSignal - An optional abort signal that can be used to cancel the call.
117
+
118
+ @returns A result object that contains the embeddings, the value, and additional information.
119
+ */
120
+ declare function embedMany<VALUE>({ model, values, maxRetries, abortSignal, }: {
121
+ /**
122
+ The embedding model to use.
123
+ */
124
+ model: EmbeddingModel<VALUE>;
125
+ /**
126
+ The values that should be embedded.
127
+ */
128
+ values: Array<VALUE>;
129
+ /**
130
+ Maximum number of retries per embedding model call. Set to 0 to disable retries.
131
+
132
+ @default 2
133
+ */
134
+ maxRetries?: number;
135
+ /**
136
+ Abort signal.
137
+ */
138
+ abortSignal?: AbortSignal;
139
+ }): Promise<EmbedManyResult<VALUE>>;
140
+ /**
141
+ The result of a `embedMany` call.
142
+ It contains the embeddings, the values, and additional information.
143
+ */
144
+ declare class EmbedManyResult<VALUE> {
145
+ /**
146
+ The values that were embedded.
147
+ */
148
+ readonly values: Array<VALUE>;
149
+ /**
150
+ The embeddings. They are in the same order as the values.
151
+ */
152
+ readonly embeddings: Array<Embedding>;
153
+ constructor(options: {
154
+ values: Array<VALUE>;
155
+ embeddings: Array<Embedding>;
156
+ });
157
+ }
158
+
105
159
  type TokenUsage = {
106
160
  promptTokens: number;
107
161
  completionTokens: number;
@@ -2143,12 +2197,9 @@ declare function ReplicateStream(res: Prediction, cb?: AIStreamCallbacksAndOptio
2143
2197
  declare class StreamData {
2144
2198
  private encoder;
2145
2199
  private controller;
2146
- stream: TransformStream<Uint8Array, Uint8Array>;
2147
- private isClosedPromise;
2148
- private isClosedPromiseResolver;
2200
+ stream: ReadableStream<Uint8Array>;
2149
2201
  private isClosed;
2150
- private data;
2151
- private messageAnnotations;
2202
+ private warningTimeout;
2152
2203
  constructor();
2153
2204
  close(): Promise<void>;
2154
2205
  append(value: JSONValue): void;
@@ -2216,4 +2267,4 @@ declare function streamToResponse(res: ReadableStream, response: ServerResponse,
2216
2267
  status?: number;
2217
2268
  }): void;
2218
2269
 
2219
- export { AIStream, AIStreamCallbacksAndOptions, AIStreamParser, AIStreamParserOptions, AWSBedrockAnthropicMessagesStream, AWSBedrockAnthropicStream, AWSBedrockCohereStream, AWSBedrockLlama2Stream, AWSBedrockStream, AnthropicStream, AssistantContent, AssistantMessage, AssistantResponse, AssistantStatus, CallWarning, ChatRequest, ChatRequestOptions, CohereStream, CompletionUsage, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolMessage, CoreUserMessage, CreateMessage, DataContent, DataMessage, DeepPartial, EmbedResult, Embedding, EmbeddingModel, ExperimentalAssistantMessage, ExperimentalMessage, ExperimentalTool, ExperimentalToolMessage, ExperimentalUserMessage, FinishReason, Function, FunctionCall$1 as FunctionCall, FunctionCallHandler, FunctionCallPayload, GenerateObjectResult, GenerateTextResult, GoogleGenerativeAIStream, HuggingFaceStream, IdGenerator, ImagePart, InkeepAIStreamCallbacksAndOptions, InkeepChatResultCallbacks, InkeepOnFinalMetadata, InkeepStream, JSONValue, langchainAdapter as LangChainAdapter, LangChainStream, LanguageModel, LogProbs, Message$1 as Message, MistralStream, ObjectStreamPart, ObjectStreamPartInput, OpenAIStream, OpenAIStreamCallbacks, ReactResponseRow, ReplicateStream, RequestOptions, StreamData, StreamObjectResult, StreamPart, StreamString, StreamTextResult, StreamingTextResponse, TextPart$1 as TextPart, TextStreamPart, Tool, ToolCall, ToolCallHandler, ToolCallPart, ToolCallPayload, ToolChoice, ToolContent, ToolInvocation, ToolResultPart, UseAssistantOptions, UseChatOptions, UseCompletionOptions, UserContent, convertDataContentToBase64String, convertDataContentToUint8Array, convertToCoreMessages, createCallbacksTransformer, createChunkDecoder, createEventStreamTransformer, createStreamDataTransformer, embed, experimental_AssistantResponse, experimental_StreamData, experimental_StreamingReactResponse, experimental_generateObject, experimental_generateText, experimental_streamObject, experimental_streamText, formatStreamPart, generateId, generateObject, generateText, isStreamStringEqualToType, generateId as nanoid, parseStreamPart, readDataStream, readableFromAsyncIterable, streamObject, streamText, streamToResponse, tool, trimStartOfStreamHelper };
2270
+ export { AIStream, AIStreamCallbacksAndOptions, AIStreamParser, AIStreamParserOptions, AWSBedrockAnthropicMessagesStream, AWSBedrockAnthropicStream, AWSBedrockCohereStream, AWSBedrockLlama2Stream, AWSBedrockStream, AnthropicStream, AssistantContent, AssistantMessage, AssistantResponse, AssistantStatus, CallWarning, ChatRequest, ChatRequestOptions, CohereStream, CompletionUsage, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreTool, CoreToolMessage, CoreUserMessage, CreateMessage, DataContent, DataMessage, DeepPartial, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, ExperimentalAssistantMessage, ExperimentalMessage, ExperimentalTool, ExperimentalToolMessage, ExperimentalUserMessage, FinishReason, Function, FunctionCall$1 as FunctionCall, FunctionCallHandler, FunctionCallPayload, GenerateObjectResult, GenerateTextResult, GoogleGenerativeAIStream, HuggingFaceStream, IdGenerator, ImagePart, InkeepAIStreamCallbacksAndOptions, InkeepChatResultCallbacks, InkeepOnFinalMetadata, InkeepStream, JSONValue, langchainAdapter as LangChainAdapter, LangChainStream, LanguageModel, LogProbs, Message$1 as Message, MistralStream, ObjectStreamPart, ObjectStreamPartInput, OpenAIStream, OpenAIStreamCallbacks, ReactResponseRow, ReplicateStream, RequestOptions, StreamData, StreamObjectResult, StreamPart, StreamString, StreamTextResult, StreamingTextResponse, TextPart$1 as TextPart, TextStreamPart, Tool, ToolCall, ToolCallHandler, ToolCallPart, ToolCallPayload, ToolChoice, ToolContent, ToolInvocation, ToolResultPart, UseAssistantOptions, UseChatOptions, UseCompletionOptions, UserContent, convertDataContentToBase64String, convertDataContentToUint8Array, convertToCoreMessages, createCallbacksTransformer, createChunkDecoder, createEventStreamTransformer, createStreamDataTransformer, embed, embedMany, experimental_AssistantResponse, experimental_StreamData, experimental_StreamingReactResponse, experimental_generateObject, experimental_generateText, experimental_streamObject, experimental_streamText, formatStreamPart, generateId, generateObject, generateText, isStreamStringEqualToType, generateId as nanoid, parseStreamPart, readDataStream, readableFromAsyncIterable, streamObject, streamText, streamToResponse, tool, trimStartOfStreamHelper };
package/dist/index.js CHANGED
@@ -40,6 +40,7 @@ __export(streams_exports, {
40
40
  AnthropicStream: () => AnthropicStream,
41
41
  AssistantResponse: () => AssistantResponse,
42
42
  CohereStream: () => CohereStream,
43
+ EmbedManyResult: () => EmbedManyResult,
43
44
  EmbedResult: () => EmbedResult,
44
45
  EmptyResponseBodyError: () => import_provider8.EmptyResponseBodyError,
45
46
  GenerateObjectResult: () => GenerateObjectResult,
@@ -78,6 +79,7 @@ __export(streams_exports, {
78
79
  createEventStreamTransformer: () => createEventStreamTransformer,
79
80
  createStreamDataTransformer: () => createStreamDataTransformer,
80
81
  embed: () => embed,
82
+ embedMany: () => embedMany,
81
83
  experimental_AssistantResponse: () => experimental_AssistantResponse,
82
84
  experimental_StreamData: () => experimental_StreamData,
83
85
  experimental_StreamingReactResponse: () => experimental_StreamingReactResponse,
@@ -192,6 +194,53 @@ var EmbedResult = class {
192
194
  }
193
195
  };
194
196
 
197
+ // core/util/split-array.ts
198
+ function splitArray(array, chunkSize) {
199
+ if (chunkSize <= 0) {
200
+ throw new Error("chunkSize must be greater than 0");
201
+ }
202
+ const result = [];
203
+ for (let i = 0; i < array.length; i += chunkSize) {
204
+ result.push(array.slice(i, i + chunkSize));
205
+ }
206
+ return result;
207
+ }
208
+
209
+ // core/embed/embed-many.ts
210
+ async function embedMany({
211
+ model,
212
+ values,
213
+ maxRetries,
214
+ abortSignal
215
+ }) {
216
+ const retry = retryWithExponentialBackoff({ maxRetries });
217
+ const maxEmbeddingsPerCall = model.maxEmbeddingsPerCall;
218
+ if (maxEmbeddingsPerCall == null) {
219
+ const modelResponse = await retry(
220
+ () => model.doEmbed({ values, abortSignal })
221
+ );
222
+ return new EmbedManyResult({
223
+ values,
224
+ embeddings: modelResponse.embeddings
225
+ });
226
+ }
227
+ const valueChunks = splitArray(values, maxEmbeddingsPerCall);
228
+ const embeddings = [];
229
+ for (const chunk of valueChunks) {
230
+ const modelResponse = await retry(
231
+ () => model.doEmbed({ values: chunk, abortSignal })
232
+ );
233
+ embeddings.push(...modelResponse.embeddings);
234
+ }
235
+ return new EmbedManyResult({ values, embeddings });
236
+ }
237
+ var EmbedManyResult = class {
238
+ constructor(options) {
239
+ this.values = options.values;
240
+ this.embeddings = options.embeddings;
241
+ }
242
+ };
243
+
195
244
  // core/generate-object/generate-object.ts
196
245
  var import_provider5 = require("@ai-sdk/provider");
197
246
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
@@ -1685,7 +1734,7 @@ var StreamTextResult = class {
1685
1734
  "Content-Type": "text/plain; charset=utf-8",
1686
1735
  ...init == null ? void 0 : init.headers
1687
1736
  });
1688
- const reader = this.textStream.pipeThrough(createCallbacksTransformer(void 0)).pipeThrough(createStreamDataTransformer()).getReader();
1737
+ const reader = this.toAIStream().getReader();
1689
1738
  const read = async () => {
1690
1739
  try {
1691
1740
  while (true) {
@@ -1716,15 +1765,14 @@ var StreamTextResult = class {
1716
1765
  "Content-Type": "text/plain; charset=utf-8",
1717
1766
  ...init == null ? void 0 : init.headers
1718
1767
  });
1719
- const reader = this.textStream.getReader();
1768
+ const reader = this.textStream.pipeThrough(new TextEncoderStream()).getReader();
1720
1769
  const read = async () => {
1721
- const encoder = new TextEncoder();
1722
1770
  try {
1723
1771
  while (true) {
1724
1772
  const { done, value } = await reader.read();
1725
1773
  if (done)
1726
1774
  break;
1727
- response.write(encoder.encode(value));
1775
+ response.write(value);
1728
1776
  }
1729
1777
  } catch (error) {
1730
1778
  throw error;
@@ -1754,23 +1802,13 @@ var StreamTextResult = class {
1754
1802
  */
1755
1803
  toTextStreamResponse(init) {
1756
1804
  var _a;
1757
- const encoder = new TextEncoder();
1758
- return new Response(
1759
- this.textStream.pipeThrough(
1760
- new TransformStream({
1761
- transform(chunk, controller) {
1762
- controller.enqueue(encoder.encode(chunk));
1763
- }
1764
- })
1765
- ),
1766
- {
1767
- status: (_a = init == null ? void 0 : init.status) != null ? _a : 200,
1768
- headers: {
1769
- "Content-Type": "text/plain; charset=utf-8",
1770
- ...init == null ? void 0 : init.headers
1771
- }
1805
+ return new Response(this.textStream.pipeThrough(new TextEncoderStream()), {
1806
+ status: (_a = init == null ? void 0 : init.status) != null ? _a : 200,
1807
+ headers: {
1808
+ "Content-Type": "text/plain; charset=utf-8",
1809
+ ...init == null ? void 0 : init.headers
1772
1810
  }
1773
- );
1811
+ });
1774
1812
  }
1775
1813
  };
1776
1814
  var experimental_streamText = streamText;
@@ -2235,86 +2273,61 @@ var StreamData = class {
2235
2273
  constructor() {
2236
2274
  this.encoder = new TextEncoder();
2237
2275
  this.controller = null;
2238
- // closing the stream is synchronous, but we want to return a promise
2239
- // in case we're doing async work
2240
- this.isClosedPromise = null;
2241
- this.isClosedPromiseResolver = void 0;
2242
2276
  this.isClosed = false;
2243
- // array to store appended data
2244
- this.data = [];
2245
- this.messageAnnotations = [];
2246
- this.isClosedPromise = new Promise((resolve) => {
2247
- this.isClosedPromiseResolver = resolve;
2248
- });
2277
+ this.warningTimeout = null;
2249
2278
  const self = this;
2250
- this.stream = new TransformStream({
2279
+ this.stream = new ReadableStream({
2251
2280
  start: async (controller) => {
2252
2281
  self.controller = controller;
2253
- },
2254
- transform: async (chunk, controller) => {
2255
- if (self.data.length > 0) {
2256
- const encodedData = self.encoder.encode(
2257
- formatStreamPart("data", self.data)
2258
- );
2259
- self.data = [];
2260
- controller.enqueue(encodedData);
2261
- }
2262
- if (self.messageAnnotations.length) {
2263
- const encodedMessageAnnotations = self.encoder.encode(
2264
- formatStreamPart("message_annotations", self.messageAnnotations)
2265
- );
2266
- self.messageAnnotations = [];
2267
- controller.enqueue(encodedMessageAnnotations);
2282
+ if (process.env.NODE_ENV === "development") {
2283
+ self.warningTimeout = setTimeout(() => {
2284
+ console.warn(
2285
+ "The data stream is hanging. Did you forget to close it with `data.close()`?"
2286
+ );
2287
+ }, 3e3);
2268
2288
  }
2269
- controller.enqueue(chunk);
2270
2289
  },
2271
- async flush(controller) {
2272
- const warningTimeout = process.env.NODE_ENV === "development" ? setTimeout(() => {
2273
- console.warn(
2274
- "The data stream is hanging. Did you forget to close it with `data.close()`?"
2275
- );
2276
- }, 3e3) : null;
2277
- await self.isClosedPromise;
2278
- if (warningTimeout !== null) {
2279
- clearTimeout(warningTimeout);
2280
- }
2281
- if (self.data.length) {
2282
- const encodedData = self.encoder.encode(
2283
- formatStreamPart("data", self.data)
2284
- );
2285
- controller.enqueue(encodedData);
2286
- }
2287
- if (self.messageAnnotations.length) {
2288
- const encodedData = self.encoder.encode(
2289
- formatStreamPart("message_annotations", self.messageAnnotations)
2290
- );
2291
- controller.enqueue(encodedData);
2292
- }
2290
+ pull: (controller) => {
2291
+ },
2292
+ cancel: (reason) => {
2293
+ this.isClosed = true;
2293
2294
  }
2294
2295
  });
2295
2296
  }
2296
2297
  async close() {
2297
- var _a;
2298
2298
  if (this.isClosed) {
2299
2299
  throw new Error("Data Stream has already been closed.");
2300
2300
  }
2301
2301
  if (!this.controller) {
2302
2302
  throw new Error("Stream controller is not initialized.");
2303
2303
  }
2304
- (_a = this.isClosedPromiseResolver) == null ? void 0 : _a.call(this);
2304
+ this.controller.close();
2305
2305
  this.isClosed = true;
2306
+ if (this.warningTimeout) {
2307
+ clearTimeout(this.warningTimeout);
2308
+ }
2306
2309
  }
2307
2310
  append(value) {
2308
2311
  if (this.isClosed) {
2309
2312
  throw new Error("Data Stream has already been closed.");
2310
2313
  }
2311
- this.data.push(value);
2314
+ if (!this.controller) {
2315
+ throw new Error("Stream controller is not initialized.");
2316
+ }
2317
+ this.controller.enqueue(
2318
+ this.encoder.encode(formatStreamPart("data", [value]))
2319
+ );
2312
2320
  }
2313
2321
  appendMessageAnnotation(value) {
2314
2322
  if (this.isClosed) {
2315
2323
  throw new Error("Data Stream has already been closed.");
2316
2324
  }
2317
- this.messageAnnotations.push(value);
2325
+ if (!this.controller) {
2326
+ throw new Error("Stream controller is not initialized.");
2327
+ }
2328
+ this.controller.enqueue(
2329
+ this.encoder.encode(formatStreamPart("message_annotations", [value]))
2330
+ );
2318
2331
  }
2319
2332
  };
2320
2333
  function createStreamDataTransformer() {
@@ -3088,6 +3101,94 @@ async function ReplicateStream(res, cb, options) {
3088
3101
  );
3089
3102
  }
3090
3103
 
3104
+ // core/util/merge-streams.ts
3105
+ function mergeStreams(stream1, stream2) {
3106
+ const reader1 = stream1.getReader();
3107
+ const reader2 = stream2.getReader();
3108
+ let lastRead1 = void 0;
3109
+ let lastRead2 = void 0;
3110
+ let stream1Done = false;
3111
+ let stream2Done = false;
3112
+ async function readStream1(controller) {
3113
+ try {
3114
+ if (lastRead1 == null) {
3115
+ lastRead1 = reader1.read();
3116
+ }
3117
+ const result = await lastRead1;
3118
+ lastRead1 = void 0;
3119
+ if (!result.done) {
3120
+ controller.enqueue(result.value);
3121
+ } else {
3122
+ controller.close();
3123
+ }
3124
+ } catch (error) {
3125
+ controller.error(error);
3126
+ }
3127
+ }
3128
+ async function readStream2(controller) {
3129
+ try {
3130
+ if (lastRead2 == null) {
3131
+ lastRead2 = reader2.read();
3132
+ }
3133
+ const result = await lastRead2;
3134
+ lastRead2 = void 0;
3135
+ if (!result.done) {
3136
+ controller.enqueue(result.value);
3137
+ } else {
3138
+ controller.close();
3139
+ }
3140
+ } catch (error) {
3141
+ controller.error(error);
3142
+ }
3143
+ }
3144
+ return new ReadableStream({
3145
+ async pull(controller) {
3146
+ try {
3147
+ if (stream1Done) {
3148
+ readStream2(controller);
3149
+ return;
3150
+ }
3151
+ if (stream2Done) {
3152
+ readStream1(controller);
3153
+ return;
3154
+ }
3155
+ if (lastRead1 == null) {
3156
+ lastRead1 = reader1.read();
3157
+ }
3158
+ if (lastRead2 == null) {
3159
+ lastRead2 = reader2.read();
3160
+ }
3161
+ const { result, reader } = await Promise.race([
3162
+ lastRead1.then((result2) => ({ result: result2, reader: reader1 })),
3163
+ lastRead2.then((result2) => ({ result: result2, reader: reader2 }))
3164
+ ]);
3165
+ if (!result.done) {
3166
+ controller.enqueue(result.value);
3167
+ }
3168
+ if (reader === reader1) {
3169
+ lastRead1 = void 0;
3170
+ if (result.done) {
3171
+ readStream2(controller);
3172
+ stream1Done = true;
3173
+ }
3174
+ } else {
3175
+ lastRead2 = void 0;
3176
+ if (result.done) {
3177
+ stream2Done = true;
3178
+ readStream1(controller);
3179
+ }
3180
+ }
3181
+ } catch (error) {
3182
+ controller.error(error);
3183
+ }
3184
+ },
3185
+ cancel() {
3186
+ reader1.cancel();
3187
+ reader2.cancel();
3188
+ }
3189
+ });
3190
+ }
3191
+
3091
3192
  // shared/parse-complex-response.ts
3092
3193
  function assignAnnotationsToMessage(message, annotations) {
3093
3194
  if (!message || !annotations || !annotations.length)
@@ -3242,7 +3343,7 @@ var experimental_StreamingReactResponse = class {
3242
3343
  let next = new Promise((resolve) => {
3243
3344
  resolveFunc = resolve;
3244
3345
  });
3245
- const processedStream = (options == null ? void 0 : options.data) != null ? res.pipeThrough((_a = options == null ? void 0 : options.data) == null ? void 0 : _a.stream) : res;
3346
+ const processedStream = (options == null ? void 0 : options.data) != null ? mergeStreams((_a = options == null ? void 0 : options.data) == null ? void 0 : _a.stream, res) : res;
3246
3347
  let lastPayload = void 0;
3247
3348
  parseComplexResponse({
3248
3349
  reader: processedStream.getReader(),
@@ -3280,7 +3381,7 @@ var StreamingTextResponse = class extends Response {
3280
3381
  constructor(res, init, data) {
3281
3382
  let processedStream = res;
3282
3383
  if (data) {
3283
- processedStream = res.pipeThrough(data.stream);
3384
+ processedStream = mergeStreams(data.stream, res);
3284
3385
  }
3285
3386
  super(processedStream, {
3286
3387
  ...init,
@@ -3322,6 +3423,7 @@ function streamToResponse(res, response, init) {
3322
3423
  AnthropicStream,
3323
3424
  AssistantResponse,
3324
3425
  CohereStream,
3426
+ EmbedManyResult,
3325
3427
  EmbedResult,
3326
3428
  EmptyResponseBodyError,
3327
3429
  GenerateObjectResult,
@@ -3360,6 +3462,7 @@ function streamToResponse(res, response, init) {
3360
3462
  createEventStreamTransformer,
3361
3463
  createStreamDataTransformer,
3362
3464
  embed,
3465
+ embedMany,
3363
3466
  experimental_AssistantResponse,
3364
3467
  experimental_StreamData,
3365
3468
  experimental_StreamingReactResponse,