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 +57 -6
- package/dist/index.d.ts +57 -6
- package/dist/index.js +178 -75
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +176 -75
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
- package/react/dist/index.d.mts +2 -5
- package/react/dist/index.d.ts +2 -5
- package/rsc/dist/rsc-server.mjs.map +1 -1
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:
|
2147
|
-
private isClosedPromise;
|
2148
|
-
private isClosedPromiseResolver;
|
2200
|
+
stream: ReadableStream<Uint8Array>;
|
2149
2201
|
private isClosed;
|
2150
|
-
private
|
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:
|
2147
|
-
private isClosedPromise;
|
2148
|
-
private isClosedPromiseResolver;
|
2200
|
+
stream: ReadableStream<Uint8Array>;
|
2149
2201
|
private isClosed;
|
2150
|
-
private
|
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.
|
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(
|
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
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
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
|
-
|
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
|
2279
|
+
this.stream = new ReadableStream({
|
2251
2280
|
start: async (controller) => {
|
2252
2281
|
self.controller = controller;
|
2253
|
-
|
2254
|
-
|
2255
|
-
|
2256
|
-
|
2257
|
-
|
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
|
-
|
2272
|
-
|
2273
|
-
|
2274
|
-
|
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
|
-
|
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.
|
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.
|
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 ?
|
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 =
|
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,
|